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