| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| 4.5.1 Horizontal spacing overview | ||
| 4.5.2 New spacing section | ||
| 4.5.3 Changing horizontal spacing | ||
| 4.5.4 Line width | ||
| 4.5.5 Proportional notation |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The spacing engine translates differences in durations into stretchable
distances (‘springs’) of differing lengths. Longer durations get
more space, shorter durations get less. The shortest durations get a
fixed amount of space (which is controlled by
shortest-duration-space in the
(internals)SpacingSpanner section ‘SpacingSpanner’ in Internals Reference
object). The longer the duration, the more space it gets: doubling a
duration adds spacing-increment of space to the note.
For example, the following piece contains lots of half, quarter, and 8th notes; the eighth note is followed by 1 note head width (NHW). The quarter note is followed by 2 NHW, the half by 3 NHW, etc.
\relative c' { c2 c4. c8 c4. c8 c4. c8 c8 c c4 c c }
Normally, spacing-increment is set to 1.2 staff space, which is
approximately the width of a note head, and
shortest-duration-space is set to 2.0, meaning that the
shortest note gets 2.4 staff space (2.0 times the
spacing-increment) of horizontal space. This space is counted
from the left edge of the symbol, so the shortest notes are generally
followed by one NHW of space.
If one would follow the above procedure exactly, then adding a single 32nd note to a score that uses 8th and 16th notes, would widen up the entire score a lot. The shortest note is no longer a 16th, but a 32nd, thus adding 1 NHW to every note. To prevent this, the shortest duration for spacing is not the shortest note in the score, but rather the one which occurs most frequently.
The most common shortest duration is determined as follows: in every measure, the shortest duration is determined. The most common shortest duration is taken as the basis for the spacing, with the stipulation that this shortest duration should always be equal to or shorter than an 8th note.
These durations may also be customized. If you set the
common-shortest-duration in
(internals)SpacingSpanner section ‘SpacingSpanner’ in Internals Reference, then
this sets the base duration for spacing. The maximum duration for this
base (normally an 8th), is set through base-shortest-duration.
Notes that are even shorter than the common shortest note are followed by a space that is proportional to their duration relative to the common shortest note. So if we were to add only a few 16th notes to the example above, they would be followed by half a NHW:
\relative { c''2 c4. c8 | c4. c16[ c] c4. c8 | c8 c c4 c c }
As explained in the Essay on automated music engraving, stem
directions will influence spacing (see
(essay)Optical spacing section ‘Optical spacing’ in Essay) and can
be adjusted using the stem-spacing-correction property of the
(internals)NoteSpacing section ‘NoteSpacing’ in Internals Reference object (which are generated for every
(internals)Voice section ‘Voice’ in Internals Reference context).
The StaffSpacing object (generated in
(internals)Staff section ‘Staff’ in Internals Reference context)
contains the same property for controlling the stem/bar line spacing.
The following example shows this; once with the default settings and once with an exaggerated adjustment:
Proportional notation is supported; see Proportional notation.
Essay on automated music engraving: (essay)Optical spacing section ‘Optical spacing’ in Essay.
Snippets: (snippets)Spacing section ‘Spacing’ in Snippets.
Internals Reference: (internals)SpacingSpanner section ‘SpacingSpanner’ in Internals Reference, (internals)NoteSpacing section ‘NoteSpacing’ in Internals Reference, (internals)StaffSpacing section ‘StaffSpacing’ in Internals Reference, (internals)NonMusicalPaperColumn section ‘NonMusicalPaperColumn’ in Internals Reference.
There is no convenient mechanism to manually override spacing. The following work-around may be used to insert extra space into a score, adjusting the padding value as necessary.
\override Score.NonMusicalPaperColumn.padding = #10 |
No work-around exists for decreasing the amount of space.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
New sections with different spacing parameters can be started with the
newSpacingSection command. This is useful for sections with
different notions of ‘long’ and ‘short’ notes. The
\newSpacingSection command creates a new SpacingSpanner
object at that musical moment.
In the following example the time signature change introduces a new section, and the 16ths notes are automatically spaced slightly wider apart.
\relative c' { \time 2/4 c4 c8 c c8 c c4 c16[ c c8] c4 \newSpacingSection \time 4/16 c16[ c c8] }
If the automatic spacing adjustments do not give the required spacing,
manual \overrides may be applied to its properties. These must
be applied at the same musical moment as the \newSpacingSection
command itself and will then affect the spacing of all the following
music until the properties are changed in a new spacing section, for
example:
\relative c' { \time 4/16 c16[ c c8] \newSpacingSection \override Score.SpacingSpanner.spacing-increment = #2 c16[ c c8] \newSpacingSection \revert Score.SpacingSpanner.spacing-increment c16[ c c8] }
Snippets: (snippets)Spacing section ‘Spacing’ in Snippets.
Internals Reference: (internals)SpacingSpanner section ‘SpacingSpanner’ in Internals Reference.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| Uniform stretching of tuplets | ||
| Strict note spacing |
Horizontal spacing may be altered with the
base-shortest-duration property. Here
we compare the same music; once without altering
the property, and then altered. Larger values
of ly:make-moment will produce smaller
music. Note that ly:make-moment constructs
a duration, so 1 4 is a longer duration
than 1 16.
\score {
\relative {
g'4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
g4 e e2 | f4 d d2 | c4 e g g | c,1 |
d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
g4 e e2 | f4 d d2 | c4 e g g | c,1 |
}
}
|
\score {
\relative {
g'4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
g4 e e2 | f4 d d2 | c4 e g g | c,1 |
d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
g4 e e2 | f4 d d2 | c4 e g g | c,1 |
}
\layout {
\context {
\Score
\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
By default, spacing in tuplets depends on various non-duration
factors (such as accidentals, clef changes, etc). To disregard
such symbols and force uniform equal-duration spacing, use
Score.SpacingSpanner.uniform-stretching. This
property can only be changed at the beginning of a score,
\score { << \new Staff \relative c' { \tuplet 5/4 { c8 c c c c } c8 c c c } \new Staff \relative c' { c8 c c c \tuplet 5/4 { c8 c c c c } } >> \layout { \context { \Score \override SpacingSpanner.uniform-stretching = ##t } } }
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When strict-note-spacing is set, notes are spaced without
regard for clefs, bar lines, and grace notes,
\override Score.SpacingSpanner.strict-note-spacing = ##t \new Staff \relative { c''8[ c \clef alto c \grace { c16 c } c8 c c] c32[ c] }
Snippets: (snippets)Spacing section ‘Spacing’ in Snippets.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The most basic settings influencing the spacing are indent and
line-width. They are set in the \layout block. They
control the indentation of the first line of music, and the lengths of
the lines.
If ragged-right is set to true in the \layout block, then
systems ends at their natural horizontal length, instead of being spread
horizontally to fill the whole line. This is useful for
short fragments, and for checking how tight the natural spacing is.
The normal default setting is false, but if the score has only one
system the default value is true.
The option ragged-last is similar to ragged-right, but
only affects the last line of the piece. No restrictions are put on
that line. The result is similar to formatting text paragraphs. In a
paragraph, the last line simply takes its natural horizontal length.
\layout {
indent = #0
line-width = #150
ragged-last = ##t
}
|
Snippets: (snippets)Spacing section ‘Spacing’ in Snippets.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
LilyPond supports proportional notation, a type of horizontal spacing in which each note consumes an amount of horizontal space exactly equivalent to its rhythmic duration. This type of proportional spacing is comparable to horizontal spacing on top of graph paper. Some late 20th- and early 21st-century scores use proportional notation to clarify complex rhythmic relationships or to facilitate the placement of timelines or other graphics directly in the score.
LilyPond supports five different settings for proportional notation, which may be used together or alone:
proportionalNotationDuration
uniform-stretching
strict-note-spacing
\remove "Separating_line_group_engraver"
\override PaperColumn.used = ##t
In the examples that follow, we explore these five different proportional notation settings and examine how these settings interact.
We start with the following one-measure example, which uses classical spacing with ragged-right turned on.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } >> }
Notice that the half note which begins the measure takes up far less than half of the horizontal space of the measure. Likewise, the sixteenth notes and sixteenth-note quintuplets (or twentieth notes) which end the measure together take up far more than half the horizontal space of the measure.
In classical engraving, this spacing may be exactly what we want because we can borrow horizontal space from the half note and conserve horizontal space across the measure as a whole.
On the other hand, if we want to insert a measured timeline or other graphic above or below our score, we need proportional notation. We turn proportional notation on with the proportionalNotationDuration setting.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/20) } } }
The half note at the beginning of the measure and the faster notes in the second half of the measure now occupy equal amounts of horizontal space. We could place a measured timeline or graphic above or below this example.
The proportionalNotationDuration setting is a context setting
that lives in Score. Remember that context settings can appear
in one of three locations within our input file – in a \with
block, in a \context block, or directly in music entry preceded
by the \set command. As with all context settings, users can
pick which of the three different locations they would like to
set proportionalNotationDuration in to.
The proportionalNotationDuration setting takes a single argument,
which is the reference duration against that all music will be spaced.
The LilyPond Scheme function make-moment takes two arguments
– a numerator and denominator which together express some fraction of
a whole note. The call (ly:make-moment 1/20) therefore produces
a reference duration of a twentieth note. Values such as
(ly:make-moment 1/16), (ly:make-moment 1/8), and
(ly:make-moment 3/97) are all possible as well.
How do we select the right reference duration to pass to
proportionalNotationDuration? Usually by a process of trial
and error, beginning with a duration close to the fastest (or smallest)
duration in the piece. Smaller reference durations space music loosely;
larger reference durations space music tightly.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/8) } } } \score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/16) } } } \score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/32) } } }
Note that too large a reference duration – such as the eighth note, above – spaces music too tightly and can cause note head collisions. Also that proportional notation in general takes up more horizontal space than classical spacing. Proportional spacing provides rhythmic clarity at the expense of horizontal space.
Next we examine how to optimally space overlapping tuplets.
We start by examining what happens to our original example, with classical spacing, when we add a second staff with a different type of tuplet.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } \new RhythmicStaff { \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 } } >> }
The spacing is bad because the evenly spaced notes of the bottom staff
do not stretch uniformly. Classical engravings include very few complex
triplets and so classical engraving rules can generate this type of
result. Setting proportionalNotationDuration fixes this.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } \new RhythmicStaff { \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/20) } } }
But if we look very carefully we can see that notes of the second half
of the 9-tuplet space ever so slightly more widely than the notes
of the first half of the 9-tuplet. To ensure uniform stretching, we
turn on uniform-stretching, which is a property of
SpacingSpanner.
\score { << \new RhythmicStaff { c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 } } \new RhythmicStaff { \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 } } >> \layout { \context { \Score proportionalNotationDuration = #(ly:make-moment 1/20) \override SpacingSpanner.uniform-stretching = ##t } } }
Our two-staff example now spaces exactly, our rhythmic relationships are visually clear, and we can include a measured timeline or graphic if we want.
Note that the LilyPond’s proportional notation package expects that all proportional scores set the SpacingSpanner’s ’uniform-stretching attribute to ##t. Setting proportionalNotationDuration without also setting the SpacingSpanner’s ’uniform-stretching attribute to ##t will, for example, cause Skips to consume an incorrect amount of horizontal space.
The SpacingSpanner is an abstract grob that lives in the Score context. As with our settings of proportionalNotationDuration, overrides to the SpacingSpanner can occur in any of three different places in our input file – in the Score \with block, in a Score \context block, or in note entry directly.
There is by default only one SpacingSpanner per Score. This
means that, by default, uniform-stretching is either turned on for the
entire score or turned off for the entire score. We can, however,
override this behavior and turn on different spacing features at
different places in the score. We do this with the command
\newSpacingSection. See New spacing section, for more info.
Next we examine the effects of the Separating_line_group_engraver and
see why proportional scores frequently remove this engraver. The following
example shows that there is a small amount of “prefatory” space
just before the first note in each system.
\paper { indent = #0 } \new Staff { c'1 \break c'1 }
The amount of this prefatory space is the same whether after a time
signature, a key signature or a clef. Separating_line_group_engraver
is responsible for this space. Removing Separating_line_group_engraver
reduces this space to zero.
\paper { indent = #0 } \new Staff \with { \remove "Separating_line_group_engraver" } { c'1 \break c'1 }
non-musical elements like time signatures, key signatures, clefs and accidentals are problematic in proportional notation. None of these elements has rhythmic duration. But all of these elements consume horizontal space. Different proportional scores approach these problems differently.
It may be possible to avoid spacing problems with key signatures simply by not having any. This is a valid option since most proportional scores are contemporary music. The same may be true of time signatures, especially for those scores that include a measured timeline or other graphic. But these scores are exceptional and most proportional scores include at least some time signatures. Clefs and accidentals are even more essential.
So what strategies exist for spacing non-musical elements in a
proportional context? One good option is the strict-note-spacing
property of SpacingSpanner. Compare the two scores below:
\new Staff { \set Score.proportionalNotationDuration = #(ly:make-moment 1/16) c''8 8 8 \clef alto d'2 2 } \new Staff { \set Score.proportionalNotationDuration = #(ly:make-moment 1/16) \override Score.SpacingSpanner.strict-note-spacing = ##t c''8 8 8 \clef alto d'2 2 }
Both scores are proportional, but the spacing in the first score is too loose because of the clef change. The spacing of the second score remains strict, however, because strict-note-spacing is turned on. Turning on strict-note-spacing causes the width of time signatures, key signatures, clefs and accidentals to play no part in the spacing algorithm.
In addition to the settings given here, there are other settings that frequently appear in proportional scores. These include:
\override SpacingSpanner.strict-grace-spacing = ##t
\set tupletFullLength = ##t
\override Beam.breakable = ##t
\override Glissando.breakable = ##t
\override TextSpanner.breakable = ##t
\remove "Forbid_line_break_engraver" in the Voice context
These settings space grace notes strictly, extend tuplet brackets to mark both rhythmic start- and stop-points, and allow spanning elements to break across systems and pages. See the respective parts of the manual for these related settings.
Notation Reference: New spacing section.
Snippets: (snippets)Spacing section ‘Spacing’ in Snippets.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by gub on July 13, 2020 using texi2html 1.82.
Más nyelvek: català, deutsch, español, français, italiano, 日本語.
Az automatikus nyelvválasztásról.