It works amazingly! Thanks a lot for your expertise!!! Best, Tu
Vào 22:50, T.6, 1 Th4, 2022 Jean Abou Samra <j...@abou-samra.fr> đã viết: > > > Le 31/03/2022 à 17:26, Dinh Hoang Tu a écrit : > > Hi Jean and all, > > > > I ran into cases when chorus and first verse are continued on first line. > > Then with this solution, stanza cannot be changed from chorus to verse > > 1, or vice versa. > > I would appreciate it if it can be archived somehow. > > Here's an updated snippet. > > Best, > Jean > > > > \version "2.22.2" > > sopranoMusic = \relative c'' { > \time 2/4 > % verse music > \repeat unfold 10 { c } \break > % chorus music > \repeat unfold 10 { c } \break > \repeat unfold 10 { c } > } > > sopranoLyrics = \lyrics { > \set stanza = "CH:" > \repeat unfold 9 { aaaaa } > << > { > \set stanza = "1." % cannot reset stanza to new value > \repeat unfold 21 { aaa } > } > \new Lyrics = "lyr2" { > \set stanza = "2." > \repeat unfold 20 { aaaa } > } > >> > } > > #(define (add-grob-definition grob-name grob-entry) > (set! all-grob-descriptions > (cons ((@@ (lily) completize-grob-entry) > (cons grob-name grob-entry)) > all-grob-descriptions))) > > #(add-grob-definition > 'StanzaNumberSpanner > `((direction . ,LEFT) > (font-series . bold) > (padding . 1.0) > (side-axis . ,X) > (stencil . ,ly:text-interface::print) > (X-offset . ,ly:side-position-interface::x-aligned-side) > (Y-extent . ,grob::always-Y-extent-from-stencil) > (meta . ((class . Spanner) > (interfaces . (font-interface > side-position-interface > stanza-number-interface > text-interface)))))) > > \layout { > \context { > \Global > \grobdescriptions #all-grob-descriptions > } > \context { > \Score > \remove Stanza_number_align_engraver > \consists > #(lambda (context) > (let ((texts '()) > (syllables '())) > (make-engraver > (acknowledgers > ((stanza-number-interface engraver grob source-engraver) > (set! texts (cons grob texts))) > ((lyric-syllable-interface engraver grob source-engraver) > (set! syllables (cons grob syllables)))) > ((stop-translation-timestep engraver) > (for-each > (lambda (text) > (for-each > (lambda (syllable) > (ly:pointer-group-interface::add-grob text > 'side-support-elements syllable)) > syllables)) > texts) > (set! syllables '()))))) > } > \context { > \Lyrics > \remove Stanza_number_engraver > \consists > #(lambda (context) > (let ((text #f) > (last-stanza #f)) > (make-engraver > ((process-music engraver) > (let ((stanza (ly:context-property context 'stanza #f))) > (if (and stanza (not (equal? stanza last-stanza))) > (let ((column (ly:context-property context > 'currentCommandColumn))) > (set! last-stanza stanza) > (if text > (ly:spanner-set-bound! text RIGHT column)) > (set! text (ly:engraver-make-grob engraver > 'StanzaNumberSpanner '())) > (ly:grob-set-property! text 'text stanza) > (ly:spanner-set-bound! text LEFT column))))) > ((finalize engraver) > (if text > (let ((column (ly:context-property context > 'currentCommandColumn))) > (ly:spanner-set-bound! text RIGHT column))))))) > \override StanzaNumberSpanner.horizon-padding = 10000 > } > } > > \score { > \new ChoirStaff << > \new Staff << > \new Voice = soprano \sopranoMusic > \new Lyrics \lyricsto soprano \sopranoLyrics > >> > >> > \layout { > indent = 0 > } > } > > >