\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 } #})