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

Reply via email to