Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
When revising a translation, copy the HEAD committish of the
- version that you are working on. See TRANSLATION for details.
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
@end ignore
@c \version "2.12.0"
There is another form of the override command,
@code{\overrideProperty}, which is occasionally required.
We mention it here for completeness, but for details see
-@ruser{Difficult tweaks}.
+@rextend{Difficult tweaks}.
@c Maybe explain in a later iteration -td
@strong{\tweak command}
@c NOTE Tuplet brackets collide if notes are high on staff
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c]}
+\times 2/3 { c8[ c c] }
\once \override TupletNumber
#'text = #tuplet-number::calc-fraction-text
\times 2/3 {
c[ c]
\once \override TupletNumber #'transparent = ##t
\times 2/3 { c8[ c c] }
-\times 2/3 { c8[ c c]}
+ \times 2/3 { c8[ c c] }
}
@end lilypond
{
\time 6/8
{
- r4 b8 b[( g]) g |
- g[( e]) e d[( f]) a |
- a g
+ r4 b8 b[( g]) g
+ g4[( e]) e d[( f]) a
+ a4 g
}
\addlyrics {
The man who feels love's sweet e -- mo -- tion
{
% Increase thickness of all following slurs from 1.2 to 5.0
\override Slur #'thickness = #5.0
- r4 b8 b[( g]) g |
- g[( e]) e d[( f]) a |
- a g
+ r4 b8 b[( g]) g
+ g4[( e]) e d[( f]) a
+ a4 g
}
\addlyrics {
The man who feels love's sweet e -- mo -- tion
r4 b8
% Increase thickness of immediately following slur only
\once \override Slur #'thickness = #5.0
- b[( g]) g |
- g[( e]) e d[( f]) a |
- a g
+ b4[( g]) g
+ g4[( e]) e d[( f]) a
+ a4 g
}
\addlyrics {
The man who feels love's sweet e -- mo -- tion
r4 b8
% Increase thickness of immediately following slur only
\once \override Slur #'thickness = #5.0
- b[( g]) g |
+ b4[( g]) g
% Increase thickness of immediately following slur only
\once \override Slur #'thickness = #5.0
- g[( e]) e d[( f]) a |
- a g
+ g4[( e]) e d[( f]) a
+ a4 g
}
\addlyrics {
The man who feels love's sweet e -- mo -- tion
r4 b8
% Increase thickness of all following slurs from 1.2 to 5.0
\override Slur #'thickness = #5.0
- b[( g]) g |
- g[( e])
+ b4[( g]) g
+ g4[( e])
% Revert thickness of all following slurs to default of 1.2
\revert Slur #'thickness
- e d[( f]) a |
- a g
+ e4 d[( f]) a
+ a4 g
}
\addlyrics {
The man who feels love's sweet e -- mo -- tion
@code{thickness} or @code{font-shape}, others are used as values that
can be given to properties, like @code{italic}. Note the distinction
from arbitrary text strings, which would appear as @code{"a text
-string"}; for more details about symbols and strings, see @ref{Scheme
-tutorial}.
+string"}; for more details about symbols and strings, see
+@rextend{Scheme tutorial}.
So we see that the @code{\override} command needed to print the lyrics
in italics is:
{
\time 6/8
{
- r4 b8 b[( g]) g |
- g[( e]) e d[( f]) a |
- a g
+ r4 b8 b[( g]) g
+ g4[( e]) e d[( f]) a
+ a4 g
}
\addlyrics {
\override LyricText #'font-shape = #'italic
@seealso
-Learning Manual: @ref{Scheme tutorial}.
+Extending: @rextend{Scheme tutorial}.
@node Types of properties
@seealso
-Learning Manual: @ref{Scheme tutorial}.
+Extending: @rextend{Scheme tutorial}.
@node Appearance of objects
{
\time 12/16
\override BarLine #'stencil = ##f
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.BarLine #'stencil = ##f
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.BarLine #'break-visibility = #'#(#f #f #f)
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.TimeSignature #'transparent = ##t
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.TimeSignature #'stencil = ##f
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.BarLine #'color = #white
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.BarLine #'color = #(x11-color 'white)
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
{
\time 12/16
\override Staff.BarLine #'color = #(rgb-color 1 1 1)
- c4 b8 c d16 c d8 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
\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 |
- g, a16 b8 c d4 e16 |
+ c4 b8 c d16 c d8
+ g,8 a16 b8 c d4 e16
e8
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
- e4 r8
- <<
- { f c c }
- \new Staff \with {
- alignAboveContext = #"main" }
- { f8 f c }
- >>
- r4 |
- }
- }
+ \relative g' {
+ r4 g8 g c4 c8 d
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main" }
+ { f8 f c }
+ >>
+ r4
+ }
+}
@end lilypond
Ossia are normally written without clef and time signature, and
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\new Staff ="main" {
\relative g' {
- r4 g8 g c4 c8 d |
+ r4 g8 g c4 c8 d
e4 r8
<<
- { f c c }
+ { f8 c c }
\new Staff \with {
alignAboveContext = #"main"
}
{ f8 f c }
}
>>
- r4 |
+ r4
}
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\new Staff ="main" {
\relative g' {
- r4 g8 g c4 c8 d |
+ r4 g8 g c4 c8 d
e4 r8
<<
- { f c c }
+ { f8 c c }
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
% Don't print time signatures in this staff
\override TimeSignature #'stencil = ##f
}
- { f8 f c }
+ { f8 f c }
>>
- r4 |
+ r4
}
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\new Staff ="main" {
\relative g' {
- r4 g8 g c4 c8 d |
+ r4 g8 g c4 c8 d
e4 r8
<<
- { f c c }
+ { f8 c c }
\new Staff \with {
alignAboveContext = #"main"
\override Clef #'stencil = ##f
% Reduce all font sizes by ~24%
fontSize = #-2
}
- { f8 f c }
+ { f8 f c }
>>
- r4 |
+ r4
}
}
@end lilypond
hairpins are given a thickness of 1 unit of @code{line-thickness},
while the @code{thickness} of a note stem is 1.3. Note, though,
that some thickness properties are different; for example, the
-thickness of beams is measured in staff-spaces.
+thickness of beams is controlled by the value of the
+@code{beam-thickness} property, which is measured in staff-spaces.
So how are lengths to be scaled in proportion to the font size?
This can be done with the help of a special function called
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\new Staff ="main" {
\relative g' {
- r4 g8 g c4 c8 d |
+ r4 g8 g c4 c8 d
e4 r8
<<
- { f c c }
+ { f8 c c }
\new Staff \with {
alignAboveContext = #"main"
\override Clef #'stencil = ##f
% Reduce stem length and line spacing to match
\override StaffSymbol #'staff-space = #(magstep -2)
}
- { f8 f c }
+ { f8 f c }
>>
- r4 |
+ r4
}
}
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
-c^"Text2"
-c^"Text3"
-c^"Text4"
+c2^"Text2"
+c2^"Text3"
+c2^"Text4"
@end lilypond
Staves are also positioned, by default, as closely together as
@lilypond[quote,ragged-right,verbatim]
<<
\new Staff {
- \relative c' { c a, }
+ \relative c' { c4 a, }
}
\new Staff {
- \relative c'''' { c a, }
+ \relative c'''' { c4 a, }
}
>>
@end lilypond
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
a4 g c a
\override Stem #'direction = #DOWN
-a g c a
+a4 g c a
\override Stem #'direction = #UP
-a g c a
+a4 g c a
\revert Stem #'direction
-a g c a
+a4 g c a
@end lilypond
Here we use the constants @code{DOWN} and @code{UP}.
followed after the affected note by the corresponding
@code{\xxxNeutral} command.
-@subheading Fingering
+@unnumberedsubsubsec Fingering
@cindex fingering, placement
@cindex fingering, chords
@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
\set fingeringOrientations = #'(left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(up left down)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(up left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(right)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
@end lilypond
@noindent
\override Fingering #'font-size = #-7
\set fingeringOrientations = #'(left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(up left down)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(up left)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
\set fingeringOrientations = #'(right)
<f-2>
-< c-1 e-2 g-3 b-5 > 4
+<c-1 e-2 g-3 b-5>4
@end lilypond
@node Outside-staff objects
@code{grob-interface} and so is a property of all layout objects.
By default it is set to @code{#f} for all within-staff objects,
and to a numerical value appropriate to each outside-staff object
-when the object is created. The following table shows
-the default numerical values for some of the commonest
-outside-staff objects which are, by default, placed in the
-@code{Staff} or @code{Voice} contexts.
+when the object is created. The following table shows the default
+numerical values for some of the commonest outside-staff objects
+which are, by default, placed in the @code{Staff} or @code{Voice}
+contexts.
+
+@cindex spanners
+
+Note the unusual names for some of the objects: spanner objects
+are automatically created to control the vertical positioning of
+grobs which (might) start and end at different musical moments, so
+changing the @code{outside-staff-priority} of the underlying grob
+will have no effect. For example, changing
+@code{outside-staff-priority} of the @code{Hairpin} object will
+have no effect on the vertical positioning of hairpins -- you must
+change @code{outside-staff-priority} of the associated
+@code{DynamicLineSpanner} object instead. This override must be
+placed at the start of the spanner, which might include several
+linked hairpins and dynamics.
@multitable @columnfractions .3 .3 .3
@headitem Layout Object
\dynamicUp
% Start Ottava Bracket
\ottava #1
-c' \startTextSpan
-% Add Dynamic Text
-c\pp
-% Add Dynamic Line Spanner
-c\<
+c'4 \startTextSpan
+% Add Dynamic Text and hairpin
+c4\pp\<
+c4
% Add Text Script
-c^Text
-c c
-% Add Dynamic Text
-c\ff c \stopTextSpan
+c4^Text
+c4 c
+% Add Dynamic Text and terminate hairpin
+c4\ff c \stopTextSpan
% Stop Ottava Bracket
\ottava #0
-c, c c c
+c,4 c c c
@end lilypond
This example also shows how to create Text Spanners --
\once \override Staff.OttavaBracket #'outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
-c' \startTextSpan
+c'4 \startTextSpan
% Add Dynamic Text
-c\pp
+c4\pp
% Add Dynamic Line Spanner
-c\<
+c4\<
% Add Text Script
-c^Text
-c c
+c4^Text
+c4 c
% Add Dynamic Text
-c\ff c \stopTextSpan
+c4\ff c \stopTextSpan
% Stop Ottava Bracket
\ottava #0
-c, c c c
+c,4 c c c
@end lilypond
@cindex slurs and outside-staff-priority
example showing the effect of the two methods:
@lilypond[quote,verbatim,relative=2]
-c4( c^\markup\tiny\sharp d4.) c8
+c4( c^\markup { \tiny \sharp } d4.) c8
c4(
\once \override TextScript #'avoid-slur = #'inside
\once \override TextScript #'outside-staff-priority = ##f
-c^\markup\tiny\sharp d4.) c8
+c4^\markup \tiny \sharp d4.) c8
\once \override Slur #'outside-staff-priority = #500
-c4( c^\markup\tiny\sharp d4.) c8
+c4( c^\markup { \tiny \sharp } d4.) c8
@end lilypond
Changing the @code{outside-staff-priority} can also be used to
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
c2^"Text1"
-c^"Text2"
+c2^"Text2"
\once \override TextScript #'outside-staff-priority = #500
-c^"Text3"
-c^"Text4"
+c2^"Text3"
+c2^"Text4"
@end lilypond
This certainly lifts @qq{Text3} above @qq{Text4} but it also lifts it
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
\textLengthOn % Cause notes to space out to accommodate text
c2^"Text1"
-c^"Text2"
-c^"Text3"
-c^"Text4"
+c2^"Text2"
+c2^"Text3"
+c2^"Text4"
@end lilypond
The command to revert to the default behavior is
\key aes \major
\time 9/8
\dynamicUp
-bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
-ees,2.~\)\mf ees4 r8 |
+bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\!
+ees,2.~\)\mf ees4 r8
@end lilypond
However, if the notes and attached dynamics are close
@cindex padding property, example
@lilypond[quote,fragment,relative=1,verbatim]
-% This will not work, see below:
+% This will not work, see below
\override MetronomeMark #'padding = #3
\tempo 4=120
c1
-% This works:
+% This works
\override Score.MetronomeMark #'padding = #3
\tempo 4=80
d1
The @code{right-padding} property affects the spacing between the
accidental and the note to which it applies. It is not often
-required, but the following example shows one situation where it
-is needed. Suppose we wish to show a chord containing both
-a B-natural and a B-flat. To avoid ambiguity we would like to
-precede the notes with both a natural and a flat sign. Here
-are a few attempts to do this:
-
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-<b bes>
-<b! bes>
-<b? bes>
-@end lilypond
-
-None work, with the second two showing bad collisions between
-the two signs.
-
-One way of achieving this is to override the accidental stencil
-with a markup containing the natural and flat symbols in the
-order we would like, like this:
+required, but the default spacing may be wrong for certain special
+accidental glyphs or combination of glyphs used in some microtonal
+music. These have to be entered by overriding the accidental
+stencil with a markup containing the desired symbol(s), like this:
@cindex Accidental, example of overriding
@cindex text property, example
@cindex right-padding property, example
@lilypond[quote,ragged-right,verbatim]
-naturalplusflat = \markup { \natural \flat }
+sesquisharp = \markup { \sesquisharp }
\relative c'' {
+ c4
+ % This prints a sesquisharp but the spacing is too small
+ \once \override Accidental
+ #'stencil = #ly:text-interface::print
+ \once \override Accidental #'text = #sesquisharp
+ cis4 c
+ % This improves the spacing
+ \once \override Score.AccidentalPlacement #'right-padding = #0.6
\once \override Accidental
#'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #naturalplusflat
- \once \override Score.AccidentalPlacement #'right-padding = #1.5
- <b bes>
+ \once \override Accidental #'text = #sesquisharp
+ cis4
}
@end lilypond
This necessarily uses an override for the accidental stencil which
will not be covered until later. The stencil type must be a
procedure, here changed to print the contents of the @code{text}
-property of @code{Accidental}, which itself is set to be a natural
-sign followed by a flat sign. These are then moved further away
-from the note head by overriding @code{right-padding}.
+property of @code{Accidental}, which itself is set to be a
+sesquisharp sign. This sign is then moved further away from the
+note head by overriding @code{right-padding}.
@noindent
@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
\voiceOne
-< a \2 >
+< a\2 >
\once \override StringNumber #'self-alignment-X = #RIGHT
-< a \2 >
+< a\2 >
@end lilypond
@subheading staff-position property
example of a collision of this type:
@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
-<< {c c c c} \\ {R1} >>
+<< { c4 c c c } \\ { R1 } >>
@end lilypond
The best solution here is to move the multimeasure rest down, since
@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
<<
- {c c c c}
-\\
+ { c4 c c c }
+ \\
\override MultiMeasureRest #'staff-position = #-8
- {R1}
+ { R1 }
>>
@end lilypond
@lilypond[quote,fragment,relative=1,verbatim]
\stemUp
-f-5
-\once \override Fingering
- #'extra-offset = #'(-0.3 . -1.8)
-f-5
+f4-5
+\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
+f4-5
@end lilypond
avoid the slur on the acciaccatura.
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c ~c d c d\)
+r4 \acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
@noindent
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
r4
\phrasingSlurUp
-\acciaccatura e8\( d8 c ~c d c d\)
+\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
@noindent
r4
\once \override PhrasingSlur #'positions = #'(-4 . -3)
\acciaccatura
-e8\( d8 c ~c d c d\)
+e8\( d8 c~ c d c d\)
@end lilypond
Here's a further example taken from the opening of the left-hand
@lilypond[quote,verbatim,fragment,ragged-right]
{
-\clef "bass"
-<< {b,8 ais, b, g,} \\ {e, g e, g} >>
-<< {b,8 ais, b, g,} \\ {e, g e, g} >>
+ \clef "bass"
+ << { b,8 ais, b, g, } \\ { e, g e, g } >>
+ << { b,8 ais, b, g, } \\ { e, g e, g } >>
}
@end lilypond
\clef "bass"
<<
\override Beam #'positions = #'(3 . 3)
- {b,8 ais, b, g,}
+ { b,8 ais, b, g, }
\\
- {e, g e, g}
+ { e,8 g e, g }
>>
- << {b,8 ais, b, g,} \\ {e, g e, g} >>
+ << { b,8 ais, b, g, } \\ { e, g e, g } >>
}
@end lilypond
@subheading force-hshift property
-@c FIXME: formatting stuff (ie not important right now IMO)
-@c @a nchor Chopin finally corrected TODOgp
-
We can now see how to apply the final corrections to the Chopin
example introduced at the end of @ref{I'm hearing Voices}, which
was left looking like this:
@c The following should appear as music without code
@c This example should not be indexed
-@lilypond[quote,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2
c4.\( g8 |
\mergeDifferentlyDottedOn
bes2.^\markup {\bold "Moderato"} r8
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
% Reposition the c2 to the right of the merged note
{c,8~ \once \override NoteColumn #'force-hshift = #1.0
structure in a score block, and see what LilyPond produces by
default:
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2 c4. g8 |
bes1~ |
}
@end lilypond
-All the notes are right, but the appearance is far from satisfactory.
-The tie clashes with the change in time signature, the beaming in the
-third bar is wrong, the notes are not merged together, and several
-notation elements are missing. Let's first deal with the easier
-things. We can correct the beaming by inserting a beam manually, and
-we can easily add the left hand slur and the right hand phrasing slur,
+All the notes are right, but the appearance is far from
+satisfactory. The tie clashes with the change in time signature,
+the notes are not merged together, and several notation elements
+are missing. Let's first deal with the easier things. We can
+easily add the left hand slur and the right hand phrasing slur,
since these were all covered in the Tutorial. Doing this gives:
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2 c4.\( g8 |
bes1~ |
bes2. r8
% Start polyphonic section of four voices
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
{c,8~ c2 | }
\\
This completes bar two, giving:
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2 c4.\( g8 |
\once \override Tie #'staff-position = #3.5
bes2. r8
% Start polyphonic section of four voices
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
{c,8~ c2 | }
\\
On to bar three and the start of the Moderato section. The tutorial
showed how to add embolded text with the @code{\markup} command, so
adding @q{Moderato} in bold is easy. But how do we merge notes in
-different voices together? This is where we need to turn to the
-Notation Reference for help. A search for @qq{merge} in the Notation
-Reference index quickly leads us to the commands for merging
+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
differently headed and differently dotted notes in @ruser{Collision
resolution}. In our example we need to merge both types of note for
the duration of the polyphonic section in bar 3, so using the
@noindent
to the end, giving:
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2 c4.\( g8 |
\once \override Tie #'staff-position = #3.5
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
{c,8~ c2 | }
\\
@cindex Tie, example of overriding
@cindex staff-position property, example
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2 c4.\( g8 |
\once \override Tie #'staff-position = #3.5
\mergeDifferentlyDottedOn
% Start polyphonic section of four voices
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
% Move the c2 out of the main note column so the merge will work
{c,8~ \shiftOnn c2 | }
@cindex Stem, example of overriding
@cindex transparent property, example
-@lilypond[quote,verbatim,ragged-right]
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
rhMusic = \relative c'' {
r2
c4.\( g8 |
\mergeDifferentlyHeadedOn
\mergeDifferentlyDottedOn
<<
- {c,8[ d fis bes a] | }
+ {c,8 d fis bes a | }
\\
% Reposition the c2 to the right of the merged note
{c,8~ \once \override NoteColumn #'force-hshift = #1.0
@menu
* Other uses for tweaks::
* Using variables for tweaks::
+* Style sheets::
* Other sources of information::
* Avoiding tweaks with slower processing::
* Advanced tweaks with Scheme::
@end lilypond
+@node Style sheets
+@subsection Style sheets
+
+The output that LilyPond produces can be heavily modified; see
+@ref{Tweaking output}, for details. But what if you have many
+input files that you want to apply your tweaks to? Or what if you
+simply want to separate your tweaks from the actual music? This
+is quite easy to do.
+
+Let's look at an example. Don't worry if you don't understand
+the parts with all the @code{#()}. This is explained in
+@ref{Advanced tweaks with Scheme}.
+
+@lilypond[quote,verbatim,ragged-right]
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line(#:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
+}
+@end lilypond
+
+There are some problems with overlapping output; we'll fix those using
+the techniques in @ref{Moving objects}. But let's also
+do something about the @code{mpdolce} and @code{inst}
+definitions. They produce the output we desire, but we might want
+to use them in another piece. We could simply copy-and-paste them
+at the top of every file, but that's an annoyance. It also leaves
+those definitions in our input files, and I personally find all
+the @code{#()} somewhat ugly. Let's hide them in another file:
+
+@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" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+@end example
+
+We will refer to this file using the @code{\include} command near
+the top of the music file. (The extension @code{.ily} is used to
+distinguish this included file, which is not meant to be compiled
+on its own, from the main file.)
+Now let's modify our music (let's save this file as @file{"music.ly"}).
+
+@c We have to do this awkward example/lilypond-non-verbatim
+@c because we can't do the \include stuff in the manual.
+
+@example
+\include "definitions.ily"
+
+\relative c'' @{
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line(#:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
+}
+@end lilypond
+
+That looks better, but let's make a few changes. The glissando is hard
+to see, so let's make it thicker and closer to the note heads. Let's
+put the metronome marking above the clef, instead of over the first
+note. And finally, my composition professor hates @q{C} time signatures,
+so we'd better make that @q{4/4} instead.
+
+Don't change @file{music.ly}, though. Replace our @file{definitions.ily}
+with this:
+
+@example
+%%% definitions.ily
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line( #:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+\layout@{
+ \context @{ \Score
+ \override MetronomeMark #'extra-offset = #'(-9 . 0)
+ \override MetronomeMark #'padding = #'3
+ @}
+ \context @{ \Staff
+ \override TimeSignature #'style = #'numbered
+ @}
+ \context @{ \Voice
+ \override Glissando #'thickness = #3
+ \override Glissando #'gap = #0.1
+ @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line( #:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+\layout{
+ \context { \Score
+ \override MetronomeMark #'extra-offset = #'(-9 . 0)
+ \override MetronomeMark #'padding = #'3
+ }
+ \context { \Staff
+ \override TimeSignature #'style = #'numbered
+ }
+ \context { \Voice
+ \override Glissando #'thickness = #3
+ \override Glissando #'gap = #0.1
+ }
+}
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
+}
+@end lilypond
+
+That looks nicer! But now suppose that I want to publish this
+piece. My composition professor doesn't like @q{C} time
+signatures, but I'm somewhat fond of them. Let's copy the
+current @file{definitions.ily} to @file{web-publish.ily} and
+modify that. Since this music is aimed at producing a pdf which
+will be displayed on the screen, we'll also increase the
+overall size of the output.
+
+@example
+%%% definitions.ily
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line( #:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+#(set-global-staff-size 23)
+\layout@{
+ \context @{ \Score
+ \override MetronomeMark #'extra-offset = #'(-9 . 0)
+ \override MetronomeMark #'padding = #'3
+ @}
+ \context @{ \Staff
+ @}
+ \context @{ \Voice
+ \override Glissando #'thickness = #3
+ \override Glissando #'gap = #0.1
+ @}
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
+ #:line( #:dynamic "mp" #:text #:italic "dolce" )))
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
+
+#(set-global-staff-size 23)
+\layout{
+ \context { \Score
+ \override MetronomeMark #'extra-offset = #'(-9 . 0)
+ \override MetronomeMark #'padding = #'3
+ }
+ \context { \Voice
+ \override Glissando #'thickness = #3
+ \override Glissando #'gap = #0.1
+ }
+}
+
+\relative c'' {
+ \tempo 4=50
+ a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
+ \inst "Clarinet"
+ cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
+}
+@end lilypond
+
+Now in our music, I simply replace
+@code{\include "definitions.ily"} with
+@code{\include "web-publish.ily"}. Of course, we could make this
+even more convenient. We could make a @file{definitions.ily} file which
+contains only the definitions of @code{mpdolce} and @code{inst}, a
+@file{web-publish.ily} file which contains only the @code{\layout}
+section listed above, and a @file{university.ily} file which
+contains only the tweaks to produce the output that my professor
+prefers. The top of @file{music.ly} would then look like this:
+
+@example
+\include "definitions.ily"
+
+%%% Only uncomment one of these two lines!
+\include "web-publish.ily"
+%\include "university.ily"
+@end example
+
+This approach can be useful even if you are only producing
+one set of parts. I use half a dozen different
+@q{style sheet} files for my projects. I begin every music
+file with @code{\include "../global.ily"}, which contains
+
+@example
+%%% global.ily
+\version @w{"@version{}"}
+#(ly:set-option 'point-and-click #f)
+\include "../init/init-defs.ly"
+\include "../init/init-layout.ly"
+\include "../init/init-headers.ly"
+\include "../init/init-paper.ly"
+@end example
+
@node Other sources of information
@subsection Other sources of information
is currently outside the scope of this manual, as a knowledge of
the Scheme language is required. Users should be warned that
a substantial amount of technical knowledge or time is required
-to understand Scheme and these files (see @ref{Scheme tutorial}).
+to understand Scheme and these files (see @rextend{Scheme tutorial}).
If you have this knowledge, the Scheme files which may be of
interest are:
@node Avoiding tweaks with slower processing
@subsection Avoiding tweaks with slower processing
-LilyPond can perform extra checks while it processes input files. These
-checks will take extra time to perform, but fewer manual tweaks
+LilyPond can perform extra checks while it processes input files.
+These checks will take extra time to perform, but fewer manual tweaks
may be required to obtain an acceptable result. If a text script
or part of the lyrics extends over the margins these checks will
compress that line of the score just enough to fit within the
@}
@end example
+However, @code{keep-inside-line} is expensive and the recommendation
+is to not enable it, to allow for faster processing, until creating
+a final version. This way you do not need to manually add @code{\break}
+commands to avoid text running off the right-hand side of the page.
+
@node Advanced tweaks with Scheme
@subsection Advanced tweaks with Scheme
the Scheme programming language can be incorporated directly in
the internal operation of LilyPond. Of course, at least a basic
knowledge of programming in Scheme is required to do this, and an
-introduction is provided in the @ref{Scheme tutorial}.
+introduction is provided in the @rextend{Scheme tutorial}.
As an illustration of one of the many possibilities, instead of
setting a property to a constant it can be set to a Scheme
\relative c' {
% Arrange to obtain color from color-notehead procedure
\override NoteHead #'color = #color-notehead
- c2 c' |
- b4 g8 a b4 c |
- c,2 a' |
- g1 |
-}
-\addlyrics {
- Some -- where o -- ver the Rain -- bow, way up high,
+ a2 b |
+ c2 d |
+ e2 f |
+ g2 a |
}
@end lilypond
Further examples showing the use of these programmable interfaces
-can be found in @ref{Tweaking with Scheme}.
-
-
-
-
-
-
-
-
-
-
-
-
+can be found in @rextend{Callback functions}.