Hi, I use a custom context (TimeSignatureContext) to house time signatures, rehearsal marks and metronome marks.
My TimeSignatureContext is essentially the same as Kieren's custom ScoreMarks context, which Kieren has described here ... http://lists.gnu.org/archive/html/lilypond-user/2013-11/msg00930.html ... (and in a couple of other threads, too). I've recently extended my custom TimeSignatureContext to engrave markup and text spanners. (Primary reason being to notate accelerando and ritardando spanners.) But TextScript.staff-padding and TextSpanner.staff-padding are ignored in this custom context. Here's an example that includes markup (but without staff padding): %%% EXAMPLE 1: no staff-padding %%% \version "2.19.11" \layout { \context { \name TimeSignatureContext \type Engraver_group \consists Axis_group_engraver \consists Mark_engraver \consists Metronome_mark_engraver \consists Text_engraver \consists Text_spanner_engraver \consists Time_signature_engraver \override MetronomeMark.X-extent = #'(0 . 0) \override MetronomeMark.Y-extent = #'(0 . 0) \override MetronomeMark.break-align-symbols = #'(left-edge) \override MetronomeMark.extra-offset = #'(0 . 4) \override MetronomeMark.font-size = 3 \override RehearsalMark.X-extent = #'(0 . 0) \override RehearsalMark.Y-offset = -2.25 \override RehearsalMark.X-offset = 8 \override RehearsalMark.break-align-symbols = #'(time-signature) \override RehearsalMark.break-visibility = #end-of-line-invisible \override RehearsalMark.font-name = "Didot" \override RehearsalMark.font-size = 10 \override RehearsalMark.outside-staff-priority = 500 \override RehearsalMark.self-alignment-X = #center \override TextScript.outside-staff-priority = 600 * \override TextScript.staff-padding = 8 % <== ignored* * \override TextSpanner.staff-padding = 8.75 <== ignored* \override TimeSignature.X-extent = #'(0 . 0) \override TimeSignature.break-align-symbol = #'left-edge \override TimeSignature.break-visibility = #end-of-line-invisible \override TimeSignature.space-alist.clef = #'(extra-space . 0.5) \override TimeSignature.style = #'numbered \override VerticalAxisGroup.default-staff-staff-spacing = #'( (basic-distance . 0) (minimum-distance . 8) (padding . 0) (stretchability . 0) ) } \context { \Staff \remove Time_signature_engraver } \context { \Score \accepts TimeSignatureContext \remove Mark_engraver \remove Metronome_mark_engraver } } \new Score << \new TimeSignatureContext { \time 2/4 \once \override TextSpanner.arrow-width = 0.25 \once \override TextSpanner.bound-details.left.stencil-align-dir-y = -0.5 \once \override TextSpanner.bound-details.left.text = \markup { \smaller \general-align #Y #DOWN \note-by-number #2 #0 #1 \upright " = 67.5" } \once \override TextSpanner.bound-details.right.arrow = ##t \once \override TextSpanner.bound-details.right.padding = 2 \once \override TextSpanner.bound-details.right.text = ##f \once \override TextSpanner.dash-fraction = 0.25 \once \override TextSpanner.dash-period = 1.5 s1 * 2/4 \startTextSpan \time 3/4 s1 * 3/4 \time 2/4 s1 * 2/4 \stopTextSpan ^ \markup { \smaller \general-align #Y #DOWN \note-by-number #2 #0 #1 \upright " = 135" } } \new Staff { \time 2/4 c'4 d'4 \time 3/4 c'4 d'4 e'4 \time 2/4 c'4 d'4 } >> %%% END %%% You can see that the problem here is that the text "falls" to less than elegant places on the page. (Image included as example-1.png.) Some experimenting proves that extending the custom context with a Staff_symbol_engraver fixes the staff-padding problem. (Logically enough: staff-padding isn't respected unless there's a staff to pad against.) We don't want the staff symbol to show, however, and so I've set StaffSymbol to transparent. Now everything looks almost perfect: %%% EXAMPLE 2: transparent staff symbol & staff padding %%% \version "2.19.11" \layout { \context { \name TimeSignatureContext \type Engraver_group \consists Axis_group_engraver \consists Mark_engraver \consists Metronome_mark_engraver * \consists Staff_symbol_engraver % <== this is new* \consists Text_engraver \consists Text_spanner_engraver \consists Time_signature_engraver \override MetronomeMark.X-extent = #'(0 . 0) \override MetronomeMark.Y-extent = #'(0 . 0) \override MetronomeMark.break-align-symbols = #'(left-edge) \override MetronomeMark.extra-offset = #'(0 . 4) \override MetronomeMark.font-size = 3 \override RehearsalMark.X-extent = #'(0 . 0) \override RehearsalMark.Y-offset = -2.25 \override RehearsalMark.X-offset = 8 \override RehearsalMark.break-align-symbols = #'(time-signature) \override RehearsalMark.break-visibility = #end-of-line-invisible \override RehearsalMark.font-name = "Didot" \override RehearsalMark.font-size = 10 \override RehearsalMark.outside-staff-priority = 500 \override RehearsalMark.self-alignment-X = #center * \override StaffSymbol.transparent = ##t % <== this is new* \override TextScript.outside-staff-priority = 600 * \override TextScript.staff-padding = 8 % <== now this is respected* * \override TextSpanner.staff-padding = 8.75 % <== now this is respected* \override TimeSignature.X-extent = #'(0 . 0) \override TimeSignature.break-align-symbol = #'left-edge \override TimeSignature.break-visibility = #end-of-line-invisible \override TimeSignature.space-alist.clef = #'(extra-space . 0.5) \override TimeSignature.style = #'numbered \override VerticalAxisGroup.default-staff-staff-spacing = #'( (basic-distance . 0) (minimum-distance . 8) (padding . 0) (stretchability . 0) ) } \context { \Staff \remove Time_signature_engraver } \context { \Score \accepts TimeSignatureContext \remove Mark_engraver \remove Metronome_mark_engraver } } \new Score << \new TimeSignatureContext { \time 2/4 \once \override TextSpanner.arrow-width = 0.25 \once \override TextSpanner.bound-details.left.stencil-align-dir-y = -0.5 \once \override TextSpanner.bound-details.left.text = \markup { \smaller \general-align #Y #DOWN \note-by-number #2 #0 #1 \upright " = 67.5" } \once \override TextSpanner.bound-details.right.arrow = ##t \once \override TextSpanner.bound-details.right.padding = 2 \once \override TextSpanner.bound-details.right.text = ##f \once \override TextSpanner.dash-fraction = 0.25 \once \override TextSpanner.dash-period = 1.5 s1 * 2/4 \startTextSpan \time 3/4 s1 * 3/4 \time 2/4 s1 * 2/4 \stopTextSpan ^ \markup { \smaller \general-align #Y #DOWN \note-by-number #2 #0 #1 \upright " = 135" } } \new Staff { \time 2/4 c'4 d'4 \time 3/4 c'4 d'4 e'4 \time 2/4 c'4 d'4 } >> %%% END %%% Output is included as example-2.png. QUESTION: The one remaining problem now is that the system start bar is visible at the beginning of the custom context (as shown in example-2.png). Any ideas as to how hide the system start bar before the custom TimeSignatureContext? I've tried all sorts of overrides (and moving around System_start_delimiter_engraver) and the presence of the system start bar seems to be an all-or-nothing affair handled at the score level. I've also tried lots of different ways of removing the Staff_symbol_engraver (which nicely causes the system start bar to disappear). But I'm absolutely stumped as to how to remove the Staff_symbol_engraver and still get the markup and spanners to respect staff-padding. Thanks, Trevor. -- Trevor Bača [email protected]
_______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
