Hi LilyPond users,

I would like to ask a question about the vertical spacing in a rather
long score (example attached, sorry about the length but I was unable
to reproduce the issue on a smaller scale). The problem which I am
facing is that LilyPond leaves too much vertical space between systems
and the score then looks disarranged. Even when page-breaking is set
to "#ly:minimal-breaking", LilyPond does not seem to try to use to the
minimum number of pages. I believe that the primary reason is bad
extent estimation which can be seen when annotate-spacing is enabled,
but I am not sure about that.

I believe the attached sample can be typeset on 4 pages. But LilyPond
by default uses 6 pages. I can force the number of pages to 5 and it
still somehow works (with a little less of blank vertical space and
also a programming error complaining about number of pages being out
of bounds). But when I force the number of pages to 4, I get an
overfull last page while the first three pages still have plenty of
free vertical space... I do not know what to think about that.

When I force the number of systems per page to 9, the first two pages
are typeset correctly and all the vertical space is well utilized. But
then the third page becomes the last one (because the remaining
systems are large) and overflows, naturally.

It would maybe help if I could force the number of systems per each
page individually. Then I believe I would be able to fit this score to
4 pages. But ... I still feel like that is not a way to go. I believe
LilyPond should be clever enough to do it automatically, when set up
properly. Now, the only question remaining is how to set it up
properly. Nothing that I have tried so far helped, so I thought I will
ask here. Does anyone have an idea of how to fit the attached score to
4 pages?

Thank you for any advices.

Sincerely
Peter Bašista
\version "2.19.19"

chordsToRepeat = {
  c2 f |
}

melodyToRepeat = {
  c8 e g r f a c r |
}

melodyToRepeatFirstHalf = {
  c8 e g r r2 |
}

melodyToRepeatSecondHalf = {
  r2 f8 a c r |
}

textToRepeatFirstHalf = \lyricmode {
  do mi sol
}

textToRepeatSecondHalf = \lyricmode {
  fa la do
}

textToRepeat = \lyricmode {
  do mi sol fa la do
}

verseChords = \chordmode {
  \repeat unfold 24 \chordsToRepeat
}

verseOneMelody = \relative c' {
  \repeat unfold 24 \melodyToRepeat
}

verseOneText = \lyricmode {
  \repeat unfold 24 \textToRepeat
}

verseTwoMelody = \relative c' {
  \repeat unfold 24 \melodyToRepeat
}

verseTwoText = \lyricmode {
  \repeat unfold 24 \textToRepeat
}

prechorusChords = \chordmode {
  \repeat unfold 8 \chordsToRepeat
}

prechorusOneSoprano = \relative c' {
  \repeat unfold 8 \melodyToRepeatFirstHalf
}

prechorusOneTenor = \relative c' {
  \repeat unfold 8 \melodyToRepeatSecondHalf
}

prechorusTwoSoprano = \relative c' {
  \repeat unfold 8 \melodyToRepeatFirstHalf
}

prechorusTwoTenor = \relative c' {
  \repeat unfold 8 \melodyToRepeatSecondHalf
}

prechorusTextSoprano = \lyricmode {
  \repeat unfold 8 \textToRepeatFirstHalf
}

prechorusTextTenor = \lyricmode {
  \repeat unfold 8 \textToRepeatSecondHalf
}

chorusChords = \chordmode {
  \repeat unfold 8 \chordsToRepeat
}

chorusSoprano = \relative c' {
  \repeat unfold 8 \melodyToRepeat
}

chorusTenor = \relative c' {
  \repeat unfold 8 \melodyToRepeat
}

chorusBaritone = \relative c' {
  \repeat unfold 8 \melodyToRepeat
}

chorusText = \lyricmode {
  \repeat unfold 8 \textToRepeat
}

bridgeChords = \chordmode {
  \repeat unfold 20 \chordsToRepeat
}

bridgeSoprano = \relative c' {
  \repeat unfold 20 \melodyToRepeat
}

bridgeAlto = \relative c' {
  s1*4 |
  \repeat unfold 16 \melodyToRepeat
}

bridgeBaritone = \relative c' {
  s1*8 |
  \repeat unfold 12 \melodyToRepeat
}

bridgeTenor = \relative c' {
  s1*12 |
  \repeat unfold 8 \melodyToRepeat
}

bridgeSopranoText = \lyricmode {
  \repeat unfold 20 \textToRepeat
}

bridgeAltoText = \lyricmode {
  \repeat unfold 16 \textToRepeat
}

bridgeBaritoneText = \lyricmode {
  \repeat unfold 12 \textToRepeat
}

bridgeTenorText = \lyricmode {
  \repeat unfold 8 \textToRepeat
}

verseOne = <<
  \context ChordNames {
    \verseChords
  }

  \context Staff {
    \new Voice = "verseOneVoice" {
      \verseOneMelody
      \break
    }
  }

  \context Lyrics = "verseLyrics" {
    \lyricsto "verseOneVoice" {
      \verseOneText
    }
  }
>>

