Okay, fellas, I have a problem with this stanza code then.

When I plug it into my script, this code numbers every word as well as every line. I've attached a minimal example along with the include and my pdf output.

Maybe I'm doing it wrong.



\header {  title = "Stanza Test"  }
\include "stanza-number-every-line.ly"

verses = \new Voice = "verses" \relative c' {
    \time 4/4
    \key c \major
    a4 b4 c4 d4 | e2 f2 \bar "||"
}

wordsOne = \new Lyrics \with \numberLyrics 1 \lyricsto "verses" {
 Here are some words to sing
}
wordsTwo = \new Lyrics \with \numberLyrics 2 \lyricsto "verses" {
And line up with them -- selves
}
wordsThree = \new Lyrics \with \numberLyrics 3 \lyricsto "verses" {
See the stanz -- as line up in place
}

\score { <<
       \new Staff{   \verses }
       \wordsOne
        \wordsTwo
       \wordsThree
        >>
    \layout {}
}




On 7/4/2016 2:15 PM, Thomas Morley wrote:
2016-07-04 18:49 GMT+02:00 Br. Gabriel-Marie | SSPX <brgabr...@sspx.org>:
Gabriel-Marie, attached you'll find the most recent coding. It indeed needs a newer devel-version because of `ly:item-get-column'-usage David, thanks a lot for your research and findings. Your suggestions are all implemented leading to geat simplifications. In `keep-at-line-begin' I added some fool-proof. Regrettable StanzaNumber does not respond correctly for 'break-visibility... Thanks, Harm

\version "2.19.44"

%% Thanks to David Nalesnik
%% http://lists.gnu.org/archive/html/lilypond-user/2016-07/msg00028.html

#(define create-stanza-number-grob-engraver
;; puts out a StanzaNumber for every LyricText-grob
  (lambda (context)
    (let ((stanza (ly:context-property context 'stanza)))
      `((acknowledgers
          (lyric-syllable-interface .
            ,(lambda (engraver grob source-engraver)
              (let ((new-stanza-grob 
                      (ly:engraver-make-grob engraver 'StanzaNumber '())))
              (ly:grob-set-property! new-stanza-grob 'text stanza)))))))))

#(define (at-line-beginning? grob)
   (let* ((col (ly:item-get-column grob))
          (ln (ly:grob-object col 'left-neighbor))
          (col-to-check (if (ly:grob? ln) ln col)))
     (and (eq? #t (ly:grob-property col-to-check 'non-musical))
          (= 1 (ly:item-break-dir col-to-check)))))

#(define (keep-at-line-begin grob)
   (if (and (ly:item? grob) (not (at-line-beginning? grob)))
       (ly:grob-suicide! grob)
       grob))

keepLineStartStanzaNumbers =
\layout {
  \context {
  \Lyrics
  \override StanzaNumber.after-line-breaking =
    #keep-at-line-begin
  }
}

numberLyrics =
#(define-scheme-function (nmbr)(number?)
"Return a context-modification setting @code{stanza} and consisting 
@code{create-stanza-number-grob-engraver}."
#{
  \with {
    stanza = \markup \italic #(format #f "~a." nmbr)
    \consists #create-stanza-number-grob-engraver
  }
#})
\header {
    title = "Stanza Test"
}

\include "stanza-number-every-line.ly"


verses = \new Voice = "verses" \relative c' {
    \time 4/4
    \key c \major
    a4 b4 c4 d4 | e2 f2 \bar "||"
}


wordsOne = \new Lyrics  \with \numberLyrics 1 \lyricsto "verses" {
 Here are some words to sing
}
wordsTwo = \new Lyrics \with \numberLyrics 2 \lyricsto "verses" {
And line up with them -- selves
}
wordsThree = \new Lyrics \with \numberLyrics 3 \lyricsto "verses" {
See the stanz -- as line up in place
}

\score {
		<<
        \new Staff{   \verses }
       \wordsOne
        \wordsTwo
       \wordsThree
		>>
	\layout {}
}

Attachment: Stanza-Test.pdf
Description: Adobe PDF document

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to