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 ...
... (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.