verseTwo = <<
  \context ChordNames {
    \verseChords
  }

  \context Staff {
    \new Voice = "verseTwoVoice" {
      \verseTwoMelody
      \break
    }
  }

  \context Lyrics = "verseLyrics" {
    \lyricsto "verseTwoVoice" {
      \verseTwoText
    }
  }
>>

prechorusOne = \context ChoirStaff <<
  \context ChordNames {
    \prechorusChords
  }

  \new Staff {
    \context Voice = "sopranoPrechorusVoice" {
      \prechorusOneSoprano
      \break
    }
  }

  \new Lyrics {
    \lyricsto "sopranoPrechorusVoice" {
      \prechorusTextSoprano
    }
  }

  \new Staff {
    \context Voice = "tenorPrechorusVoice" {
      \prechorusOneTenor
    }
  }

  \new Lyrics {
    \lyricsto "tenorPrechorusVoice" {
      \prechorusTextTenor
    }
  }
>>

prechorusTwo = \context ChoirStaff <<
  \context ChordNames {
    \prechorusChords
  }

  \new Staff {
    \context Voice = "sopranoPrechorusVoice" {
      \prechorusTwoSoprano
      \break
    }
  }

  \new Lyrics {
    \lyricsto "sopranoPrechorusVoice" {
      \prechorusTextSoprano
    }
  }

  \new Staff {
    \context Voice = "tenorPrechorusVoice" {
      \prechorusTwoTenor
    }
  }

  \new Lyrics {
    \lyricsto "tenorPrechorusVoice" {
      \prechorusTextTenor
    }
  }
>>

chorusOne = \context ChoirStaff <<
  \context ChordNames {
    \chorusChords
  }

  \new Staff {
    \context Voice = "sopranoChorusVoice" {
      \chorusSoprano
      \break
    }
  }

  \new Lyrics = "chorusLyrics" {
  }

  \new Staff {
    \context Voice = "baritoneChorusVoice" {
      \chorusBaritone
    }
  }

  \context Lyrics = "chorusLyrics" {
    \lyricsto "sopranoChorusVoice" {
      \chorusText
    }
  }
>>

chorusTwo = \context ChoirStaff <<
  \context ChordNames {
    \chorusChords
  }

  \new Staff {
    \context Voice = "sopranoChorusVoice" {
      \chorusSoprano
      \break
    }
  }

  \new Lyrics = "chorusLyrics" {
  }

  \new Staff {
    \context Voice = "baritoneChorusVoice" {
      \chorusBaritone
    }
  }

  \context Lyrics = "chorusLyrics" {
    \lyricsto "sopranoChorusVoice" {
      \chorusText
    }
  }
>>

bridge = \context ChoirStaff <<
  \context ChordNames {
    \bridgeChords
  }

  \new Staff \with {
    \RemoveEmptyStaves
  } {
    \new Voice = "sopranoBridgeVoice" {
      \bridgeSoprano
      \break
    }
  }

  \new Lyrics = "bridgeSopranoLyrics" {
    \lyricsto "sopranoBridgeVoice" {
      \bridgeSopranoText
    }
  }

  \new Staff \with {
    \RemoveEmptyStaves
  } {
    \new Voice = "altoBridgeVoice" {
      \bridgeAlto
    }
  }

  \new Lyrics = "bridgeAltoLyrics" {
    \lyricsto "altoBridgeVoice" {
      \bridgeAltoText
    }
  }

  \new Staff \with {
    \RemoveEmptyStaves
  } {
    \new Voice = "baritoneBridgeVoice" {
      \bridgeBaritone
    }
  }

  \new Lyrics {
    \lyricsto "baritoneBridgeVoice" {
      \bridgeBaritoneText
    }
  }

  \new Staff \with {
    \RemoveEmptyStaves
  } {
    \new Voice = "tenorBridgeVoice" {
      \bridgeTenor
    }
  }

  \new Lyrics {
    \lyricsto "tenorBridgeVoice" {
      \bridgeTenorText
    }
  }
>>

chorusFinal = \context ChoirStaff <<
  \context ChordNames {
    \chorusChords
  }

  \new Staff {
    \new Voice = "sopranoChorusVoice" {
      \chorusSoprano
    }
  }

  \new Lyrics = "chorusLyrics" {
    \lyricsto "sopranoChorusVoice" {
      \chorusText
    }
  }

  \new Staff {
    <<
      \new Voice = "baritoneChorusVoice" {
        \voiceOne
        \chorusBaritone
      }
      \new Voice = "tenorChorusVoice" {
        \voiceTwo
        \chorusTenor
      }
    >>
  }
>>

fullScore = \score {
  {
    \verseOne
    \prechorusOne
    \chorusOne
    \verseTwo
    \prechorusTwo
    \chorusTwo
    \bridge
    \chorusFinal
  }
  \layout {
  }
}

\book {
  \header {
    title = "Bad extent estimation example"
  }
  \fullScore
  \paper {
%    annotate-spacing = ##t
%    systems-per-page = #9
%    page-count = #5
%    page-breaking = #ly:minimal-breaking
  }
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to