[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Vertically align objects of same class?
From: |
Valentin Petzel |
Subject: |
Re: Vertically align objects of same class? |
Date: |
Mon, 05 Aug 2024 01:15:48 +0200 |
Am Sonntag, 21. Juli 2024, 08:12:07 MESZ schrieb Fennel:
> Valentino,
>
> Your function seems to not work for polyphonic passages as in the example
> below. Is there a fix for the function, would using \voiceOne and \voiceTwo
> explicitly for this polyphonic context make a difference?
>
Hello Fennel,
the issue here is that Horizontal Brackets require NoteHeads, and in your case
there are none (the Brackets would not be printed in any case). If you want to
use them in this case, add the engraver to the Staff context instead. But then
also your polyphonic structure is a mess (your group definition is outside of
the << ... >>, so it comes only after the notes). Finally there is some issue
with order, so I‘ve adjusted the engraver slightly:
\version "2.24.3"
#(define (outside-staff-collecting-engraver context)
(let* ((span_up #f) (span_down #f) (elts '()))
(make-engraver
((initialize engraver)
(set! span_up (ly:engraver-make-grob engraver 'TextSpanner '()))
(ly:grob-set-property! span_up 'transparent #t)
(ly:grob-set-property! span_up 'direction UP)
(set! span_down (ly:engraver-make-grob engraver 'TextSpanner '()))
(ly:grob-set-property! span_down 'transparent #t)
(ly:grob-set-property! span_down 'direction DOWN))
(acknowledgers
((outside-staff-interface engraver grob source-engraver)
(set! elts (cons grob elts))))
((process-acknowledged engraver)
(for-each
(lambda (grob)
(if (assoc-get 'align (ly:grob-property grob 'details))
(let* ((d (ly:grob-property grob 'direction))
(span (if (= d UP) span_up span_down)))
(display grob)
(display (ly:spanner-bound grob LEFT))
(ly:grob-set-parent! grob Y span)
(if (null? (ly:spanner-bound span LEFT))
(ly:spanner-set-bound! span LEFT
(if (ly:spanner? grob)
(ly:spanner-bound grob LEFT)
grob)))
(ly:spanner-set-bound! span RIGHT
(if (ly:spanner? grob)
(ly:spanner-bound grob LEFT)
grob))
(ly:grob-set-property! grob 'outside-staff-priority #f)
(ly:grob-set-property! grob 'Y-offset 0))))
elts)
(set! elts '())))))
\layout {
\context {
\Staff
\consists #outside-staff-collecting-engraver
\consists Horizontal_bracket_engraver
\override HorizontalBracket.direction = #UP
}
\context {
\Voice
\remove Horizontal_bracket_engraver
}
}
\relative c {
\override Staff.HorizontalBracket.details.align = ##t
<<
<<
{ c\startTextSpan c c c\stopTextSpan | }
\\
{ g g g g | }
\\
{ a a a a }
>>
{ s\startGroup s s s\stopGroup }
>>
}
signature.asc
Description: This is a digitally signed message part.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Vertically align objects of same class?,
Valentin Petzel <=