Re: Combining crossStaff with a central beam
Thank you very much - that's a nicer resolution than I had managed (which was very much a hack - less code for a single example, but poorer spacing). As for crossStaff and direction, I have certainly found matching to be necessary in my experience; and it's logical to require the same, because otherwise it's not clear which end gets the stem and flags (if any). Paul From: Thomas Morley To: Paul Hodges Cc: lilypond-user Sent: 20/02/2022 14:59 Subject: Re: Combining crossStaff with a central beam Am Sa., 19. Feb. 2022 um 19:45 Uhr schrieb Paul Hodges : > > I am trying to set the attached image (both staves are bass clef). I have > written the tuplet (without the note on the top staff in the first chord) in > my lower staff voice and jumping between staves as required; the missing note > I have set in my top staff voice as the first note of a tuplet with bracket > and number hidden and followed by the required skip. But I can't find any > way to make the two parts of the first chord join up, because the \crossStaff > directive requires the stems to be in the same direction, and here they are > inherently not so. > > Any ideas? > > I can produce non-working code if required, but I think the description of > the problem is enough. > > Paul Afaict, \crossStaff does not _require_ Stems in the same direction. Ofcourse different directions usually make the Stem to far apart from each other to connect them. Though, if you move a NoteColumn so that the Stems are very close, they are connectable. Sometimes this is very tedious, but quite often the below defined pushNC works nicely: pushNC = \once \override NoteColumn.X-offset = #(lambda (grob) (let* ((p-c (ly:grob-parent grob X)) (p-c-elts (ly:grob-object p-c 'elements)) (stems (if (ly:grob-array? p-c-elts) (filter (lambda (elt)(grob::has-interface elt 'stem-interface)) (ly:grob-array->list p-c-elts)) #f)) (stems-x-exts (if stems (map (lambda (stem) (ly:grob-extent stem (ly:grob-common-refpoint grob stem X) X)) stems) '())) (sane-ext (filter interval-sane? stems-x-exts)) (cars (map car sane-ext))) (if (pair? cars) (abs (- (apply max cars) (apply min cars))) 0))) \layout { \context { \Score \consists #Span_stem_engraver } } \new PianoStaff << \new Staff = "1" { \pushNC g''4*1/8 s16. } \new Staff = "2" { \clef "bass" \override Beam.auto-knee-gap = 1 \override Beam.positions = #(grob-transformer 'positions (lambda (grob original) (coord-translate original -1))) \override TupletBracket.direction = #DOWN \override TupletBracket.bracket-visibility = ##t \tuplet 5/4 { \crossStaff 32[ \change Staff = "1" c''' bis' \change Staff = "2" a ] } } >> HTH, Harm
Re: Combining crossStaff with a central beam
Am Sa., 19. Feb. 2022 um 19:45 Uhr schrieb Paul Hodges : > > I am trying to set the attached image (both staves are bass clef). I have > written the tuplet (without the note on the top staff in the first chord) in > my lower staff voice and jumping between staves as required; the missing note > I have set in my top staff voice as the first note of a tuplet with bracket > and number hidden and followed by the required skip. But I can't find any > way to make the two parts of the first chord join up, because the \crossStaff > directive requires the stems to be in the same direction, and here they are > inherently not so. > > Any ideas? > > I can produce non-working code if required, but I think the description of > the problem is enough. > > Paul Afaict, \crossStaff does not _require_ Stems in the same direction. Ofcourse different directions usually make the Stem to far apart from each other to connect them. Though, if you move a NoteColumn so that the Stems are very close, they are connectable. Sometimes this is very tedious, but quite often the below defined pushNC works nicely: pushNC = \once \override NoteColumn.X-offset = #(lambda (grob) (let* ((p-c (ly:grob-parent grob X)) (p-c-elts (ly:grob-object p-c 'elements)) (stems (if (ly:grob-array? p-c-elts) (filter (lambda (elt)(grob::has-interface elt 'stem-interface)) (ly:grob-array->list p-c-elts)) #f)) (stems-x-exts (if stems (map (lambda (stem) (ly:grob-extent stem (ly:grob-common-refpoint grob stem X) X)) stems) '())) (sane-ext (filter interval-sane? stems-x-exts)) (cars (map car sane-ext))) (if (pair? cars) (abs (- (apply max cars) (apply min cars))) 0))) \layout { \context { \Score \consists #Span_stem_engraver } } \new PianoStaff << \new Staff = "1" { \pushNC g''4*1/8 s16. } \new Staff = "2" { \clef "bass" \override Beam.auto-knee-gap = 1 \override Beam.positions = #(grob-transformer 'positions (lambda (grob original) (coord-translate original -1))) \override TupletBracket.direction = #DOWN \override TupletBracket.bracket-visibility = ##t \tuplet 5/4 { \crossStaff 32[ \change Staff = "1" c''' bis' \change Staff = "2" a ] } } >> HTH, Harm
Combining crossStaff with a central beam
I am trying to set the attached image (both staves are bass clef). I have written the tuplet (without the note on the top staff in the first chord) in my lower staff voice and jumping between staves as required; the missing note I have set in my top staff voice as the first note of a tuplet with bracket and number hidden and followed by the required skip. But I can't find any way to make the two parts of the first chord join up, because the \crossStaff directive requires the stems to be in the same direction, and here they are inherently not so. Any ideas? I can produce non-working code if required, but I think the description of the problem is enough. Paul