How to control vertical spacing in the middle of a piece?

\new StaffGroup \with
{ \override StaffGrouper.staff-staff-spacing.padding = 10 } % It's OK
<<
   \new Staff
   {
     c' c' c' c'
     \break
     \override StaffGrouper.staff-staff-spacing.padding = 30 % It isn't work
     c' c' c' c'
   }
   \new Staff { c' c' c' c' c' c' c' c' }
>>

пт, 1 февр. 2019 г. в 11:41, Павел Буданов <budanov.pa...@gmail.com>:

> It really helped me, I am very grateful to you. Would you like to change
> the vertical spacing chapter
> <http://lilypond.org/doc/v2.18/Documentation/learning/vertical-spacing>
> in the learning manual? You were able to explain a lot of things in plain
> language.
>
> пт, 1 февр. 2019 г. в 05:54, Aaron Hill <lilyp...@hillvisions.com>:
>
>> On 2019-01-31 9:11 am, Павел Буданов wrote:
>> > I've solved this problem partially with for lower contexts, but i
>> > can't find the necessary properties for upper contexts. Can you help
>> > me?
>> >
>> > \new StaffGroup
>> > <<
>> >   \new Dynamics { s2.\< s4\ff }
>> >   \new Lyrics \lyricmode { Ly4 -- ric ly -- ric }
>> >   \new Staff \with
>> >   { \override VerticalAxisGroup.staff-staff-spacing =
>> > #'((basic-distance . 20) (padding . 0.5)) }
>> >   { a'4 a' a' a' }
>> >   \new Staff { d'4 d' d' d' }
>> >   \new Lyrics \with
>> >   {
>> >     \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
>> > #'((basic-distance . 10) (padding . 0.5))
>> >     \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
>> > #'((basic-distance . 10) (padding . 0.5))
>> >   }
>> >   \lyricmode { Ly4 -- ric ly -- ric }
>> >   \new Dynamics { s2.\< s4\ff }
>> > >>
>>
>> Be sure to examine the output of LilyPond for warnings, not just errors:
>>
>> > warning: staff-affinities should only decrease
>>
>> This is telling you that you need to manually adjust
>> VerticalAxisGroup.staff-affinity.  By default, Dynamics uses a
>> staff-affinity of CENTER (0) as it typically appears between two staves,
>> whereas Lyrics uses UP (1) as it typically appears below a staff.  Your
>> upper Lyrics context is trying to locate its "relatedstaff" above, but
>> there is none to be found.  You will need to set its staff-affinity to
>> DOWN (-1).  (You could leave the two Dynamics contexts set to CENTER
>> staff-affinity; but it arguably better to also explicitly set them to
>> UP/DOWN based on where they appear.)
>>
>> There is a second issue that unfortunately there is no warning for.  You
>> are setting basic-distance but not minimum-distance as well.  By
>> omitting minimum-distance from the spacing alist, you are using the
>> default value of zero.  LilyPond only attempts to honor basic-distance,
>> but will collapse down to minimum-distance if needed (and often a little
>> too eagerly).  If you tried to set only basic-distance for the upper
>> contexts, you may find that it has no effect.
>>
>> It may be easier to see what it going on by only using padding, although
>> a combination of basic-distance, minimum-distance, padding, and
>> stretchability is often required to get the most out of the flexible
>> spacing system.  Consider the following:
>>
>> %%%%
>> \version "2.19.82"
>>
>> % Forcibly reset all default spacing variables to zero.
>> \layout {
>>    \context { \Dynamics
>>      \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #'(())
>>      \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'(())
>>      \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing = #'(())
>>    }
>>    \context { \Lyrics
>>      \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #'(())
>>      \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'(())
>>      \override VerticalAxisGroup.nonstaff-unrelatedstaff-spacing = #'(())
>>    }
>>    \context { \Staff
>>      \override VerticalAxisGroup.default-staff-staff-spacing = #'(())
>>      \override VerticalAxisGroup.staff-staff-spacing = #'(())
>>    }
>> }
>>
>> \new StaffGroup <<
>>    \new Dynamics \with {
>>        % Dynamics is above Staff.
>>        \override VerticalAxisGroup.staff-affinity = #DOWN
>>        % Spacing between this Dynamics and the following Lyrics.
>>        \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
>>          #'((padding . 2))
>>      }
>>      { s2.\< s4\ff }
>>    \new Lyrics \with {
>>        % Lyrics is above Staff.
>>        \override VerticalAxisGroup.staff-affinity = #DOWN
>>        % Spacing between this Lyrics and the following Staff.
>>        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
>>          #'((padding . 3))
>>      }
>>      \lyricmode { Ly4 -- ric ly -- ric }
>>    \new Staff \with {
>>        % Spacing between this Staff and the following Staff.
>>        \override VerticalAxisGroup.staff-staff-spacing =
>>          #'((padding . 5))
>>      }
>>      { a'4 a' a' a' }
>>    \new Staff { d'4 d' d' d' }
>>    \new Lyrics \with {
>>        % Lyrics is below Staff.
>>        \override VerticalAxisGroup.staff-affinity = #UP
>>        % Spacing between this Lyrics and the preceding Staff.
>>        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing =
>>          #'((padding . 3))
>>        % Spacing between this Lyrics and the following Dynamics.
>>        \override VerticalAxisGroup.nonstaff-nonstaff-spacing =
>>          #'((padding . 2))
>>      }
>>      \lyricmode { Ly4 -- ric ly -- ric }
>>    \new Dynamics \with {
>>        % Dynamics is below Staff.
>>        \override VerticalAxisGroup.staff-affinity = #UP
>>      }
>>      { s2.\< s4\ff }
>>    >>
>> %%%%
>>
>> Play around with the various padding amounts in the snippet.  It should
>> hopefully be clear which spacing variable affects what spacing.
>> Generally speaking, spacing is done top to bottom, so spacing is almost
>> always below an item.  The exception is when a non-staff has its related
>> (or unrelated) staff above it.
>>
>> Once you have a good feel for that, set padding to a large negative
>> number (e.g. -100) and then experiment with setting minimum-distance as
>> well.  The negative padding will permit overlap, so it is easier to see
>> how minimum-distance works.  You should notice that you need larger
>> values for minimum-distance than you did with padding to achieve a
>> similar spacing.  That is because minimum-distance is measured not from
>> the extents/skylines of the content but from the reference point for
>> each context.  The Notation Reference lists these unique reference
>> points.
>>
>> After that, basic-distance works the same as minimum-distance in terms
>> of being measured from the reference points.  Just remember that since
>> LilyPond only tries to respect the basic-distance, you may need to rely
>> more on minimum-distance in practice.
>>
>> Hope some of this helps.
>>
>> -- Aaron Hill
>>
>> _______________________________________________
>> lilypond-user mailing list
>> lilypond-user@gnu.org
>> https://lists.gnu.org/mailman/listinfo/lilypond-user
>>
>
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to