Jean Abou Samra <j...@abou-samra.fr> writes: > Le 17/07/2022 à 10:11, Benjamin Tordoff a écrit : >> Hi all, >> >> I'm typesetting a score that uses "subito p" and "subito pp" in a couple of >> places. I've found snippets explaining how to get this to look right (subito >> in normal italics, the "p" or "pp" in dynamic font), and another snippet >> showing how to create a custom dynamic that correctly sets the midi volume, >> but not one that does both. What is the best way to add a text prefix to a >> dynamic whilst also retaining the dynamic's effect on MIDI output? >> >> \version "2.23.10" >> subPP = \markup{ \italic{sub.} \dynamic pp } >> >> \score { >> { >> c'2-\ff c'2-\subPP % Volume should be pp but is still ff >> } >> \layout {} >> \midi {} >> } > > > How about something like this: > > \version "2.22.2" > > subPPMarkup = \markup { \normal-text \italic { sub. } pp } > subPP = #(make-dynamic-script subPPMarkup) > > \midi { > \context { > \Score > dynamicAbsoluteVolumeFunction = > #(lambda (dyn) > (if (equal? dyn subPPMarkup) > 0.3 > (default-dynamic-absolute-volume dyn))) > } > }
It may be more convenient to just tamper with the visuals of a command, like
\version "2.22.2" subx = #(define-event-function (fun) (ly:event?) #{ -\tweak stencil #(lambda (g) (grob-interpret-markup g #{ \markup \concat { \with-dimensions #'(0 . 0) #'(0 . 0) \right-align \normal-text \italic "sub. " #(ly:grob-property g 'text) } #})) #fun #}) subPP = \subx \pp \score { { c'8\pppp\< d'8 e'8 f'8 g'8 a'8 b'8 c''8 | c''8\fffff b'8 a'8 g'8 f'8\subPP e'8 d'8 c'8 } \layout { } \midi { } }
Note that I put in some effort to stop "sub." from changing the alignment. If that's undesired, removing \with-dimension #'(0 . 0) #'(0 . 0) should do the trick. -- David Kastrup