2015-05-08 2:29 GMT+02:00 Thomas Morley <thomasmorle...@gmail.com>: > 2015-05-07 18:48 GMT+02:00 Alexander Kobel <n...@a-kobel.de>: >> Dear all, >> >> I'm trying to move time signatures to print over bar lines for a modern >> piece, to allow for a proportional (or almost proportional) note spacing >> despite several time changes. >> >> The usual approach is to place them over the staff, like here: >> http://lsr.di.unimi.it/LSR/Item?id=272 >> However, the full piece has a whole bunch of staves, so vertical space is at >> a premium; for each staff, the signatures do not fit, and I feel that a >> single time signature over the score is not enough. >> Hence, I decided to break the bar line stencil into two short slices, and >> squeeze the time signature in between. >> >> I'm almost there. The missing piece is automatic adjustment of time >> signatures at the beginning of a system. If realignTimeSignatures in the >> attached example is delayed by one measure, the default placement of the >> first time signature is perfect - as usual. However, I could not find a way >> to do the same for the time signature in the fourth system (other than >> manually reverting the overrides). >> I achieve either >> 1) a nice placement of the in-line signature (with \realignTimeSignatures), >> but have to shift the begin-of-line ones by some amount and cannot make >> enough space for them, xor >> 2) the default position for the begin-of-line signatures (with >> \realignTimeSignaturesII), but then I cannot position barlines and time >> signatures on top of each other. >> Can anyone enlighten me here? >> >> Bonus points for someone who can come up with a proper centered alignment of >> the "4" in the double bar line at the /end/ of the third system... >> >> >> Thanks in advance, >> Alexander > > > > Hi, > > how about: > > > \version "2.19.18" > > cTime = > #(define-music-function (parser location time) (fraction?) > #{ \once \override Staff.BarLine #'stencil = > #(lambda (grob) > (ly:grob-set-property! grob 'bar-extent '(-2 . -1)) > (ly:stencil-add > (ly:bar-line::print grob) > (ly:stencil-translate-axis (ly:bar-line::print grob) 3 Y))) > \time $time #}) > > move-time-sig-into-bar-line = > \override Staff.BarLine.before-line-breaking = > #(lambda (grob) > (let* ( > (b-a-g (ly:grob-parent grob X)) > (b-a (ly:grob-parent b-a-g X)) > (elts (ly:grob-array->list (ly:grob-object b-a 'elements))) > (break-align-groups > (filter > (lambda (g) > (grob::has-interface g 'break-aligned-interface)) > elts)) > (b-a-g-elts > (apply append > (map > (lambda (g) > (ly:grob-array->list (ly:grob-object g 'elements))) > break-align-groups))) > (time-sig > (filter > (lambda (g) > (grob::has-interface g 'time-signature-interface)) > b-a-g-elts)) > (bar-line > (filter > (lambda (g) > (grob::has-interface g 'bar-line-interface)) > b-a-g-elts))) > (if (and (not (null? time-sig)) (not (null? bar-line))) > ;; TODO: > ;; only the first entry of time-sig and bar-line are affected > ;; may cause problems in cases where a StaffGroup contains Staffs with > ;; different settings for TimeSignature and/or BarLine > (let* ((time-sig-length > (interval-length > (ly:grob-extent (car time-sig) (car time-sig) X))) > (bar-line-length > (interval-length > (ly:grob-extent (car bar-line) (car bar-line) X)))) > (ly:grob-set-property! grob 'space-alist > `((time-signature extra-space > . > ,(/ (+ time-sig-length bar-line-length) -2)) > (custos minimum-space . 2.0) > (clef minimum-space . 1.0) > (key-signature extra-space . 1.0) > (key-cancellation extra-space . 1.0) > (first-note fixed-space . 0.3) > (next-note semi-fixed-space . 0.9) > (right-edge extra-space . 0.0)))
Next two lines don't work. Delete them for now. > (if (= (ly:item-break-dir grob) LEFT) > (ly:grob-set-property! (car time-sig) 'X-extent '(0 . 0))))))) > > > time-sig-space-at-line-end = > \override Staff.TimeSignature.space-alist = > #'((cue-clef extra-space . 1.5) > (first-note fixed-space . 2.0) > ;; not sure how it should look, for now hardcoded > (right-edge extra-space . 0) > (staff-bar extra-space . 1.0)) > > global = { > \cTime 2/4 s2*8 \cTime 3/4 s2. \cTime 2/4 s2*4 \break > > s2*2 \cTime 3/4 s2. \cTime 2/4 s2 \cTime 3/4 s2. \cTime 2/4 s2*5 > \cTime 3/4 s2. \cTime 2/4 s2 \cTime 3/4 s2. \break > > s2. \cTime 2/4 s2 \cTime 3/4 s2. \cTime 2/4 s2*2 \cTime 4/4 s1 > \cTime 2/4 s2*5 \cTime 4/4 s1 \cTime 2/4 s2 \bar "||" \break > > \cTime 4/4 s1 > } > > mel = \relative c'' { > | c2 | c | c | c | R | R > | c2 | c | c c4 | c2 | c | R | R > | c2 | c | c c4 | c2 | c c4 | c2 c | R > | c2 | c | c c4 | c2 | c c4 | c2. | c4 c | c2 c4 | c2 | c | R1 | R2 > | c2 | c | c | c | R1 | R2 > \once \override Score.RehearsalMark.break-visibility = ##(#t #f #f) > \once \override Score.RehearsalMark.self-alignment-X = #0.85 > \mark \markup \right-column { "not sure" "how it" "should look" ↓ } > | c1 > } > > #(set-global-staff-size 16.5) > > \paper { > left-margin = 15\mm > right-margin = 15\mm > } > > \score { > \new Staff << \global \mel >> > > \layout { > \context { > \Staff > \move-time-sig-into-bar-line > \time-sig-space-at-line-end > \override TimeSignature.style = #'single-digit > % \override TimeSignature.break-visibility = #end-of-line-invisible > } > } > } > > > There's a TODO in it ... > And I'm not sure how the combination of time-sig and (double-)bar-line > at line-end should look like. > If the bar-line is really at line-end the time-sig will stick out to > the right. Is this wanted? > > Cheers, > Harm _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user