Center text below hairpin dynamics: Difference between revisions
m Replace version="2.24.0" with version="2.24" now that the LilyWiki extension supports auto-selecting the latest release in a stable series |
mNo edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
This example provides a function to typeset a hairpin (de)crescendo with some additional text below it, such as “molto” or “poco”. The added text will change the direction according to the direction of the hairpin. The Hairpin is aligned to DynamicText. | This example provides a function to typeset a hairpin (de)crescendo with some additional text below it, such as “molto” or “poco”. The added text will change the direction according to the direction of the hairpin. The Hairpin is aligned to a <code>DynamicText</code> grob. | ||
The example also illustrates how to modify the way an object is normally printed, using some Scheme code. | The example also illustrates how to modify the way an object is normally printed, using some Scheme code. | ||
<lilypond version="2.24" | <lilypond version="2.24"> | ||
hairpinWithCenteredText = | hairpinWithCenteredText = | ||
#(define-music-function (text) (markup?) | #(define-music-function (text) (markup?) | ||
| Line 11: | Line 9: | ||
\once \override Voice.Hairpin.after-line-breaking = | \once \override Voice.Hairpin.after-line-breaking = | ||
#(lambda (grob) | #(lambda (grob) | ||
(let* ((stencil (ly:hairpin::print grob)) | |||
(par-y (ly:grob-parent grob Y)) | |||
(dir (ly:grob-property par-y 'direction)) | |||
(staff-line-thickness | |||
(ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)) | (ly:output-def-lookup (ly:grob-layout grob) | ||
'line-thickness)) | |||
(new-stencil | |||
(ly:stencil-aligned-to | |||
(ly:stencil-combine-at-edge | |||
(ly:stencil-aligned-to stencil X CENTER) | (ly:stencil-aligned-to stencil X CENTER) | ||
Y dir | Y dir | ||
(ly:stencil-aligned-to | (ly:stencil-aligned-to | ||
(grob-interpret-markup | |||
grob | |||
(make-fontsize-markup | |||
(magnification->font-size | |||
(+ (ly:staff-symbol-staff-space grob) | |||
(/ staff-line-thickness 2))) | |||
text)) | |||
X CENTER)) | |||
X LEFT)) | |||
(staff-space (ly:output-def-lookup | |||
(ly:grob-layout grob) 'staff-space)) | (ly:grob-layout grob) 'staff-space)) | ||
(par-x (ly:grob-parent grob X)) | |||
(dyn-text (grob::has-interface par-x | |||
'dynamic-text-interface)) | |||
(dyn-text-stencil-x-length | |||
(if dyn-text | (if dyn-text | ||
(interval-length | |||
(ly:stencil-extent | |||
(ly:grob-property par-x 'stencil) X)) | |||
0)) | |||
(if dyn-text | (x-shift | ||
(if dyn-text (- (+ staff-space dyn-text-stencil-x-length) | |||
(* 0.5 staff-line-thickness)) | |||
0))) | |||
(ly:grob-set-property! grob 'Y-offset 0) | |||
(ly:grob-set-property! grob | |||
'stencil (ly:stencil-translate-axis | |||
new-stencil | |||
x-shift X)))) | |||
#}) | #}) | ||
hairpinMolto = | hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } | ||
\hairpinWithCenteredText \markup { \italic molto } | hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } | ||
hairpinMore = | |||
\hairpinWithCenteredText \markup { \larger moltissimo | |||
\relative c' { | \relative c' { | ||
\hairpinMolto | \hairpinMolto c2\< c\f | ||
\hairpinMore c2\ppppp\< c\f | |||
\hairpinMore | |||
\break | \break | ||
\hairpinMolto | \hairpinMolto c2^\< c\f | ||
\hairpinMore c2\ppppp\< c\f | |||
\hairpinMore | |||
} | } | ||
</lilypond> | </lilypond> | ||
[[Category:Expressive marks]] | [[Category:Expressive marks]] | ||
[[Category:Really cool]] | |||
[[Category:Scheme]] | |||
[[Category:Text]] | [[Category:Text]] | ||
[[Category:Included in the official documentation]] | [[Category:Included in the official documentation]] | ||
[[Category:Snippet]] | |||