Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.11"
+@c \version "2.19.22"
@node Tweaking output
@chapter Tweaking output
* The Internals Reference manual::
* Appearance of objects::
* Placement of objects::
+* Vertical spacing::
* Collisions of objects::
* Further tweaking::
@end menu
shape. Objects with an extended shape like these are called
@q{Spanners}.
+Spanners cannot be tweaked after their creation. This includes both
+@code{StaffSymbol} and @code{LedgerLineSpanner} which continue
+throughout the score, except if they are terminated by the
+@code{\stopStaff} command and then recreated using @code{\startStaff}
+command.
+
+What is more, there are @q{abstract} grobs which do not print
+anything of their own, but rather collect, position and manage
+other grobs. Common examples for this are
+@code{DynamicLineSpanner}, @code{BreakAlignment},
+@code{NoteColumn}, @code{VerticalAxisGroup},
+@code{NonMusicalPaperColumn} and similar. We will see how some of
+these are used later.
+
It remains to explain what @q{Interfaces} are. Many objects, even
though they are quite different, share common features which need to
be processed in the same way. For example, all grobs have a color, a
modified by different commands, so it is useful to be able to recognize
the types of objects and properties from their names.
+@seealso
+Notation Reference:
+@ruser{Modifying properties}.
+
@node Tweaking methods
@subsection Tweaking methods
@cindex tweaking methods
@menu
-* The \override command::
-* The \revert command::
-* The \once prefix::
-* The \overrideProperty command::
-* The \tweak command::
+* The override command::
+* The revert command::
+* The once prefix::
+* The overrideProperty command::
+* The tweak command::
+* The single prefix::
@end menu
-@node The \override command
-@unnumberedsubsubsec The @code{\override} command
+@node The override command
+@unnumberedsubsubsec The @code{@bs{}override} command
@cindex override command
@cindex override syntax
@funindex \override
-@funindex override
We have already met the commands @code{\set} and @code{\with}, used to
change the properties of @strong{contexts} and to remove and add
@cindex color property, example
@cindex NoteHead, example of overriding
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-c4 d
-\override NoteHead.color = #red
-e4 f |
-\override NoteHead.color = #green
-g4 a b c |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \override NoteHead.color = #green
+ g4 a b c |
+}
@end lilypond
-@node The \revert command
-@unnumberedsubsubsec The @code{\revert} command
+@node The revert command
+@unnumberedsubsubsec The @code{@bs{}revert} command
@cindex revert command
@funindex \revert
-@funindex revert
Once overridden, the property retains its new value until it is
overridden again or a @code{\revert} command is encountered.
@cindex color property, example
@cindex NoteHead, example of overriding
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-c4 d
-\override NoteHead.color = #red
-e4 f |
-\override NoteHead.color = #green
-g4 a
-\revert NoteHead.color
-b4 c |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \override NoteHead.color = #green
+ g4 a
+ \revert NoteHead.color
+ b4 c |
+}
@end lilypond
-@node The \once prefix
-@unnumberedsubsubsec The @code{\once} prefix
+@node The once prefix
+@unnumberedsubsubsec The @code{@bs{}once} prefix
@funindex \once
-@funindex once
-Both the @code{\override} and the @code{\set} commands may be prefixed
-by @code{\once}. This causes the following @code{\override} or
-@code{\set} command to be effective only during the current musical
+@code{\override}, @code{\revert}, @code{\set}, and @code{\unset}
+commands may be prefixed with @code{\once}. This causes such a
+command to be effective only during the current musical
moment before the property reverts back to its previous value (this can
be different from the default if another @code{\override} is still in
effect). Using the same example, we can change the color of a single
@cindex color property, example
@cindex NoteHead, example of overriding
-@lilypond[quote,verbatim,relative=1]
-c4 d
-\override NoteHead.color = #red
-e4 f |
-\once \override NoteHead.color = #green
-g4 a
-\revert NoteHead.color
-b c |
+@lilypond[quote,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \once \override NoteHead.color = #green
+ g4 a
+ \once \revert NoteHead.color
+ b c |
+ \revert NoteHead.color
+ f2 c |
+}
@end lilypond
The @code{\once} prefix may also be used in front of many
predefined commands to limit their effect to one musical moment:
-@lilypond[quote,verbatim,relative=1]
-c4 d
-\once \stemDown
-e4 f |
-g4 a
-\once \hideNotes
-b c |
+@lilypond[quote,verbatim]
+\relative {
+ c'4( d)
+ \once \slurDashed
+ e4( f) |
+ g4( a)
+ \once \hideNotes
+ b( c) |
+}
@end lilypond
-However, predefined commands of the form @code{\...Neutral},
-@code{\...Off} and @code{\un...} use @code{\revert} internally rather
-than @code{\override} so prefixing these with @code{\once} has no
-effect.
-
-
-@node The \overrideProperty command
-@unnumberedsubsubsec The @code{\overrideProperty} command
+@node The overrideProperty command
+@unnumberedsubsubsec The @code{@bs{}overrideProperty} command
@cindex overrideProperty command
@funindex \overrideProperty
-@funindex overrideProperty
There is another form of the override command,
@code{\overrideProperty}, which is occasionally required.
@c Maybe explain in a later iteration -td
-@node The \tweak command
-@unnumberedsubsubsec The @code{\tweak} command
+@node The tweak command
+@unnumberedsubsubsec The @code{@bs{}tweak} command
@cindex tweak command
@funindex \tweak
-@funindex tweak
The final tweaking command which is available is @code{\tweak}. This
should be used when several objects occur at the same musical moment,
@cindex font-size property, example
@cindex NoteHead, example of overriding
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-<c e g>4
-\once \override NoteHead.font-size = #-3
-<c e g>4
-<c e g>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ <c' e g>4
+ \once \override NoteHead.font-size = #-3
+ <c e g>4
+ <c e g>4
+}
@end lilypond
We see the override affects @emph{all} the note heads in the chord.
@cindex font-size property, example
@cindex @code{\tweak}, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-<c e g>4
-<c \tweak font-size #-3 e g>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ <c' e g>4
+ <c \tweak font-size #-3 e g>4
+}
@end lilypond
Note that the syntax of @code{\tweak} is different from that of the
@cindex color property, example
@cindex @code{\tweak}, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-a4^"Black"
+@lilypond[quote,fragment,ragged-right,verbatim]
+a'4^"Black"
-\tweak color #red ^"Red"
-\tweak color #green _"Green"
@end lilypond
the layout object, provided that LilyPond can trace its origin back to
the original event:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<\tweak Accidental.color #red cis4
- \tweak Accidental.color #green es
- g>
+@lilypond[quote,fragment,ragged-right,verbatim]
+<\tweak Accidental.color #red cis''4
+ \tweak Accidental.color #green es''
+ g''>
@end lilypond
This long form of the @code{\tweak} command can be described as
@example
-\tweak @var{layout-object}.@var{layout-property} @var{value}
+\tweak @var{LayoutObject}.@var{layout-property} #@var{value}
@end example
@cindex tuplets, nested
@cindex direction property, example
@cindex color property, example
-@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak direction #up
-\tuplet 3/4 {
- \tweak color #red
- \tuplet 3/2 { c8[ c c] }
- \tuplet 3/2 { c8[ c c] }
- \tuplet 3/2 { c8[ c c] }
+@lilypond[quote,ragged-right,verbatim]
+\relative c'' {
+ \tweak direction #up
+ \tuplet 3/4 {
+ \tweak color #red
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ }
}
@end lilypond
@cindex transparent property, example
@cindex TupletNumber, example of overriding
-@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\tuplet 3/2 { c8[ c c] }
-\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\tuplet 3/2 {
- c8[ c]
- c8[ c]
- \once \override TupletNumber.transparent = ##t
- \tuplet 3/2 { c8[ c c] }
- \tuplet 3/2 { c8[ c c] }
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \tuplet 3/2 { c'8[ c c] }
+ \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+ \tuplet 3/2 {
+ c8[ c]
+ c8[ c]
+ \once \override TupletNumber.transparent = ##t
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ }
}
@end lilypond
Notation Reference:
@ruser{The tweak command}.
+@node The single prefix
+@unnumberedsubsubsec The @code{@bs{}single} prefix
+
+@funindex \single
+@cindex tweak, generated from override
+
+Suppose we wanted to emphasize particular note heads by coloring them
+red and increasing their size, and to make it easy suppose also we
+have defined a function to do this:
+
+@lilypond[quote,verbatim]
+emphNoteHead = {
+ \override NoteHead.color = #red
+ \override NoteHead.font-size = 2
+}
+\relative {
+ c''4 a \once \emphNoteHead f d |
+}
+@end lilypond
+
+The @code{\once} prefix works fine to emphasize single notes or
+complete chords, but it cannot be used to emphasize a single note
+@emph{within} a chord. Earlier we have seen how @code{\tweak} can
+be used to do this, see
+@ref{The tweak command,,The @code{@bs{}tweak} command}. But
+@code{\tweak} cannot be used with a function; that's where
+@code{\single} comes in:
+
+@lilypond[quote,verbatim]
+emphNoteHead = {
+ \override NoteHead.color = #red
+ \override NoteHead.font-size = 2
+}
+\relative {
+ <c'' a \single \emphNoteHead f d>4
+}
+@end lilypond
+
+In summary, @code{\single} converts overrides into tweaks so when
+there are several objects at the same point in musical time (like
+noteheads in a chord), @code{\single} will only affect a single one,
+the one generated by the immediately following music expression, in
+contrast to @code{\once} which will affect all of those objects.
+
+By using @code{\single} in this way any shorthand function
+containing just overrides may be applied to individual notes in a
+chord. However, @code{\single} does not convert @code{\revert},
+@code{\set} or @code{\unset} into tweaks.
+
+@seealso
+Learning Manual:
+@ref{The tweak command,,The @code{@bs{}tweak} command},
+@ref{Using variables for layout adjustments}.
+
@node The Internals Reference manual
@section The Internals Reference manual
@c Mozart, Die Zauberflöte Nr.7 Duett
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8 bes[( g]) g |
+ \relative {
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
slurs, and you should find
@example
-@code{thickness} (number)
- @code{1.2}
- Line thickness, generally measured in @code{line-thickness}
+thickness (number)
+ 1.2
+ Line thickness, generally measured in line-thickness
@end example
This looks a good bet to change the heaviness. It tells us that
@cindex Slur example of overriding
@cindex thickness property, example
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
+ \relative {
% Increase thickness of all following slurs from 1.2 to 5.0
\override Slur.thickness = #5.0
- r4 bes8 bes[( g]) g |
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
@cindex once override
@funindex \once
-@funindex once
As you can see, @emph{all} the slurs are thicker in the final example
above. But what if we wanted just the first slur to be thicker? This
@cindex Slur, example of overriding
@cindex thickness property, example
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of immediately following slur only
\once \override Slur.thickness = #5.0
bes8[( g]) g |
@cindex default properties, reverting to
@funindex \revert
-@funindex revert
Finally, what if we wanted just the first two slurs to be
heavier? Well, we could use two commands, each preceded by
@cindex Slur, example of overriding
@cindex thickness property, example
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of immediately following slur only
\once \override Slur.thickness = #5.0
bes[( g]) g |
@cindex Slur, example of overriding
@cindex thickness property, example
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of all following slurs from 1.2 to 5.0
\override Slur.thickness = #5.0
bes[( g]) g |
@cindex LyricText, example of overriding
@cindex @code{\addlyrics}, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8 bes[( g]) g |
+ \relative {
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
@cindex BarLine, example of overriding
@cindex stencil property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override BarLine.stencil = ##f
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex BarLine, example of overriding
@cindex stencil property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.BarLine.stencil = ##f
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
shorthand for it called @code{\omit}:
@funindex \omit
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\omit Staff.BarLine
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
correct processing. For example, errors will be generated if the
@code{stencil} property of the @code{NoteHead} object is set to
@code{#f}. If this is the case, you can instead use the
-@code{point-stencil} function, which sets the stencil to a object
+@code{point-stencil} function, which sets the stencil to an object
with zero size:
-@lilypond[quote,verbatim,relative=2]
-{
- c4 c
+@lilypond[quote,verbatim]
+\relative {
+ c''4 c
\once \override NoteHead.stencil = #point-stencil
c4 c
}
@cindex BarLine, example of overriding
@cindex break-visibility property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.BarLine.break-visibility = ##(#f #f #f)
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex TimeSignature, example of overriding
@cindex transparent property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.TimeSignature.transparent = ##t
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@code{\hide}:
@funindex \hide
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\hide Staff.TimeSignature
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex TimeSignature, example of overriding
@cindex stencil property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\omit Staff.TimeSignature
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex BarLine, example of overriding
@cindex color property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.BarLine.color = #white
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex BarLine, example of overriding
@cindex color property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.BarLine.color = #(x11-color 'white)
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex BarLine, example of overriding
@cindex color property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.BarLine.color = #(rgb-color 1 1 1)
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex color property, example
@cindex x11-color, example of using
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
\override Staff.StaffSymbol.color = #(x11-color 'grey30)
\override Staff.TimeSignature.color = #(x11-color 'grey60)
\override Voice.NoteHead.color = #(x11-color 'grey85)
\override Voice.Stem.color = #(x11-color 'grey85)
\override Staff.BarLine.color = #(x11-color 'grey10)
- c4 b8 c d16 c d8 |
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@cindex alignAboveContext property, example
@cindex @code{\with}, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
@cindex Clef, example of overriding
@cindex TimeSignature, example of overriding
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
@cindex Clef, example of overriding
@cindex TimeSignature, example of overriding
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
and @code{\omit} for setting the @code{transparent} property and
clearing the @code{stencil} here, leading to the result
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
@cindex TimeSignature, example of overriding
@cindex fontSize property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
@cindex staff-space property, example
@cindex stencil property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
@cindex markup example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-c2^"Text1"
-c2^"Text2" |
-c2^"Text3"
-c2^"Text4" |
+@lilypond[quote,fragment,ragged-right,verbatim]
+c''2^"Text1"
+c''2^"Text2" |
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
Staves are also positioned, by default, as closely together as
@lilypond[quote,ragged-right,verbatim]
<<
\new Staff {
- \relative c' { c4 a, }
+ \relative { c'4 a, }
}
\new Staff {
- \relative c'''' { c4 a, }
+ \relative { c''''4 a, }
}
>>
@end lilypond
@cindex center
@cindex neutral
-The following example shows in bar 1 the default behavior of stems,
-with those on high notes pointing down and those on low notes pointing
-up, followed by four notes with all stems forced down, four notes with
-all stems forced up, and finally four notes reverted back to the
-default behavior.
+The following example shows the default positioning of slurs in the
+first bar, with slurs starting on high notes positioned above the notes
+and those starting on low notes positioned below, followed by a bar
+with both slurs forced down, a bar with both slurs forced up, and
+finally a bar with both slurs reverted back to the default behavior.
-@cindex Stem, example of overriding
+@cindex Slur, example of overriding
@cindex direction property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-a4 g c a |
-\override Stem.direction = #DOWN
-a4 g c a |
-\override Stem.direction = #UP
-a4 g c a |
-\revert Stem.direction
-a4 g c a |
+@lilypond[quote,fragment,verbatim]
+a'4( g') c''( a') |
+\override Slur.direction = #DOWN
+a'4( g') c''( a') |
+\override Slur.direction = #UP
+a'4( g') c''( a') |
+\revert Slur.direction
+a'4( g') c''( a') |
@end lilypond
-Here we use the constants @code{DOWN} and @code{UP}.
+Here we have used the constants @code{DOWN} and @code{UP}.
These have the values @w{@code{-1}} and @code{+1} respectively, and
these numerical values may be used instead. The value @code{0}
may also be used in some cases. It is simply treated as meaning
-@code{UP} for stems, but for some objects it means @q{center}.
+@code{UP} for slurs, but for some objects it means @q{center}.
There is a constant, @code{CENTER} which has the value @code{0}.
However, these explicit overrides are not usually used, as there are
@end multitable
The neutral/normal variants of these commands are implemented
-using @code{\revert} and may @strong{not} be
+using @code{\revert} and these may @strong{not} be
preceded by @code{\once}. If you wish to limit the
effect of the other commands (which are implemented using
@code{\override}) to a single timestep, you can precede them with
@code{\once} like you would do with explicit overrides.
+Or, if just a single layout object needs to be forced up or down, the
+direction indicators, @code{^} or @code{_}, may be used:
+
+@lilypond[quote,fragment,verbatim]
+a'4( g') c''( a') |
+a'4^( g') c''_( a') |
+@end lilypond
+
@node Fingering
@unnumberedsubsubsec Fingering
@cindex Fingering, example of overriding
@cindex direction property, example
-@lilypond[quote,verbatim,relative=2]
-c4-5 a-3 f-1 c'-5 |
-\override Fingering.direction = #DOWN
-c4-5 a-3 f-1 c'-5 |
-\override Fingering.direction = #UP
-c4-5 a-3 f-1 c'-5 |
+@lilypond[quote,verbatim]
+\relative {
+ c''4-5 a-3 f-1 c'-5 |
+ \override Fingering.direction = #DOWN
+ c4-5 a-3 f-1 c'-5 |
+ \override Fingering.direction = #UP
+ c4-5 a-3 f-1 c'-5 |
+}
@end lilypond
However, overriding the @code{direction} property is not the
@cindex fingering example
-@lilypond[quote,verbatim,relative=2]
-c4-5 a-3 f-1 c'-5 |
-c4_5 a_3 f_1 c'_5 |
-c4^5 a^3 f^1 c'^5 |
+@lilypond[quote,verbatim]
+\relative {
+ c''4-5 a-3 f-1 c'-5 |
+ c4_5 a_3 f_1 c'_5 |
+ c4^5 a^3 f^1 c'^5 |
+}
@end lilypond
The @code{direction} property is ignored for chords, but the
@cindex fingering example
-@lilypond[quote,verbatim,relative=2]
-<c-5 g-3>4
-<c-5 g-3 e-2>4
-<c-5 g-3 e-2 c-1>4
+@lilypond[quote,verbatim]
+\relative {
+ <c''-5 g-3>4
+ <c-5 g-3 e-2>4
+ <c-5 g-3 e-2 c-1>4
+}
@end lilypond
@noindent
@cindex fingering example
-@lilypond[quote,verbatim,relative=2]
-<c-5 g-3 e-2 c-1>4
-<c^5 g_3 e_2 c_1>4
-<c^5 g^3 e^2 c_1>4
+@lilypond[quote,verbatim]
+\relative {
+ <c''-5 g-3 e-2 c-1>4
+ <c^5 g_3 e_2 c_1>4
+ <c^5 g^3 e^2 c_1>4
+}
@end lilypond
Even greater control over the placement of fingering of the
command is:
@example
-@code{\set fingeringOrientations = #'([up] [left/right] [down])}
+\set fingeringOrientations = #'([up] [left/right] [down])
@end example
@noindent
@cindex @code{\set}, example of using
@cindex fingeringOrientations property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4 |
-\set fingeringOrientations = #'(up left down)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4 |
-\set fingeringOrientations = #'(right)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \set fingeringOrientations = #'(left)
+ <f'-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(up left down)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(up left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(right)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+}
@end lilypond
@noindent
@code{Fingering} object in the IR to be @w{@code{-5}}, so let's
try @w{@code{-7}}:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering.font-size = #-7
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4 |
-\set fingeringOrientations = #'(up left down)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4 |
-\set fingeringOrientations = #'(right)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \override Fingering.font-size = #-7
+ \set fingeringOrientations = #'(left)
+ <f'-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(up left down)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(up left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(right)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+}
@end lilypond
@node Outside-staff objects
@menu
* The outside-staff-priority property::
-* The \textLengthOn command::
+* The textLengthOn command::
* Dynamics placement::
* Grob sizing::
@end menu
placed at the start of the spanner, which might include several
linked hairpins and dynamics.
-@multitable @columnfractions .3 .3 .3
+@multitable @columnfractions .3 .15 .45
@headitem Layout Object
@tab Priority
@tab Controls position of:
@item @code{MetronomeMark}
@tab @code{1000}
@tab Metronome marks
+@item @code{SostenutoPedalLineSpanner}
+ @tab @code{1000}
+ @tab Pedal indication
+@item @code{SustainPedalLineSpanner}
+ @tab @code{1000}
+ @tab
+@item @code{UnaCordaPedalLineSpanner}
+ @tab @code{1000}
+ @tab
+@item @code{MeasureCounter}
+ @tab @code{750}
+ @tab Measure number
@item @code{VoltaBracketSpanner}
@tab @code{600}
@tab Volta brackets
+@item @code{InstrumentSwitch}
+ @tab @code{500}
+ @tab Instrument switch text
@item @code{TextScript}
@tab @code{450}
@tab Markup text
@item @code{MultiMeasureRestText}
@tab @code{450}
- @tab Markup text over full-bar rests
+ @tab Markup text over multimeasure rests
+@item @code{CombineTextScript}
+ @tab @code{450}
+ @tab Part-combine text
@item @code{OttavaBracket}
@tab @code{400}
@tab Ottava brackets
@tab @code{250}
@tab All dynamic markings
@item @code{BarNumber}
- @tab @code{ 100}
+ @tab @code{100}
@tab Bar numbers
@item @code{TrillSpanner}
@tab @code{50}
@tab Spanning trills
+@item @code{AccidentalSuggestion}
+ @tab @code{0}
+ @tab Annotational accidentals
@end multitable
Here is an example showing the default placement of some of
@cindex ottava bracket
@funindex \startTextSpan
-@funindex startTextSpan
@funindex \stopTextSpan
-@funindex stopTextSpan
@cindex TextSpanner, example of overriding
@cindex bound-details property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,fragment,ragged-right,verbatim]
% Set details for later Text Spanner
\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
\dynamicUp
% Start Ottava Bracket
\ottava #1
-c'4 \startTextSpan
+c''4 \startTextSpan
% Add Dynamic Text and hairpin
-c4\pp\<
-c4
+c''4\pp\<
+c''4
% Add Text Script
-c4^Text |
-c4 c
+c''4^Text |
+c''4 c''
% Add Dynamic Text and terminate hairpin
-c4\ff c \stopTextSpan |
+c''4\ff c'' \stopTextSpan |
% Stop Ottava Bracket
\ottava #0
-c,4 c c c |
+c'4 c' c' c' |
@end lilypond
This example also shows how to create Text Spanners --
overridden. Suppose we would like the ottava bracket to be placed
below the text spanner in the example above. All we need to do is to
look up the priority of @code{OttavaBracket} in the IR or in the
-tables above, and reduce it to a value lower than that of a
+table above, and reduce it to a value lower than that of a
@code{TextSpanner}, remembering that @code{OttavaBracket} is created
in the @code{Staff} context:
@cindex TextSpanner, example of overriding
@cindex bound-details property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,fragment,ragged-right,verbatim]
% Set details for later Text Spanner
\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
-c'4 \startTextSpan
+c''4 \startTextSpan
% Add Dynamic Text
-c4\pp
+c''4\pp
% Add Dynamic Line Spanner
-c4\<
+c''4\<
% Add Text Script
-c4^Text |
-c4 c
+c''4^Text |
+c''4 c''
% Add Dynamic Text
-c4\ff c \stopTextSpan |
+c''4\ff c'' \stopTextSpan |
% Stop Ottava Bracket
\ottava #0
-c,4 c c c |
+c'4 c' c' c' |
@end lilypond
Note that some of these objects, in particular bar numbers,
other outside-staff objects according to that value. Here's an
example showing the effect of the two methods:
-@lilypond[quote,verbatim,relative=2]
-c4( c^\markup { \tiny \sharp } d4.) c8 |
-c4(
-\once \override TextScript.avoid-slur = #'inside
-\once \override TextScript.outside-staff-priority = ##f
-c4^\markup { \tiny \sharp } d4.) c8 |
-\once \override Slur.outside-staff-priority = #500
-c4( c^\markup { \tiny \sharp } d4.) c8 |
+@lilypond[quote,verbatim]
+\relative c'' {
+ c4( c^\markup { \tiny \sharp } d4.) c8 |
+ c4(
+ \once \override TextScript.avoid-slur = #'inside
+ \once \override TextScript.outside-staff-priority = ##f
+ c4^\markup { \tiny \sharp } d4.) c8 |
+ \once \override Slur.outside-staff-priority = #500
+ c4( c^\markup { \tiny \sharp } d4.) c8 |
+}
@end lilypond
Changing the @code{outside-staff-priority} can also be used to
@cindex TextScript, example of overriding
@cindex outside-staff-priority property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-c2^"Text1"
-c2^"Text2" |
+@lilypond[quote,fragment,ragged-right,verbatim]
+c''2^"Text1"
+c''2^"Text2" |
\once \override TextScript.outside-staff-priority = #500
-c2^"Text3"
-c2^"Text4" |
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it
room for the text. This is done using the @code{textLengthOn}
command.
-@node The \textLengthOn command
-@unnumberedsubsubsec The @code{\textLengthOn} command
+@node The textLengthOn command
+@unnumberedsubsubsec The @code{@bs{}textLengthOn} command
@cindex notes, spreading out with text
@funindex \textLengthOn
-@funindex textLengthOn
@funindex \textLengthOff
-@funindex textLengthOff
By default, text produced by markup takes up no horizontal space
as far as laying out the music is concerned. The @code{\textLengthOn}
command reverses this behavior, causing the notes to be spaced
out as far as is necessary to accommodate the text:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,fragment,ragged-right,verbatim]
\textLengthOn % Cause notes to space out to accommodate text
-c2^"Text1"
-c2^"Text2" |
-c2^"Text3"
-c2^"Text4" |
+c''2^"Text1"
+c''2^"Text2" |
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
The command to revert to the default behavior is
@cindex TextScript, example of overriding
@cindex outside-staff-priority property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-% This markup is short enough to fit without collision
-c2^"Tex" c'' |
-R1 |
-
-% This is too long to fit, so it is displaced upwards
-c,,2^"Text" c'' |
-R1 |
-
-% Turn off collision avoidance
-\once \override TextScript.outside-staff-priority = ##f
-c,,2^"Long Text " c'' |
-R1 |
-
-% Turn off collision avoidance
-\once \override TextScript.outside-staff-priority = ##f
-\textLengthOn % and turn on textLengthOn
-c,,2^"Long Text " % Spaces at end are honored
-c''2 |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ % This markup is short enough to fit without collision
+ c''2^"Tex" c'' |
+ R1 |
+
+ % This is too long to fit, so it is displaced upwards
+ c,,2^"Text" c'' |
+ R1 |
+
+ % Turn off collision avoidance
+ \once \override TextScript.outside-staff-priority = ##f
+ c,,2^"Long Text " c'' |
+ R1 |
+
+ % Turn off collision avoidance
+ \once \override TextScript.outside-staff-priority = ##f
+ \textLengthOn % and turn on textLengthOn
+ c,,2^"Long Text " % Spaces at end are honored
+ c''2 |
+}
@end lilypond
@node Dynamics placement
This can give quite acceptable results, as this example
shows:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\clef "bass"
-\key aes \major
-\time 9/8
-\dynamicUp
-bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
-ees,2.~\)\mf ees4 r8 |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \clef "bass"
+ \key aes \major
+ \time 9/8
+ \dynamicUp
+ bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
+ ees,2.~\)\mf ees4 r8 |
+}
@end lilypond
However, if the notes and attached dynamics are close
not be the optimum placement, as this rather artificial example
shows:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim,fragment]
\dynamicUp
-a4\f b\mf c\mp b\p
+\relative { a'4\f b\mf a\mp b\p }
@end lilypond
@noindent
By default, outside-staff objects are given a width of zero so
that they may overlap in the horizontal direction. This is done
-by the trick of adding infinity to the leftmost extent and
-minus infinity to the rightmost extent by setting the
-@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. So
-to ensure they do not overlap in the horizontal direction we
-must override this value of @code{extra-spacing-width} to
-@code{'(0 . 0)} so the true width shines through. This is
-the command to do this for dynamic text:
+by the trick of making the leftmost extent infinity and
+the rightmost extent minus infinity by setting the
+@code{extra-spacing-width} to @code{'(+inf.0 . -inf.0)}. To
+ensure they do not overlap in the horizontal direction we
+must override this value of @code{extra-spacing-width} to give them
+a little extra spacing. The units are the space between two staff
+lines, so moving the left edge half a unit to the left and the
+right edge half a unit to the right should do it:
@example
-\override DynamicText.extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
@end example
@noindent
@cindex DynamicText, example of overriding
@cindex extra-spacing-width property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-\override DynamicText.extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p |
-@end lilypond
-
-@noindent
-Well, it has certainly stopped the dynamic marks being
-displaced, but two problems remain. The marks should be
-spaced a little further apart and it would be better
-if they were all the same distance from the staff.
-We can solve the first problem easily. Instead of making
-the @code{extra-spacing-width} zero we could add a little
-more to it. The units are the space between two staff
-lines, so moving the left edge half a unit to the left and the
-right edge half a unit to the right should do it:
-
-@cindex DynamicText, example of overriding
-@cindex extra-spacing-width property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim,fragment]
\dynamicUp
% Extend width by 1 staff space
\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+\relative { a'4\f b\mf a\mp b\p }
@end lilypond
@noindent
This looks better, but maybe we would prefer the dynamic marks
to be aligned along the same baseline rather than going up and
down with the notes. The property to do this is
-@code{staff-padding} which is covered in the following section.
+@code{staff-padding} which is covered in the section on collisions
+(see @ref{Collisions of objects}).
+
+
+@node Vertical spacing
+@section Vertical spacing
+
+As a rule, LilyPond's vertical spacing of musical objects is pretty
+good. Let's see how it does with a simple song, with 2 voices and
+piano accompaniment:
+
+@lilypond[quote,fragment,ragged-right]
+<<
+ \new ChoirStaff
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+There's nothing wrong with the default vertical spacing. However, let's
+assume that you're working with a publisher with some specific
+requirements for vertical spacing of staves and lyrics: they want
+the lyrics spaced away from any notes, they want the piano
+accompaniment spaced away from the vocal line and they want the two
+piano staves pushed together tightly. Let's start with the lyrics.
+
+Lyrics sit within a system, and therefore the commands to space them
+are found in @ruser{Flexible vertical spacing within systems}. It
+tells us that lyrics are @code{non-staff lines} and therefore the
+command to change their spacing will refer to the @code{nonstaff}
+property. Spacing them away from the staff to which they relate
+(the top line) will use the @code{relatedstaff} property. Spacing
+them from the lower line will use the @code{unrelatedstaff} property.
+The vocal parts are part of a @code{VerticalAxisGroup}, so we need to
+adjust its properties. Let's try it and see if it works.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #5
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #5
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+Well - yes it does, but perhaps too well. When we set the
+@code{padding} to 5, LilyPond adds 5 staff spaces to the distance
+between objects, which is too much for us here. We'll use 2.
+
+Next, let's move the piano music away from the vocal parts. The
+vocal music is a @code{ChoirStaff}, so we need to increase the
+spacing between that group of staves and the piano staff below.
+We'll do this by changing the @code{basic-distance} of the
+@code{StaffGrouper}'s @code{staffgroup-staff-spacing}.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff \with {
+ \override StaffGrouper.
+ staffgroup-staff-spacing.basic-distance = #15
+ }
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #2
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #2
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+Excellent. Now just for the last requirement to make the piano staves
+closer together. To do this, we again alter the properties of the
+@code{StaffGrouper}, but this time we're going to reduce both
+the @code{basic-distance} and the @code{padding}. We can do this
+as shown below.
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff \with {
+ \override StaffGrouper.
+ staffgroup-staff-spacing.basic-distance = #15
+ }
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #2
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #2
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff \with {
+ \override StaffGrouper.staff-staff-spacing = #'(
+ (basic-distance . 0)
+ (padding . 0))
+ }
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+That's put them really close together -- but it's what
+the publisher wanted. They could be moved further
+apart by altering the @code{padding} or @code{basic-distance}
+if wanted.
+
+There are many ways of altering vertical spacing. A key point
+to remember is that the spacing between objects in a
+@code{StaffGroup} (like @code{GrandStaff} or
+@code{PianoStaff} groups) is controlled by the spacing variables
+of the @code{StaffGrouper}. Spacing from ungrouped staves
+(like @code{Lyrics} and @code{Staff}) is controlled by the
+variables of the @code{VerticalAxisGroup}. See the
+@ruser{Flexible vertical spacing paper variables} and
+@ruser{Flexible vertical spacing within systems} for more
+details.
@node Collisions of objects
@section Collisions of objects
@code{side-position-interface} and the nearest other object (generally
the note or the staff lines); @code{staff-padding} applies only to
those objects which are always set outside the staff -- it controls
-the minimum amount of space that should be inserted between that
-object and the staff. Note that @code{staff-padding} has no effect on
-objects which are positioned relative to the note rather than the
+the minimum distance from the staff to the outside-staff object.
+Note that @code{staff-padding} has no effect on
+objects that are positioned relative to the note rather than the
staff, even though it may be overridden without error for such objects
-- it is simply ignored.
collisions between layout objects like multi-measure rests, ties
and notes in different voices.
+@item
+@code{horizontal-shift}
+
+@cindex horizontal-shift property
+@cindex note column
+@cindex note collisions
+@cindex collisions, notes
+@cindex shift commands
+@funindex \shiftOff
+@funindex \shiftOn
+@funindex \shiftOnn
+@funindex \shiftOnnn
+
+Within a voice, all the notes occuring at the same musical moment are
+grouped into a note column, and a @code{NoteColumn} object is created
+to control the horizontal positioning of that group of notes (see
+@qq{Note columns} in @ref{Explicitly instantiating voices}). If
+@emph{and only if} two or more note columns within a single Staff
+context, both with stems in the same direction, occur at the same
+musical moment, the values of their @code{horizontal-shift} properties
+are used to rank them and the columns in the higher ranks are
+progessively offset to avoid collisions of the noteheads. This
+property is set by the @code{\voiceXXX} commands and may be overridden
+directly with an @code{\override} command or, more usually, by the
+@code{\shiftOn} commands. Note that this property is used to
+@emph{rank} the note columns for off-setting - it does not specify the
+magnitude of the offset, which is progressively increased in steps
+based on the note head's width for each rank. The steps are usually
+of half a note head's width, but may be a full note head's width when
+a closely spaced group of notes is involved.
+
@item
@code{force-hshift}
@cindex force-hshift property
-Closely spaced notes in a chord, or notes occurring at the same
-time in different voices, are arranged in two, occasionally more,
-columns to prevent the note heads overlapping. These are called
-note columns, and an object called @code{NoteColumn} is created
-to lay out the notes in that column.
-
The @code{force-hshift} property is a property of a @code{NoteColumn}
(actually of the @code{note-column-interface}). Changing it permits a
-note column to be moved in units appropriate to a note column,
-viz. the note head width of the first voice note. It should be used
-in complex situations where the normal @code{\shiftOn} commands (see
+note column to be moved in situations where the note columns overlap.
+Note that it has no effect on note columns that do not overlap.
+It is specified in units appropriate to a note column, viz. the note
+head width of the first voice note. It should be used in complex
+situations where the normal @code{\shiftOn} commands (see
@ref{Explicitly instantiating voices}) do not resolve the note
-conflict. It is preferable to the @code{extra-offset} property for
-this purpose as there is no need to work out the distance in
-staff-spaces, and moving the notes into or out of a @code{NoteColumn}
-affects other actions such as merging note heads.
+conflict satisfactorily. It is preferable to the @code{extra-offset}
+property for this purpose as there is no need to work out the distance
+in staff-spaces, and moving the notes into or out of a
+@code{NoteColumn} affects other actions such as merging note heads.
@end itemize
@cindex Script, example of overriding
@cindex padding property, example
-@lilypond[quote,fragment,relative=1,verbatim]
-c2\fermata
+@lilypond[quote,fragment,verbatim]
+c'2\fermata
\override Script.padding = #3
b2\fermata
@end lilypond
@cindex MetronomeMark, example of overriding
@cindex padding property, example
-@lilypond[quote,fragment,relative=1,verbatim]
+@lilypond[quote,fragment,verbatim]
% This will not work, see below
\override MetronomeMark.padding = #3
\tempo 4 = 120
-c1 |
+c'1 |
% This works
\override Score.MetronomeMark.padding = #3
\tempo 4 = 80
-d1 |
+d'1 |
@end lilypond
Note in the second example how important it is to figure out what
@lilypond[quote,ragged-right,verbatim]
sesquisharp = \markup { \sesquisharp }
-\relative c'' {
- c4
+\relative {
+ c''4
% This prints a sesquisharp but the spacing is too small
\once \override Accidental.stencil = #ly:text-interface::print
\once \override Accidental.text = #sesquisharp
@cindex objects, aligning on a baseline
@code{staff-padding} can be used to align objects such as dynamics
-along a baseline at a fixed height above the staff, rather than at a
-height dependent on the position of the note to which they are
-attached. It is not a property of @code{DynamicText} but of
+along a baseline at a fixed distance from the staff, when no other
+notation forces them further from the staff.
+It is not a property of @code{DynamicText} but of
@code{DynamicLineSpanner}. This is because the baseline should apply
equally to @strong{all} dynamics, including those created as extended
spanners. So this is the way to align the dynamic marks in the
@cindex DynamicLineSpanner, example of overriding
@cindex staff-padding property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner.staff-padding = #2
-a4\f b\mf c\mp b\p
+@lilypond[quote,fragment,ragged-right,verbatim]
+\override DynamicLineSpanner.staff-padding = #3
+\relative { a'4\f b\mf a\p b\mp }
@end lilypond
@node The self-alignment-X property
@unnumberedsubsubsec The @code{self-alignment-X} property
-The following example shows how this can resolve the collision
-of a string fingering object with a note's stem by aligning the
+The following example shows how to adjust the position
+of a string fingering object relative to a note's stem by aligning the
right edge with the reference point of the parent note:
@cindex StringNumber, example of overriding
@cindex self-alignment-X property, example
-@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
+@lilypond[quote,fragment,ragged-right,verbatim]
\voiceOne
-<a\2>
+<a''\2>
\once \override StringNumber.self-alignment-X = #RIGHT
-<a\2>
+<a''\2>
@end lilypond
@node The staff-position property
for notes and rests that occur at the same time. Here's an
example of a collision of this type:
-@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
-<< { c4 c c c } \\ { R1 } >>
+@lilypond[quote,verbatim,ragged-right]
+<< \relative { c'4 c c c } \\ { R1 } >>
@end lilypond
-The best solution here is to move the multimeasure rest down, since
-the rest is in voice two. The default in @code{\voiceTwo} (i.e. in
-the second voice of a @code{<<@{...@} \\ @{...@}>>} construct) is that
-@code{staff-position} is set to -4 for MultiMeasureRest, so we need to
-move it, say, four half-staff spaces down to @w{@code{-8}}.
+The best solution here is to move the multimeasure rest down, since the
+rest is in voice two. The default in @code{\voiceTwo} (i.e. in the
+second voice of a @code{<<@{@dots{}@} \\ @{@dots{}@}>>} construct) is
+that @code{staff-position} is set to -4 for MultiMeasureRest, so we need
+to move it, say, four half-staff spaces down to @w{@code{-8}}.
@cindex MultiMeasureRest, example of overriding
@cindex staff-position property, example
-@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+@lilypond[quote,verbatim,ragged-right]
<<
- { c4 c c c }
+ \relative { c'4 c c c }
\\
\override MultiMeasureRest.staff-position = #-8
{ R1 }
@cindex Fingering, example of overriding
@cindex extra-offset property, example
-@lilypond[quote,fragment,relative=1,verbatim]
-\stemUp
-f4-5
+@lilypond[quote,fragment,verbatim]
+f'4-5
\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
-f4-5
+f'4-5
@end lilypond
Here's an example in which the phrasing slur and slur collide:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
-a8 \( ( a'16 ) a \)
+@lilypond[quote,verbatim,ragged-right]
+\relative { a'8 \( ( a'16 ) a \) }
@end lilypond
@cindex PhrasingSlur, example of overriding
select the phrasing slur from the candidates it has found with its
end points closest to these:
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,verbatim,fragment,ragged-right]
\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
-a8 \( ( a'16 ) a \)
+a'8 \( ( a''16 ) a'' \)
@end lilypond
This is an improvement, but why not lower the right end of the slur
Here's a further example. We see that the beams
collide with the ties:
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ \relative { c'1~ 2. e8 f }
\\
- { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ }
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ \relative { c'1~ 2. e8 f }
\\
- { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ }
>>
}
@end lilypond
@cindex Beam, example of overriding
@cindex positions property, example
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
{
\time 4/2
<<
- { c'1 ~ c'2. e'8 f' }
+ \relative { c'1~ 2. e8 f }
\\
- {
+ \relative {
\override Beam.positions = #'(-1 . -1)
- e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ e''8 e e e
+ e e e e
+ f2 g
}
>>
<<
- { c'1 ~ c'2. e'8 f' }
+ \relative { c'1~ 2. e8 f }
\\
- { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ \revert Beam.positions
+ }
>>
}
@end lilypond
@noindent
-Note that the override continues to apply in the first voice of
+Note that the override continues to apply in the second voice of
the second measure of eighth notes, but not to any of the beams in the
-second voice.
+first voice, even those in the later second measure. As soon as the
+override should no longer apply it should be reverted, as shown.
@node The force-hshift property
@unnumberedsubsubsec The @code{force-hshift} property
was left looking like this:
@lilypond[quote,verbatim,fragment,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
- { c2 aes4. bes8 }
+ { c''2 aes4. bes8 }
\\
{ <ees, c>2 des }
\\
@noindent
The inner note of the first chord (i.e. the A-flat in the fourth
Voice) need not be shifted away from the note column of the higher
-note. To correct this we set @code{force-hshift}, which is a property
-of @code{NoteColumn}, of this note to zero.
+note, so we use @code{\shiftOff}.
-In the second chord we prefer the F to line up with the A-flat and the
-lowest note to be positioned slightly right to avoid a collision of
-stems. We achieve this by setting @code{force-hshift} in the
+In the second chord we prefer the F to line up with the A-flat and
+the lowest note to be positioned slightly right to avoid a collision
+of stems. We achieve this by setting @code{force-hshift} in the
@code{NoteColumn} of the low D-flat to move it to the right by half
-a staff-space.
+a staff-space, and setting @code{force-hshift} for the F to zero.
+Note that we use @code{\once} to avoid the settings propagating
+beyond the immediate musical moment, although in this small example
+the @code{\once} and the second @code{\override} in Voice four could
+be omitted. This would not be good practice.
Here's the final result:
@cindex force-hshift property, example
@lilypond[quote,verbatim,fragment,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
- { c2 aes4. bes8 }
+ { c''2 aes4. bes8 }
\\
- {
- <ees, c>2
- \once \override NoteColumn.force-hshift = #0.5
- des2
- }
+ { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
\\
\\
- {
- \override NoteColumn.force-hshift = #0
- aes'2 f4 fes
- }
+ { \once \shiftOff aes'2 \once \shiftOff f4 fes }
>> |
<c ees aes c>1 |
}
@c This example should not be indexed
@c line-width ensures no break
@lilypond[quote,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
\once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
<<
{ c,8 d fis bes a }
\new Voice {
\stemDown
% Stem on the d2 should be invisible
\tweak Stem.transparent ##t
- \tweak Flag.transparent ##t
d2
}
\new Voice {
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4. g8 |
+ r2 c''4. g8 |
bes1~ |
\time 6/4
bes2. r8
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2 |
+lhMusic = \relative {
+ r2 <c' g ees>2 |
<d g, d>1 |
r2. d,,4 r4 r |
r4
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
bes1~ |
\time 6/4
bes2. r8
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1) |
r2. d,,4 r4 r |
r4
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
\once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@end lilypond
On to bar three and the start of the Moderato section. The tutorial
-showed how to add bold text with the @code{\markup} command, so
-adding @qq{Moderato} in bold is easy. But how do we merge notes in
+showed how to add a tempo indication with the @code{\tempo} command, so
+adding @qq{Moderato} is easy. But how do we merge notes in
different voices together? This is where we need to turn again to
the Notation Reference for help. A search for @qq{merge} in the
Notation Reference index quickly leads us to the commands for merging
@c line-width ensures no break
@lilypond[quote,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
\once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
{ c,8 d fis bes a } % continuation of main voice
\new Voice {
\voiceTwo
- c,8~ c2
+ c,8~ 2
}
\new Voice {
\voiceThree
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
\once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
-rhMusic = \relative c'' {
+rhMusic = \relative {
\new Voice {
- r2 c4.\( g8 |
+ r2 c''4.\( g8 |
\once \override Tie.staff-position = #3.5
bes1~ |
\bar "||"
\time 6/4
- bes2.^\markup { \bold "Moderato" } r8
+ bes2.\tempo "Moderato" r8
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
\stemDown
% Stem on the d2 should be invisible
\tweak Stem.transparent ##t
- \tweak Flag.transparent ##t
d2
}
\new Voice {
}
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
* Simulating a fermata in MIDI::
@end menu
-@cindex transparent property, use of
-@cindex objects, making invisible
@cindex removing objects
@cindex objects, removing
-@cindex hiding objects
-@cindex objects, hiding
-@cindex invisible objects
-@cindex objects, invisible
@node Tying notes across voices
@unnumberedsubsubsec Tying notes across voices
@cindex tying notes across voices
-The following example demonstrates how to connect notes in
-different voices using ties. Normally, only two notes in the
-same voice can be connected with ties. By using two voices,
-with the tied notes in one of them
+The following example demonstrates how to connect notes in different
+voices using ties. Normally, only notes in the same voice can be
+connected with ties. By using two voices, with the tied notes in one
+of them
-@lilypond[quote,fragment,relative=2]
-<< { b8~ b\noBeam } \\ { b8[ g] } >>
+@lilypond[quote]
+<< { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
@end lilypond
@noindent
-and blanking the first up-stem in that voice, the tie appears to
-cross voices:
-
-@cindex Stem, example of overriding
-@cindex transparent property, example
-
-@lilypond[quote,fragment,relative=2,verbatim]
-<<
- {
- \tweak Stem.transparent ##t
- \tweak Flag.transparent ##t
- b8~ b\noBeam
- }
-\\
- { b8[ g] }
->>
-@end lilypond
+and removing the first up-stem and its flag in that voice, the tie
+appears to cross voices:
-To make sure that the just-blanked stem doesn't squeeze the tie
-too much, we can lengthen the stem by setting the
-@code{length} to @code{8},
+@funindex \omit
+@cindex Stem, example of removing
+@cindex Flag, example of removing
+@cindex @code{\omit}, example
+@cindex example of @code{\omit}
-@lilypond[quote,fragment,relative=2,verbatim]
+@lilypond[quote,verbatim]
<<
{
- \tweak Stem.transparent ##t
- \tweak Flag.transparent ##t
- \tweak Stem.length #8
- b8~ b\noBeam
+ \once \omit Stem
+ \once \omit Flag
+ b'8~ 8\noBeam
}
\\
- { b8[ g] }
+ { b'8[ g'] }
>>
@end lilypond
-@funindex \single
-@cindex tweak, generated from override
-Now for @emph{overriding} the transparency of a graphical object,
-we could have used the shorthand @code{\hide} as explained above.
-Tweaking is a different operation, affecting only properties
-generated from a single music expression. It turns out that we
-can convert overrides into tweaks using @code{\single}, making it
-possible to rewrite the above example as
-
-@lilypond[quote,fragment,relative=2,verbatim]
-<<
- {
- \single \hide Stem
- \single \hide Flag
- \tweak Stem.length #8
- b8~ b\noBeam
- }
-\\
- { b8[ g] }
->>
-@end lilypond
+@seealso
+Learning Manual:
+@ref{The once prefix,,The @code{@bs{}once} prefix},
+@ref{The stencil property}.
-In this particular case, the difference to @code{\once \hide} is
-not apparent. It is important when there are several objects at
-the same point in musical time (like noteheads in a chord). In
-that case, @code{\once} will affect all of those objects while
-@code{\single} will only affect a single one, the one generated by
-the immediately following music expression.
@node Simulating a fermata in MIDI
@unnumberedsubsubsec Simulating a fermata in MIDI
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
+ a'4 a a
\once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
alternative can we use @code{\override} and @code{\revert} commands?
@example
-@code{\override Lyrics.LyricText.font-shape = #'italic}
-@code{\override Lyrics.LyricText.font-series = #'bold}
+\override Lyrics.LyricText.font-shape = #'italic
+\override Lyrics.LyricText.font-series = #'bold
-@code{\revert Lyrics.LyricText.font-shape}
-@code{\revert Lyrics.LyricText.font-series}
+\revert Lyrics.LyricText.font-shape
+\revert Lyrics.LyricText.font-series
@end example
These would also be extremely tedious to enter if there were many
global = { \key c \major \time 4/4 \partial 4 }
-SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g }
-AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e }
-TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 }
-BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 }
+SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g }
+AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e }
+TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 }
+BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 }
VerseOne = \lyrics {
E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
@lilypond[quote,verbatim,ragged-right]
mpdolce =
-#(make-dynamic-script
- #{ \markup { \hspace #0
- \translate #'(5 . 0)
- \line { \dynamic "mp"
- \text \italic "dolce" } }
- #})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@example
%%% save this to a file called "definitions.ily"
mpdolce =
-#(make-dynamic-script
- #@{ \markup @{ \hspace #0
- \translate #'(5 . 0)
- \line @{ \dynamic "mp"
- \text \italic "dolce" @} @}
- #@})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@end example
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- #{ \markup { \hspace #0
- \translate #'(5 . 0)
- \line { \dynamic "mp"
- \text \italic "dolce" } }
- #})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@example
%%% definitions.ily
mpdolce =
-#(make-dynamic-script
- #@{ \markup @{ \hspace #0
- \translate #'(5 . 0)
- \line @{ \dynamic "mp"
- \text \italic "dolce" @} @}
- #@})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- #{ \markup { \hspace #0
- \translate #'(5 . 0)
- \line { \dynamic "mp"
- \text \italic "dolce" } }
- #})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@example
%%% web-publish.ily
mpdolce =
-#(make-dynamic-script
- #@{ \markup @{ \hspace #0
- \translate #'(5 . 0)
- \line @{ \dynamic "mp"
- \text \italic "dolce" @} @}
- #@})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#@{ <>^\markup \bold \box #string #@})
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- #{ \markup { \hspace #0
- \translate #'(5 . 0)
- \line { \dynamic "mp"
- \text \italic "dolce" } }
- #})
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
#{ <>^\markup \bold \box #string #})
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
Open @file{ly/property-init.ly} in a text editor. The one
you normally use for @code{.ly} files will be fine. This file
contains the definitions of all the standard LilyPond predefined
-commands, such as @code{\stemUp} and @code{\slurDotted}. You will
+commands, such as @code{\tieUp} and @code{\slurDotted}. You will
see that these are nothing more than definitions of variables
containing one or a group of @code{\override} commands. For
-example, @code{/tieDotted} is defined to be:
+example, @code{\tieDotted} is defined to be:
@example
tieDotted = @{
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
\override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |