|
From: | Benjamin Bloomfield |
Subject: | Re: Lyric separator |
Date: | Thu, 19 Sep 2013 12:22:39 -0400 |
On Thu, Sep 19, 2013 at 11:01 AM, David Nalesnik <address@hidden> wrote:
Hi Benjamin,[...]This is what I come up with:[...]OK, that was unnecessarily roundabout. Why bother with columns when I have access to all grobs, and I can just compare LyricText grobs?Try this:(Again, should work on 2.16.1.)%%%%%%%%%%%%%%%%%%%%\version "2.17.25"#(define (my-callback grob)(let* ((text (ly:grob-property-data grob 'text))(refp (ly:grob-system grob)); This returns all grobs in a line.(all-grobs (ly:grob-array->list(ly:grob-object refp 'all-elements))); We're only interested in LyricText grobs.(just-syllables(filter(lambda (x) (grob::has-interface x 'lyric-syllable-interface))all-grobs)); We want the first LyricText grob in the system. We must locate this; by position, since grobs don't seem to be listed in order in the; 'all-elements grob array.(first-syl(fold(lambda (elem prev)(if (< (ly:grob-relative-coordinate elem refp X)(ly:grob-relative-coordinate prev refp X))elemprev))(car just-syllables)just-syllables))); If our LyricText grob is the first on the line, override its stencil.(if (eq? grob first-syl)(begin(ly:grob-set-property! grob 'text#{ \markup \combine #text \translate #'(1.6 . -0.5) \draw-line #'(-4 . 0) #})(ly:grob-set-property! grob 'stencil (lyric-text::print grob))))))melody = \repeat unfold 16 g'4lyr = \lyricmode {\repeat unfold 16 sol}\score {\new Staff <<\new Voice = "voice" {\melody}\new Lyrics \with {\override LyricText #'after-line-breaking = #my-callback} \lyricsto "voice" \lyr>>}\paper {indent = 0line-width = 5.5\cm}
[Prev in Thread] | Current Thread | [Next in Thread] |