Spacing lyrics to avoid visible bar lines only

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Spacing lyrics to avoid visible bar lines only

My fellow singers in choir have been asking me to improve the visual chunking of choir staves. They wanted to have closed bar lines on the right edge of each choir staff. 

Adding the `Span_bar_engraver` to `ChoirStaff` adds a lot of clutter and results in collisions with the lyrics, which is particularly unappealing with thick repeat bars. This can be quickly fixed by adding `Bar_engraver` to `Lyrics` and hiding them as described in ^[notation lyrics]. 

However, for aesthetical reasons I prefer removing all span bars, except non-defaults and single bar bars at the end of each line. So this would leave all repeats and double bar lines but no single bars unless there's a line break, much like ^[semi choir staff snippet

I've found a way to do this, except that there's some spacing issue with the lyrics at single bars that aren't even shown. In choir staves, lyrics can move below a bar line to take up the available space, which leaves a more pleasing appearance and saves space on the page. Sadly, I could either make the lyrics avoid all bar lines or not at all, but not only the ones that are actually shown. 

To the point: 
I would like to make the lyrics avoid some span bars while not avoiding the bar lines I've omitted using a call back. 

To illustrate I've compiled a somewhat minimal example using long words to trigger some collisions. For convenience I've also uploaded it to ^[lilybin]. 

\version "2.18.2" 

link = { 
  \once \override Score.RehearsalMark.self-alignment-X = #LEFT 
  \mark \markup \normalsize { 
  \with-url #"" "" 

redspn = \once \override Score.SpanBar.color = #red 
grnbar = \once \override Score.BarLine.color = #green 

notes = { 
  c1 \redspn | \repeat volta 2 { c | c \grnbar | c } | c | c | c \bar "|." 

words = \lyricmode { 
  Breathes | \markup { \with-color #red breathes } | 
  br | \markup { \with-color #green breathes } | 
  breathes | br | breathes | 

\score { 
  \new ChoirStaff << 
    \new Staff \relative c'' \notes \addlyrics \words 
    \new Staff \relative c'' \notes 

  \layout { 
    indent = 0 
    \context { \ChoirStaff 
      \consists "Span_bar_engraver" 
      \override BarLine.after-line-breaking = 
        #(lambda (grob) 
            (and (= 0 (ly:item-break-dir grob)) 
                 (string=? (ly:grob-property grob 'glyph-name) "|") ) 
            (ly:grob-set-property! grob 'allow-span-bar #f))) 
        % \context { \Lyrics 
    % \consists "Bar_engraver" 
    % \hide BarLine 
    % \override BarLine.after-line-breaking = 
    %   #(lambda (grob) 
    %     (if 
    %       (and (= 0 (ly:item-break-dir grob))) 
    %            (string=? (ly:grob-property grob 'glyph-name) "|") 
    %       (ly:grob-set-property! grob 'stencil #f)) 
    %   ) 
    % } 


The red colour indicates an unacceptable collision, whereas the green colour indicates the desired loose spacing under bars that are not spanned across staves. The commented-out section removes the relevant bar line stencils from the lyrics, but fails to loosen the spacing where there are no longer any bars to avoid. 

Can I conditionally add bar lines to lyrics without otherwise affecting their spacing? 

Sorry this got so long, any help would be much appreciated. 


[notation lyrics]:
[semi choir staff snippet]:

lilypond-user mailing list
[hidden email]