@c Note:
@c
-@c A menu is needed before every deeper *section nesting of @nodes
-@c Run M-x texinfo-all-menus-update
-@c to automagically fill in these menus
-@c before saving changes
+@c A menu is needed before every deeper *section nesting of @node's; run
+@c M-x texinfo-all-menus-update
+@c to automagically fill in these menus before saving changes
+@c FIXME: singular vs. plural: Beams/Beam
-@
@macro refbugs
@strong{BUGS}
@end macro
+@ifhtml
+@macro internalsref{NAME}
+@uref{../lilypond-internals/\NAME\.html,\NAME\}
+@cindex \NAME\
+@end macro
+@macro seeinternals{NAME}
+See @internalsref{\NAME\}
+@end macro
+@end ifhtml
+
+
+@ifnothtml
+@macro seeinternals{NAME}
+@end macro
+@macro internalsref{NAME}
+\NAME\
+@cindex \NAME\
+
+@end macro
+@end ifnothtml
@c .{Reference Manual}
@node Reference Manual
@chapter Reference Manual
+@html
+<!--- @@WEB-TITLE@@=Reference Manual --->
+@end html
+
This document describes GNU LilyPond and its input format. The last
-revision of this document was made for LilyPond 1.3.145. It supposes a
+revision of this document was made for LilyPond 1.4.1. It supposes a
passing familiarity with how LilyPond input works. New users are
encouraged to study the tutorial first.
+The reference manual is ordered according to different tasks.
+More details on the property setting mechanisms and context handling is
+provided in @ref{Tuning output} and @ref{Interpretation context}. The
+syntactical details are described at the end of the manual.
@menu
* Overview::
data-structures (music, context, graphical objects) permeates the entire
design of the program.
+@c FIXME: Note entry vs Music entry at top level menu is confusing.
@c . {Note entry}
@node Note entry
@section Note entry
@menu
+* Notes::
* Pitches::
-* Defining pitch names::
+* Rests::
+* Skips::
* Durations::
-* Notes::
-* Easy Notation note heads ::
-* Tie::
+* Ties::
* Tuplets::
-* Rests::
-* Skip::
+* Defining pitch names::
+* Easy Notation note heads ::
@end menu
+@c . {Notes}
+@node Notes
+@subsection Notes
+
+A note specification has the form
+
+@example
+ @var{pitch}[!][?][@var{duration}]
+@end example
+
+The alteration refers to what note is heard, not to whether an
+accidental is printed. This is done depending on the key and context.
+A reminder accidental
+@cindex reminder accidental
+@cindex @code{?}
+can be forced by adding an exclamation mark @code{!} after the pitch. A
+cautionary accidental,
+@cindex cautionary accidental
+@cindex parenthesized accidental
+i.e., an accidental within parentheses can be obtained by adding the
+question mark `@code{?}' after the pitch.
+
+@lilypond[fragment,verbatim,center]
+ cis' d' e' cis' c'? d' e' c'!
+@end lilypond
+
+The grob for a note head is called @internalsref{NoteHead}.
+
+
@c . {Pitches}
@node Pitches
@subsection Pitches
@cindex note names, Dutch
In Dutch, a sharp is formed by adding @code{-is} to the end of a pitch
-name. A flat is formed by adding @code{-es}. Double sharps and double
+name and a flat is formed by adding @code{-es}. Double sharps and double
flats are obtained by adding @code{-isis} or @code{-eses}. @code{aes}
and @code{ees} are contracted to @code{as} and @code{es} in Dutch, but
both forms are accepted.
c' c'' es' g' as' gisis' ais'
@end lilypond
-@c . {Defining pitch names}
-@node Defining pitch names
-@subsection Defining pitch names
+@c . {Rests}
+@node Rests
+@subsection Rests
+@cindex Rests
-@cindex defining pitch names
-@cindex pitch names, defining
+A rest is entered like a note, with note name `@code{r}':
-Note names and chord modifiers can be customized for nationalities. The
-syntax is as follows.
+@lilypond[singleline,verbatim]
+r1 r2 r4 r8
+@end lilypond
-@cindex @code{\pitchnames}
-@cindex @code{\chordmodifiers}
-@example
- \pitchnames @var{scheme-alist}
- \chordmodifiers @var{scheme-alist}
-@end example
+The grob is @internalsref{Rest}. Whole bar rests centered in the bar are
+specified using @code{R}, see @ref{Multi measure rests}.
-See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
-specific examples how to do this.
+@c . {Skips}
+@c FIXME: naming.
+@node Skips
+@subsection Skips
+@cindex Skip
+@cindex Invisible rest
+@cindex Space note
+
+An invisible rest, or skip, can be entered like a note with note name
+`@code{s}':
+
+@lilypond[singleline,verbatim]
+a2 s4 a4 s1 a4
+@end lilypond
+
+Actually, this is a shorthand for the @code{\skip} command, and it is
+only available in Note mode and Chord mode.
+
+@c FIXME: in lyrics mode, we have " " and _
+
+In Lyrics mode, you can use `@code{" "}' and `@code{_}':
+@lilypond[singleline,verbatim]
+<
+ \context Lyrics \lyrics { lah2 di4 " " dah2 _4 di }
+ \notes\relative c'' { a2 a4 a a2 a4 a }
+>
+@end lilypond
+
+The unabbreviated `@code{\skip} @var{duration}' also works outside of
+note mode:
+
+@lilypond[singleline,verbatim]
+\score {
+ \context Staff <
+ { \time 4/8 \skip 2 \time 4/4 }
+ \notes\relative c'' { a2 a1 }
+ >
+}
+@end lilypond
+
+Note that the skip does not produce any output, not even transparent output.
@c . {Durations}
@lilypond[]
\score {
\notes \relative c'' {
- a\breve \autoBeamOff
+ a\breve \autoBeamOff
a1 a2 a4 a8 a16 a32 a64 a64
r\longa r\breve
r1 r2 r4 r8 r16 r32 r64 r64
To get a longa note head, you have to use mensural note heads. This
is accomplished by setting the @code{style} property of the
-NoteHead grob to @code{mensural}.
+NoteHead grob to @code{mensural}. There is also a note head style
+@code{baroque} which gives mensural note heads for @code{\longa} and
+@code{\breve} but standard note heads for shorter notes.
@lilypond[fragment,singleline,verbatim]
\property Voice.NoteHead \set #'style = #'mensural
appending `@code{*}@var{N/M}' (or `@code{*}@var{N}' if @var{M=1}). This
will not affect the appearance of the notes or rests produced.
-@c . {Notes}
-@node Notes
-@subsection Notes
-
-A note specification has the form
-
-@example
- @var{pitch}[!][?][@var{duration}]
-@end example
-
-The alteration refers to what note is heard, not to whether an
-accidental is printed. This is done depending on the key and context.
-A reminder accidental
-@cindex reminder accidental
-@cindex @code{?}
-can be forced by adding an exclamation mark @code{!} after the pitch. A
-cautionary accidental,
-@cindex cautionary accidental
-i.e., an accidental within parentheses can be obtained by adding the
-question mark `@code{?}' after the pitch.
-
-@lilypond[fragment,verbatim,center]
- cis' d' e' cis' c'? d' e' c'!
-@end lilypond
-
-
-@node Easy Notation note heads
-@subsection Easy Notation note heads
-
-@cindex easy notation
-@cindex Hal Leonard
-A entirely different type of note head is the "easyplay" note head: a
-note head that includes a note name. It is used in some publications by
-Hal-Leonard Inc. music publishers.
-@lilypond[singleline,verbatim]
-\include "paper23.ly"
-\score {
- \notes { c'2 e'4 f' | g'1 }
- \paper { \translator { \EasyNotation } }
-}
-@end lilypond
-Note that @code{EasyNotation} overrides a @code{Score} context. You
-probably will want to print it with magnification to make it better
-readable, see @ref{Output scaling}.
-
-
-@cindex Xdvi
-@cindex ghostscript
-
-If you view the result with Xdvi, then staff lines will show through the
-letters. Printing the postscript file obtained either by using dvips or
-the @code{-f ps} option of lilypond produces the correct result.
-
-
-@node Tie
-@subsection Tie
+@node Ties
+@subsection Ties
@cindex Tie
@cindex ties
exactly the same concept.
@c
@lilypond[fragment, singleline]
-c'2 c'4 ~ c'4
+\time 3/4 c'2. c'2 ~ c'4
@end lilypond
-The name of the tie grob is @code{Voice.Tie}.
+The name of the tie grob is @internalsref{Tie}, and it is created in the
+@internalsref{Voice} context.
@refbugs
@cindex triplets
@cindex @code{\times}
-Tuplets are made out of a music expression by multiplying their duration
+Tuplets are made out of a music expression by multiplying all duration
with a fraction.
@cindex @code{\times}
@lilypond[fragment, relative, singleline, verbatim]
\property Voice.tupletSpannerDuration = #(make-moment 1 4)
-\times 2/3 { c''8 c c c c c }
+\times 2/3 { c'8 c c c c c }
@end lilypond
The format of the number is determined by the property
@code{tupletNumberFormatFunction}. The default prints only the
denominator, but if you set it to the Scheme function
-@code{fraction-tuplet-formatter} will print @var{num}:@var{den} instead.
+@code{fraction-tuplet-formatter}, Lilypond will print @var{num}:@var{den}
+instead.
+
+The typesetting of brackets and numbers is controlled by the properties
+@code{tuplet-bracket-visibility} and @code{tuplet-number-visibility}.
+
+@lilypond[fragment, relative, singleline, verbatim]
+\property Voice.TupletBracket \set #'tuplet-bracket-visibility = ##t
+\times 2/3{c'8 d e} \times 2/3{d4 e8}
+\property Voice.TupletBracket \set #'tuplet-bracket-visibility = #'if-no-beam
+\times 2/3{c d e} \times 2/3{d4 e8}
+\property Voice.TupletBracket \set #'tuplet-bracket-visibility = ##f
+\times 2/3{c d e} \times 2/3{d4 e8}
+\property Voice.TupletBracket \set #'tuplet-number-visibility = ##f
+\times 2/3{c d e} \times 2/3{d4 e8}
+\property Voice.TupletBracket \set #'tuplet-number-visibility = #'if-no-beam
+\times 2/3{c d e} \times 2/3{d4 e8}
+@end lilypond
@cindex @code{tupletNumberFormatFunction}
@cindex tuplet formatting
-Tuplet brackets are printed as @code{TupletBracket} grobs
+Tuplet brackets are printed as @internalsref{TupletBracket} grobs, most
+often in the @internalsref{Voice} context.
+@c . {Defining pitch names}
+@node Defining pitch names
+@subsection Defining pitch names
-@c . {Rests}
-@node Rests
-@subsection Rests
-@cindex Rests
+@cindex defining pitch names
+@cindex pitch names, defining
-Rests are entered like notes, with note name `@code{r}'. The grob is
-@code{Rest}. Whole bar rests centered in the bar are specified using
-@code{R}, see @ref{Multi measure rests}.
+Note names and chord modifiers can be customized for nationalities. The
+syntax is as follows.
+@cindex @code{\pitchnames}
+@cindex @code{\chordmodifiers}
+@example
+ \pitchnames @var{scheme-alist}
+ \chordmodifiers @var{scheme-alist}
+@end example
-@c . {Skip}
-@node Skip
-@subsection Skip
-@cindex Skip
+See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
+specific examples on how to do this.
-@example
- \skip @var{duration}
- s@var{duration}
-@end example
-@cindex @code{\skip}
+@node Easy Notation note heads
+@subsection Easy Notation note heads
+
+@cindex easy notation
+@cindex Hal Leonard
+
+A entirely different type of note head is the "easyplay" note head: a
+note head that includes a note name. It is used in some publications by
+Hal-Leonard Inc. music publishers.
+
+@lilypond[singleline,verbatim]
+\include "paper23.ly"
+\score {
+ \notes { c'2 e'4 f' | g'1 }
+ \paper { \translator { \EasyNotation } }
+}
+@end lilypond
+
+Note that @internalsref{EasyNotation} overrides a @internalsref{Score} context. You
+probably will want to print it with magnification to make it more
+readable, see @ref{Output scaling}.
-Skips the amount of time specified by @var{duration}. If no other music
-is played, a gap will be left for the skipped time without any notes
-printed. The shorthand is only available in Note and Chord mode.
+
+@cindex Xdvi
+@cindex ghostscript
+
+If you view the result with Xdvi, then staff lines will show through the
+letters. Printing the postscript file obtained either by using dvips or
+the @code{-f ps} option of lilypond produces the correct result.
@cindex @code{\key}
-Changing the key signature is done with the @code{\key} command.
+Setting or changing the key signature is done with the @code{\key}
+command.
@example
@code{\key} @var{pitch} @var{type}
@end example
This command sets the context property @code{Staff.keySignature}.
Non-standard key signatures can be specified by setting this property
-directly, see the generated documentation.
+directly.
-The printed signature is a @code{KeySignature} grob.
+The printed signature is a @internalsref{KeySignature} grob, typically
+created in @internalsref{Staff} context.
@cindex @code{keySignature}
@node Clef
@subsection Clef
@cindex @code{\clef}
+
+The clef can be set or changed with the @code{\clef} command.
@example
- \clef @var{clefname} @code{;}
+ \clef @var{clefname}
@end example
Shortcut for
@example
\property Staff.clefGlyph = @var{glyph associated with clefname}
\property Staff.clefPosition = @var{clef Y-position for clefname}
+ \property Staff.centralCPosition = @var{position for central C}
\property Staff.clefOctavation = @var{extra transposition of clefname}
@end example
-Any change in these properties creates a clef (a @code{Clef} grob).
+
+Any change in these properties creates a clef (A @internalsref{Clef} grob).
Supported clef-names include
+@c Moved standard clefs to the top /MB
@table @code
@item treble, violin, G, G2
G clef on 2nd line
+@item alto, C
+ C clef on 3rd line
+@item tenor
+ C clef on 4th line
+@item bass, F
+ F clef on 4th line
@item french
- G clef on 1st line
+ G clef on 1st line, so-called French violin clef
@item soprano
C clef on 1st line
@item mezzosoprano
C clef on 2nd line
-@item alto
- C clef on 3rd line
-@item tenor
- C clef on 4th line
@item baritone
C clef on 5th line
@item varbaritone
F clef on 3rd line
-@item bass, F
- F clef on 4th line
@item subbass
F clef on 5th line
@item percussion
@end table
By adding @code{_8} or @code{^8} to the clef name, the clef is
-transposed one octave down or up, respectively.
+transposed one octave down or up, respectively. Note that you have to
+enclose @var{clefname} in quotes if you use underscores or digits in the
+name. For example,
+@example
+ \clef "G_8"
+@end example
Supported associated glyphs (for @code{Staff.clefGlyph}) are:
@cindex meter
@cindex @code{\time}
-The time signature is changed by the @code{\time} command. Syntax:
+The time signature is set or changed by the @code{\time}
+command. Syntax:
@example
\time @var{n}@code{/}@var{d}
@end example
generated.
Changing the value of @code{timeSignatureFraction} also causes a
-fraction to be printed. This grob is @code{TimeSignature}. There are
-many options for the layout of this grob. They are selected through the
-@code{style} grob property. See @file{input/test/time.ly} for examples.
+fraction to be printed. This grob is @internalsref{TimeSignature}.
+
+The actual symbol that's printed can be customized with the style
+property.
+@lilypond[fragment, verbatim, singleline]
+\time 3/4 s2
+\property Staff.TimeSignature \override #'style = #'C
+\time 4/4 s2
+\property Staff.TimeSignature \override #'style = #'()
+\time 4/4 s2
+\property Staff.TimeSignature \override #'style = #'C
+\time 2/2 s2
+@end lilypond
+
+There are many more options for the layout of this grob. They are
+selected through the @code{style} grob property.
+
+@c FIXME: this isn't documented except in example?
+See
+@file{input/test/time.ly} for examples.
@c . {Partial}
@subsection Partial
c4 c4 c4
@end lilypond
-The identifiers @code{\cadenzaOn} and @code{\cadenzaOff} can be used to
-achieve the same effect.
+The identifiers @code{\cadenzaOn} and @code{\cadenzaOff} can be used as
+shortcuts.
@example
\property Score.whichBar = @var{bartype}
@end example
+The following bar types are available
+
+@lilypond[fragment, relative, singleline, verbatim]
+c4
+\bar "|" c
+\bar "" c
+\bar "|:" c
+\bar "||" c
+\bar ":|" c
+\bar ".|" c
+\bar ".|." c
+\bar "|."
+@end lilypond
+
You are encouraged to use @code{\repeat} for repetitions. See
@ref{Repeats}.
@code{\bar }. These settings take precedence over the automatic
@code{whichBar} settings.
-@code{Bar_engraver} creates @code{BarLine} grobs.
+@internalsref{BarLine} grobs are created by the @code{Bar_engraver}.
@c . {Polyphony}
@node Polyphony
which voice should moved horizontally in case of a collision. This can
be done with the identifiers @code{\shiftOff}, @code{\shiftOn},
@code{\shiftOnn}, etc. (which sets the grob property @code{horizontal-shift}
-in @code{NoteColumn}).
+in @internalsref{NoteColumn}).
@lilypond[fragment, verbatim]
\context Staff \notes\relative c''<
@end lilypond
Note head collisions (horizontal shifting of note heads) are handled by
-the @code{NoteCollision} grob. @code{RestCollision} handles vertical
+the @internalsref{NoteCollision} grob. @internalsref{RestCollision} handles vertical
shifting of rests.
-@cindex @code{NoteCollision}
-@cindex @code{RestCollision}
@refbugs
The value of @code{autoBeamSettings} is changed using
@code{\override} and unset using @code{\revert}:
@example
-\property Voice.autoBeamSettings \override #'(@var{BE} @var{N} @var{M} @var{P} @var{Q}) = @var{dur}
-\property Voice.autoBeamSettings \revert #'(@var{BE} @var{N} @var{M} @var{P} @var{Q})
+\property Voice.autoBeamSettings \override #'(@var{BE} @var{P} @var{Q} @var{N} @var{M}) = @var{dur}
+\property Voice.autoBeamSettings \revert #'(@var{BE} @var{P} @var{Q} @var{N} @var{M})
@end example
Here, @var{BE} is the symbol @code{begin} or @code{end}. It determines
whether the rule applies to begin or end-points. The quantity
-@var{N}/@var{M} refers to a time signature (wildcards, `@code{* *}' may
-be entered to designate all time signatures), @var{P}/@var{Q} refers to
-the length of the beamed notes (and `@code{* *}' designates notes of any
-length).
+@var{P}/@var{Q} refers to the length of the beamed notes (and `@code{*
+*}' designates notes of any length), @var{N}/@var{M} refers to a time
+signature (wildcards, `@code{* *}' may be entered to designate all time
+signatures).
For example, if you want automatic beams to end on every quarter note,
you can use the following:
You can also restrict rules to specific time signatures. A rule that
should only be applied in @var{N}/@var{M} time signature is formed by
-replacing the first asterisks by @var{N} and @var{M}. For example, a
+replacing the second asterisks by @var{N} and @var{M}. For example, a
rule for 6/8 time exclusively looks like
@example
\property Voice.autoBeamSettings \override
- #'(begin 6 8 * *) = ...
+ #'(begin * * 6 8) = ...
@end example
If you want a rule to apply to certain types of beams, you can use the
-second pair of asterisks. Beams are classified according to the shortest
+first pair of asterisks. Beams are classified according to the shortest
note they contain. For a beam ending rule that only applies to beams
-with 32nd notes (and no shorter notes), you would use @code{(end * * 1
-32)}.
+with 32nd notes (and no shorter notes), you would use @code{(end 1
+32 * *)}.
@c not true
@c Automatic beams can not be put on the last note in a score.
@lilypond[fragment,relative,verbatim]
\context Staff {
- r4 [r8 g'' a r8] r8 [g | a] r8
+ r4 [r8 g' a r8] r8 [g | a] r8
}
@end lilypond
Whenever an manual beam is busy, the automatic beamer will not produce
@lilypond[fragment,relative,verbatim]
\context Staff {
- [f'8 r16 f g a]
+ [f8 r16 f g a]
[f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
}
@end lilypond
@cindex @code{stemRightBeamCount}
-The beam symbol (grob @code{Voice.Beam}, both for automatic and manual
-beams) can be tweaked through grob-properties @code{height} and
-@code{staff-position}. These specify vertical location and vertical
-span. Both are measured in half staff-spaces, @code{staff-position=0}
-corresponds to the middle staff line.
-
+The beam symbol (grob @internalsref{Beam} in @internalsref{Voice}
+context), both for automatic and manual beams) can be tweaked through
+grob-properties @code{height} and @code{staff-position}. These specify
+vertical location and vertical span. Both are measured in half
+staff-spaces, @code{staff-position=0} corresponds to the middle staff
+line.
Set @code{height} to zero, to get horizontal beams:
@lilypond[fragment,relative,verbatim]
\property Voice.Beam \set #'direction = #1
\property Voice.Beam \set #'height = #0
- [a''8 e' d c]
+ [a'8 e' d c]
@end lilypond
Here's how you'd specify a weird looking beam that instead of being
@lilypond[fragment,relative,verbatim]
\property Voice.Beam \set #'staff-position = #4
\property Voice.Beam \set #'height = #-4
- [c'8 c]
+ [c8 c]
@end lilypond
-@cindex @code{default-neutral-direction}
+
+@c TODO -> why this ref? Document?
+@cindex @code{neutral-direction}
@node Expressive marks
@section Expressive marks
-@c . {Slur}
+@c . {Slurs}
@menu
-* Slur ::
-* Phrasing slur::
+* Slurs ::
+* Phrasing slurs::
* Breath marks::
* Tempo::
-* Text spanner::
+* Text spanners::
@end menu
-@node Slur
-@subsection Slur
-@cindex slur
+@node Slurs
+@subsection Slurs
+@cindex slurs
A slur indicates that notes are to be played bound or @emph{legato}.
They are entered using parentheses:
Slurs avoid crossing stems, and are generally attached to note heads.
However, in some situations with beams, slurs may be attached to stem
ends. If you want to override this layout you can do this through the
-@code{Voice.Slur}'s grob-property @code{attachment}. It's value is a
-pair of symbols, specifying the attachment type of the left and right end points.
+grob-property @code{attachment} of @internalsref{Slur} in
+@internalsref{Voice} context It's value is a pair of symbols, specifying
+the attachment type of the left and right end points.
@lilypond[fragment,relative,verbatim]
\property Voice.Slur \set #'direction = #1
\property Voice.Stem \set #'length = #5.5
- g''8(g)g4
+ g'8(g)g4
\property Voice.Slur \set #'attachment = #'(stem . stem)
g8(g)g4
@end lilypond
@lilypond[fragment,relative,verbatim]
\property Voice.Stem \set #'direction = #1
\property Voice.Slur \set #'direction = #1
- d'32( d'4 )d8..
+ d32( d'4 )d8..
\property Voice.Slur \set #'attachment = #'(stem . stem)
d,32( d'4 )d8..
@end lilypond
Similarly, the curvature of a slur is adjusted to stay clear of note
heads and stems. When that would increase the curvature too much, the
slur is reverted to its default shape. The threshold for this decision
-is in @code{Voice.Slur}'s grob-property @code{beautiful}. It is loosely
+is in @internalsref{Slur}'s grob-property @code{beautiful}. It is loosely
related to the enclosed area between the slur and the notes. Usually,
the default setting works well, but in some cases you may prefer a
curved slur when LilyPond decides for a vertically moved one. You can
@lilypond[verbatim,singleline,relative]
\property Voice.Beam \override #'direction = #-1
\property Voice.Slur \override #'direction = #1
- c'16( a' f' a a f a, )c,
+ c16( a' f' a a f a, )c,
c( a' f' a a f d, )c
\property Voice.Slur \override #'beautiful = #5.0
c( a' f' a a f d, )c
@cindex Adjusting slurs
-@node Phrasing slur
-@subsection Phrasing slur
+@node Phrasing slurs
+@subsection Phrasing slurs
-@cindex phrasing slur
-@cindex phrasing mark
+@cindex phrasing slurs
+@cindex phrasing marks
A phrasing slur (or phrasing mark) connects chords and is used to
indicate a musical sentence. It is started using @code{\(} and @code{\)}
respectively.
@lilypond[fragment,verbatim,center,relative]
- \time 6/4 c''\((d)e f(e)\)d
+ \time 6/4 c' \( ( d ) e f ( e ) \) d
@end lilypond
Typographically, the phrasing slur behaves almost exactly like a normal
-slur. The grob associated with it is @code{Voice.PhrasingSlur}.
+slur. The grob associated with it is @internalsref{PhrasingSlur}, in
+@internalsref{Voice} context.
@node Breath marks
@subsection Breath marks
Breath marks are entered using @code{\breathe}. The result is a
-@code{Voice.BreathingSign} grob.
+@internalsref{BreathingSign} grob in @internalsref{Voice} context.
@lilypond[fragment,relative]
c'4 \breathe d4
\tempo @var{duration} = @var{perminute}
@end example
-For example, @code{\tempo 4 = 76;} requests output with 76 quarter notes
+For example, @code{\tempo 4 = 76} requests output with 76 quarter notes
per minute.
@refbugs
-@node Text spanner
-@subsection Text spanner
-@cindex Text spanner
+@node Text spanners
+@subsection Text spanners
+@cindex Text spanners
-Some textual indications, e.g. rallentando, accelerando, often extend
+Some textual indications, e.g. rallentando or accelerando, often extend
over many measures. This is indicated by following the text with a
dotted line. You can create such texts using text spanners. The syntax
is as follows:
\spanrequest \start "text"
\spanrequest \stop "text"
@end example
-LilyPond will respond by creating a @code{Voice.TextSpanner} grob. The
-string to be printed, as well as the style is set through grob
-properties.
+LilyPond will respond by creating a @internalsref{TextSpanner} grob (typically
+in @internalsref{Voice} context). The string to be printed, as well as the
+style is set through grob properties.
An application---or rather, a hack---is to fake octavation indications.
@lilypond[fragment,relative,verbatim]
@section Ornaments
@cindex Ornaments
@menu
-* Articulation::
+* Articulations::
* Text scripts::
* Grace notes::
* Glissando ::
@end menu
@c . {Articulation}
-@node Articulation
-@subsection Articulation
-@cindex Articulation
+@node Articulations
+@subsection Articulations
+@cindex Articulations
@cindex articulations
@cindex scripts
c''-\rtoe c''-\turn c''-\open c''-\flageolet
c''-\reverseturn c''-\trill c''-\prall c''-\mordent
c''-\prallprall c''-\prallmordent c''-\upprall c''-\downprall
- c''-\thumb c''-\segno c''-\coda
+ c''-\upmordent c''-\downmordent c''-\pralldown c''-\prallup
+ c''-\lineprall c''-\thumb c''-\segno c''-\coda
}
\context Lyrics \lyrics {
accent__ marcato__ staccatissimo__ fermata
rtoe__ turn__ open__ flageolet
reverseturn__ trill__ prall__ mordent
prallprall__ prallmordent__ uprall__ downprall
- thumb__ segno__ coda
+ upmordent__ downmordent__ pralldown__ prallup__
+ lineprall__ thumb__ segno__ coda
}
>
\paper {
Usually the @code{\script} keyword is not used directly. Various
helpful identifier definitions appear in @file{script.ly}.
-Grobs for these objects are @code{Script} and @code{Fingering}.
+Grobs for these objects are @internalsref{Script} and @internalsref{Fingering}.
@refbugs
\relative c' { c4^"longtext" \fatText c4_"longlongtext" c4 }
@end lilypond
-Text scripts are created in form of @code{Voice.TextScript} grobs.
+Text scripts are created in form of @internalsref{TextScript} grobs, in
+@internalsref{Voice} context.
@ref{Text markup} describes how to change the font or access
special symbols in text scripts.
\grace @var{musicexpr}
@end example
-When grace music is interpreted, a score-within-a-score is set up:
-@var{musicexpr} has its own time bookkeeping, and you could (for
-example) have a separate time signature within the grace notes. While in
-this score-within-a-score, you can create notes, beams, slurs, etc.
Unbeamed eighth notes and shorter by default have a slash through the
stem.
@lilypond[fragment,verbatim]
\relative c'' {
\grace c8 c4 \grace { [c16 c16] } c4
- \grace { \property Grace.Stem \override #'flag-style = #'() c16 } c4
+ \grace {
+ \property Voice.Stem \override #'flag-style = #'()
+ c16
+ \property Voice.Stem \revert #'flag-style
+ } c4
}
@end lilypond
-
A grace note expression has duration 0; the next real note is assumed to
be the main note. If you want the note to appear after the main note,
set @code{Voice.graceAlignPosition} to @code{1}.
@refbugs
-At present, slurs or ties from the grace notes to the following notes
-are not supported. Also, nesting @code{\grace} notes is not
-supported. The following may cause run-time errors:
-@example
+Nesting @code{\grace} notes is not supported. The following may cause
+run-time errors: @example
@code{\grace @{ \grace c32 c16 @} c4}
@end example
Since the meaning of such a construct is unclear, we don't consider this
Ending a staff or score with grace notes may also generate a run-time
error, since there will be no main note to attach the grace notes to.
-Combining grace notes and clef changes will prints note heads on
-erroneous vertical positions.
-
-The present implementation of grace notes is not robust and generally
-kludgey. We expect it to change after LilyPond 1.4. Syntax changes might
-also be implemented.
-
-
-
@menu
* Glissando ::
* Dynamics::
@cindex @code{\glissando}
-A glissando line (grob @code{Voice.Glissando}) can be requested by attaching a
-@code{\glissando} to a note:
+A glissando line (grob @internalsref{Glissando}) can be requested by
+attaching a @code{\glissando} to a notte:
@lilypond[fragment,relative,verbatim]
- c''-\glissando c'
+ c'-\glissando c'
@end lilypond
@refbugs
@code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}.
@lilypond[verbatim,singleline,fragment,relative]
- c''\ppp c\pp c \p c\mp c\mf c\f c\ff c\fff
+ c'\ppp c\pp c \p c\mp c\mf c\f c\ff c\fff
c2\sf c\rfz
@end lilypond
\context Voice {
\property Voice.crescendoText = "cresc."
\property Voice.crescendoSpanner = #'dashed-line
- a''2\mf\< a a \!a
+ a'2\mf\< a a \!a
}
@end lilypond
@cindex diminuendo
-Dynamics are grobs of @code{Voice.DynamicText} and
-@code{Voice.Hairpin}. They are put together on
-@code{Voice.DynamicLineSpanner} to align them vertically.
+Dynamics are grobs of @internalsref{DynamicText} and
+@internalsref{Hairpin}. They are put together on
+@internalsref{DynamicLineSpanner} to align them vertically.
@c . {Repeats}
Make tremolo beams.
@item percent
-Make measure repeats. These look like percent signs.
+Make beat or measure repeats. These look like percent signs.
@end table
* Repeat syntax::
* Manual repeat commands::
* Tremolo repeats::
-* Tremolo subdivision::
+* Tremolo subdivisions::
* Measure repeats::
@end menu
}
@end lilypond
+@subsection Unfolding repeats for MIDI output.
+
+@cindex expanding repeats
+
+See @file{input/test/unfold-all-repeats.ly}.
+
+
@refbugs
Notice that timing information is not remembered at the start of an
is to be expected that more functionality -- especially for the MIDI
backend -- will be implemented at some point in the future.
+Volta repeats are printed over all staves in a score. You must turn them
+off explicitly, for example by doing
+@example
+ \property Staff.VoltaBracket = \turnOff
+@end example
+in all but the top staff.
+
@node Manual repeat commands
@subsection Manual repeat commands
@end lilypond
-Repeats brackets are @code{Staff.VoltaBracket} grobs.
+Repeats brackets are @internalsref{VoltaBracket} grobs.
@node Tremolo repeats
@subsection Tremolo repeats
}
@end lilypond
-Tremolo beams are @code{Voice.Beam} grobs. Single stem tremolos are
-@code{Voice.StemTremolo}.
+Tremolo beams are @internalsref{Beam} grobs. Single stem tremolos are
+@internalsref{StemTremolo}.
@refbugs
At present, the spacing between tremolo beams is not regular, since the
spacing engine does not notice that not all notes are printed.
-@node Tremolo subdivision
-@subsection Tremolo subdivision
+@node Tremolo subdivisions
+@subsection Tremolo subdivisions
@cindex tremolo marks
@cindex @code{tremoloFlags}
@lilypond[verbatim,fragment,center]
c'2:8 c':32 | c': c': |
@end lilypond
-Using this mechanism pays off when you enter many tremolos, since the
-default argument saves typing.
@refbugs
In the @code{percent} style, a note pattern can be repeated. It is
printed once, and then the pattern is replaced with a special sign.
-Patterns of a one and two measures are replaced by percent signs,
+Patterns of a one and two measures are replaced by percent-like signs,
patterns that divide the measure length are replaced by slashes.
@lilypond[verbatim,singleline]
}
@end lilypond
-The signs are represented by these grobs: @code{Voice.RepeatSlash} and
-@code{Voice.PercentRepeat} and @code{Voice.DoublePercentRepeat}.
+The signs are represented by these grobs: @internalsref{RepeatSlash} and
+@internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}.
@refbugs
@menu
-* Rhythmic staffs::
+* Rhythmic staves::
@end menu
-@node Rhythmic staffs
-@subsection Rhythmic staffs
+@node Rhythmic staves
+@subsection Rhythmic staves
Sometimes you might want to show only the rhythm of a melody. This can
be done with the rhythmic staff. All pitches of notes on such a staff
@node Piano music
@section Piano music
-Piano music is an odd type of notation. Piano staffs are two normal
-staffs coupled with a brace. The staffs are largely independent, but
-sometimes voices can cross between the two staffs. The
-@code{PianoStaff} is especially built to handle this cross-staffing
-behavior. In this section we discuss the @code{PianoStaff} and some
+Piano music is an odd type of notation. Piano staves are two normal
+staves coupled with a brace. The staves are largely independent, but
+sometimes voices can cross between the two staves. The
+@internalsref{PianoStaff} is especially built to handle this cross-staffing
+behavior. In this section we discuss the @internalsref{PianoStaff} and some
other pianistic peculiarities.
@menu
* Manual staff switches::
* Pedals::
* Arpeggio::
-* Voice follower line::
+* Voice follower lines::
@end menu
@end example
This will switch the interpretation context of @var{musicexp} between a
@var{contexttype} named @code{up} and @code{down}. Typically, you use
-@code{Staff} for @var{contexttype}. The autochanger switches on basis
+@internalsref{Staff} for @var{contexttype}. The autochanger switches on basis
of pitch (central C is the turning point), and it looks ahead skipping
over rests to switch rests in advance.
@cindex manual staff switches
@cindex staff switch, manual
-Voices can be switched between staffs manually, using the following command:
+Voices can be switched between staves manually, using the following command:
@example
\translator Staff = @var{staffname} @var{music}
@end example
@code{\treCorde}, @code{\sostenutoDown} and @code{\sostenutoUp}.
These identifiers are shorthands for spanner commands of the types
-@code{Sustain}, @code{UnaCorda} and @code{Sostenuto}:
+@internalsref{Sustain}, @internalsref{UnaCorda} and @internalsref{Sostenuto}:
@lilypond[fragment,verbatim]
c''4 \spanrequest \start "Sustain" c''4
The symbols that are printed can be modified by setting
@code{pedal@var{X}Strings}, where @var{X} is one of the pedal
-types. Refer to the generated documentation for more information.
+types. Refer to the generated documentation of @rgrob{PianoPedal} for
+more information.
@refbugs
@lilypond[fragment,relative,verbatim]
- \context Voice <c'\arpeggio e g c>
+ \context Voice <c\arpeggio e g c>
@end lilypond
-When an arpeggio crosses staffs in piano music, you attach an arpeggio
-to the chords in both staffs, and set
+When an arpeggio crosses staves in piano music, you attach an arpeggio
+to the chords in both staves, and set
@code{PianoStaff.connectArpeggios}.
@lilypond[fragment,relative,verbatim]
\context PianoStaff <
\property PianoStaff.connectArpeggios = ##t
- \context Voice = one { <c''\arpeggio e g c> }
+ \context Voice = one { <c'\arpeggio e g c> }
\context Voice = other { \clef bass <c,,\arpeggio e g>}
>
@end lilypond
-This command creates @code{Voice.Arpeggio} grobs. Cross staff arpeggios
-are @code{PianoStaff.Arpeggio}.
+This command creates @internalsref{Arpeggio} grobs. Cross staff arpeggios
+are @code{PianoStaff.Arpeggio}. @internalsref{Arpeggio}
+
+To add an arrow head to explicitly specify the direction of the
+arpeggio, you should set the arpeggio grob property
+@code{arpeggio-type}.
+
+@lilypond[fragment,relative,verbatim]
+ \context Voice {
+ \property Voice.Arpeggio \override #'arpeggio-direction = #1
+ <c\arpeggio e g c>
+ \property Voice.Arpeggio \override #'arpeggio-direction = #-1
+ <c\arpeggio e g c>
+ }
+@end lilypond
+
+@ignore
+A square bracket on the left indicates that the player should not
+arpeggiate the chord.
+
+@lil ypond[fragment,relative,verbatim]
+ \context PianoStaff <
+ \property PianoStaff.connectArpeggios = ##t
+ \property PianoStaff.Arpeggio \override #'arpeggio-direction = #'bracket
+ \context Voice = one { <c'\arpeggio e g c> }
+ \context Voice = other { \clef bass <c,,\arpeggio e g>}
+ >
+@ e nd lilypond
+@end ignore
+
@refbugs
-@node Voice follower line
-@subsection Voice follower line
+@node Voice follower lines
+@subsection Voice follower lines
@cindex follow voice
@cindex staff switching
\context PianoStaff <
\property PianoStaff.followVoice = ##t
\context Staff \context Voice {
- c'1
+ c1
\translator Staff=two
b2 a
}
>
@end lilypond
-The associated grob is @code{Voice.VoiceFollower}.
+The associated grob is @internalsref{VoiceFollower}.
@node Lyrics
@code{He_could4 not4}. All unquoted underscores are converted to
spaces.
-The precise definition of this mode is in @ref{Lyrics mode
+The precise definition of this mode can be found in @ref{Lyrics mode
definition}.
@c . {Printing lyrics}
@subsection Printing lyrics
@cindex lyrics
-Lyrics are printed by interpreting them in the @code{Lyrics} context.
+Lyrics are printed by interpreting them in the @internalsref{Lyrics} context.
+@c Maybe more pedagogical to avoid \addlyrics in this first example? /MB
+@c Add tied and beamed melismata too.
@lilypond[verbatim,singleline]
-\addlyrics \notes \relative c' {
- \time 7/4
- \property Staff.automaticMelismata = ##t
- d'2 c4 b16 ( a g a b a b ) c a2
- b2 c4 b8 ( a16 g ) a4 g2 }
- \context Lyrics \lyrics {
- Join us now __ and
- share the soft -- ware; }
+\addlyrics
+ \notes \relative c' {
+ \time 7/4
+ \property Staff.automaticMelismata = ##t
+ d'2 c4 b16 ( a g a b a b ) c a2
+ b2 c4 b8 ( a16 g ) a4 g2 }
+ \context Lyrics \lyrics {
+ Join us now __ and
+ share the soft -- ware; }
@end lilypond
Notes and syllable durations are matched automatically. This is
accomplished using @code{\addlyrics}, which is documented in
@ref{Automatic syllable durations}. Setting @code{automaticMelismata} in
-the melody staff will cause slurs to be interpreted as melismata.
+the melody staff will cause tied, slurred or beamed notes to be
+interpreted as melismata.
The Lyric syllables are @code{LyricsVoice.LyricSyllable} grobs.
@cindex printing chord names
@cindex chord names
@cindex chords
-@cindex @code{ChordNames}
-
-For displaying printed chord names, use the @code{ChordNames} context.
+For displaying printed chord names, use the @internalsref{ChordNames} context.
The chords may be entered either using the notation described above, or
directly using simultaneous music.
You can make the chord changes stand out by setting
@code{ChordNames.chordChanges} to true. This will only display chord
-names when there's a change in the chords scheme and at the start of the
-line.
+names when there's a change in the chords scheme and at the start of a
+new line.
@lilypond[verbatim]
scheme = \chords {
* Sound output for transposing instruments::
* Multi measure rests::
* Automatic part combining::
-* Hara kiri staffs::
+* Hara kiri staves::
@end menu
@c . {Rehearsal marks}
@cindex Rehearsal marks
@cindex mark
@cindex @code{\mark}
-@cindex @code{Mark_engraver}
+
@example
\mark @var{unsigned}
}
@end lilypond
-The grob is @code{Score.RehearsalMark}. See
+The grob is @internalsref{RehearsalMark} in @internalsref{Score} context. See
@code{input/test/boxed-molecule.ly} if you need boxes around the marks.
@node Bar numbers
@subsection Bar numbers
-Bar numbers (grob: @code{BarNumber}) are printed at the start of the
-line. See @code{input/test/boxed-molecule.ly} for boxed bar numbers.
+
+@cindex bar numbers
+@cindex measure numbers
+@cindex currentBarNumber
+
+Bar numbers are @internalsref{BarNumber} grobs. They are printed at the
+start of the line. The number itself is a property that can be set by
+modifying the @code{currentBarNumber} property, i.e.
+@example
+ \property Score.currentBarNumber = #217
+@end example
+
+If you want boxed bar numbers, see the example file
+@code{input/test/boxed-molecule.ly}.
@refbugs
@node Sound output for transposing instruments
@subsection Sound output transposing instruments
-When you want to play a score containing transposed and untransposed
+When you want to make a MIDI file from a score containing transposed and
+untransposed
instruments, you have to instruct LilyPond the pitch offset (in
semitones) for the transposed instruments. This is done using the
@code{transposing} property. It does not affect printed output.
\property Staff.transposing = #-2
@end example
-
@c . {Multi measure rests}
@node Multi measure rests
@subsection Multi measure rests
@cindex whole rests for a full measure
+The grob for this object is @internalsref{MultiMeasureRest}.
+
@refbugs
-Currently, there is no way to condense multiple rests into a single
-multimeasure rest.
+Currently, there is no way to automatically condense multiple rests into
+a single multimeasure rest.
@cindex condensing rests
There are a number of other properties that you can use to tweak the
behavior of part combining, refer to the automatically generated
-documentation. Look at the documentation of the responsible engravers,
-@code{Thread_devnull_engraver}, @code{Voice_devnull_engraver} and
-@code{A2_engraver}.
+documentation of @reng{Thread_devnull_engraver} and
+@reng{Voice_devnull_engraver}. Look at the documentation of the
+responsible engravers, @code{Thread_devnull_engraver},
+@code{Voice_devnull_engraver} and @code{A2_engraver}.
@refbugs
@cindex @code{Voice_engraver}
@cindex @code{A2_engraver}
-@node Hara kiri staffs
-@subsection Hara kiri staffs
+@node Hara kiri staves
+@subsection Hara kiri staves
-In orchestral scores, staffs that only have rests are usually removed.
+In orchestral scores, staff lines that only have rests are usually removed.
This saves some space. LilyPond also supports this through the hara
kiri@footnote{Hara kiri, also called Seppuku, is the ritual suicide of
the Japanese Samourai warriors.} staff. This staff commits suicide when
not disappear when it contains normal rests, you must use multi measure
rests.
-The hara kiri staff is specialized version of the Staff context. It is
-available as the context identifier @code{\HaraKiriStaffContext}.
-Observe how the second staff in this example disappears in the second
-line.
+The hara kiri staff is specialized version of the @internalsref{Staff}
+context. It is available as the context identifier
+@code{\HaraKiriStaffContext}. Observe how the second staff in this
+example disappears in the second line.
@lilypond[verbatim]
\score {
}
@end lilypond
-Custodes were frequently used in music notation until the 16th century.
+Custodes were frequently used in music notation until the 17th century.
There were different appearances for different notation styles.
Nowadays, they have survived only in special forms of musical notation
such as via the @emph{editio vaticana} dating back to the beginning of
the 20th century.
For typesetting custodes, just put a @code{Custos_engraver} into the
-@code{StaffContext} when declaring the @code{\paper} block. In this
+@internalsref{Staff} context when declaring the @code{\paper} block. In this
block, you can also globally control the appearance of the custos symbol
by setting the custos @code{style} property. Currently supported styles
are @code{vaticana}, @code{medicaea}, @code{hufnagel} and
@end lilypond
The @code{\property} assignment effectively empties the definition of
-the Stem object. One of the effects is the recipe of how it should be
+the Stem object. One of the effects is that the recipe of how it should be
printed is erased, with the effect of rendering it invisible. The above
assignment is available as a standard identifier, for the case that you
find this useful:
The definition of a grob is actually a list of default grob
properties. For example, the definition of the Stem grob (available in
@file{scm/grob-description.scm}), defines the following values for
-@code{Stem}
+@internalsref{Stem}
@example
(thickness . 0.8)
@subsection What to tune?
This all tells you how to tune grobs, but you don't know what variables
-to set? The question is not answered in this manual (although you may
-encounter some examples.).
+to set? The question is not answered in this part of the manual
+(although you may encounter some examples.).
Grob properties are tied directly to the implementation of LilyPond, and
they are thus a moving target. Documentation of such variables is in the
signs) and @code{typewriter}
@item font-shape
- A symbol indicating the shape of the font, a finer gradation than
- font-family. Choices are @code{italic}, @code{caps} and @code{upright}
+ A symbol indicating the shape of the font, there are typically several
+ font shapes available for each font family. Choices are @code{italic},
+ @code{caps} and @code{upright}
@item font-series
-A symbol indicating the series of the font. @code{font-series} form a
-finer gradation
- than @code{font-shape}. Choices are @code{medium} and @code{bold}.
+A symbol indicating the series of the font. There are typically several
+font series for each font family and shape. Choices are @code{medium}
+and @code{bold}.
@item font-relative-size
A number indicating the size relative the standard size. For example,
head: markup | (markup+)
markup-item: property | abbrev
property: (@var{key} . @var{value})
-abbrev: @code{columns lines roman music bold italic named super sub
-overstrike text}
- @code{finger volta timesig mmrest mark script large Large dynamic}
+abbrev: @code{columns lines roman music bold italic named super sub}
+ @code{overstrike text finger volta timesig mmrest mark script}
+ @code{large Large dynamic}
@end example
The markup is broken down and converted into a list of grob properties,
which are prepended to the property list. The @var{key}-@var{value}
pair is a grob property. A list of properties available is included in
-the generated documentation for @code{text-interface}
+the generated documentation for @rint{Text_interface}.
The following abbreviations are currently defined:
@table @code
a b c b \blanknotes c \unblanknotes d
}
}
-@end lilypond
+@end lilypond
+This method makes the grobs invisible but they still take the normal space.
+To remove all traces of the grob, you can redefine the function
+typesetting them:
+@lilypond[verbatim]
+\score {
+ \notes\relative c'' {
+ \key c \minor
+ \time 6/4
+ as bes c bes c d \break
+ \property Staff.KeySignature \override #'molecule-callback = #'()
+ as bes c bes c d
+ }
+ \paper{linewidth=5.0\cm indent=0}
+}
+@end lilypond
-A very rigorous way of removing grobs from the output is to remove the
-engraver that creates them. For example,
+A very rigorous way of removing grobs from the whole score is to remove
+the engraver that creates them. For example,
-@lilypond[verbatim]
+@lilypond[singleline,verbatim]
\score {\notes { c'4 d'8 e'8 g2 }
\paper { \translator {
\VoiceContext
}
@end lilypond
-
@node Dirty tricks
@subsection Dirty tricks
@cindex embedded tex
It is possible to use @TeX{} commands in the strings, but this should be
-avoided because this makes it impossible for LilyPond to compute the
+avoided because it makes it impossible for LilyPond to compute the
exact length of the string, which may lead to collisions. Also, @TeX{}
commands won't work with direct PostScript output (see @ref{PostScript
output}).
@lilypond[fragment,relative,verbatim]
- a''^"3 $\\times$ \\`a deux"
+ a'^"3 $\\times$ \\`a deux"
@end lilypond
You can also use raw PostScript commands embedded in text scripts. This
music notation. The syntax is
@example
- @code{\paper @{} @var{[paperidentifier]} @var{items} @code{@}}
+ @code{\paper @{} [@var{paperidentifier}] @var{items} @code{@}}
@end example
where each of the items is one of
@cindex @code{interscoreline}
@item @code{interscoreline}
- Sets the spacing between systems.
-Not set by default.
+ Sets the spacing between systems. The default is 16pt.
+
@cindex @code{interscorelinefill}
@item @code{interscorelinefill}
@cindex page breaks
@cindex breaking pages
-
Page breaks are normally computed by @TeX{}, so they are not under
direct control of LilyPond. However, you can insert a commands into the
-@file{.tex} output to instruct @TeX{} where to break pages. For more
-details, see the example file @file{input/test/between-systems.ly}
+@file{.tex} output to instruct @TeX{} where to break pages, by inserting
+the command @code{\newpage}
+@cindex @code{\newpage}
+
+@example
+ \newpage
+@end example
+@c why do so difficult?
+@c maybe should explain contents of between-system.ly,
+@c but not now, we're talking about page breaks here.
+@c For more
+@c details, see the example file @file{input/test/between-systems.ly}
@c . {Output scaling}
@refbugs
+
There is no mechanism to select magnification of particular fonts,
meaning that you don't have access to continuously scaled fonts.
@refbugs
-Titling is not generated.
+Titling is not generated unless you use @file{ly2dvi}.
@node PostScript output
then written to disk in postscript, @TeX{} or ASCII art. Before it is
written, the page description is represented as Scheme expressions. You
can also dump these Scheme expressions to a file, which may be
-convenient for debugging output routines. This done with the Scheme
+convenient for debugging output routines. This is done with the Scheme
output format
@example
It's easy to change the glyphs, though; if you think you can do better,
have a look at @file{mf/*.af}.
-Lots of resizable symbols such as slurs, ties, tuplets are missing.
+Lots of resizable symbols such as slurs, ties and tuplets are missing.
The poor looks of most ASCII Art output and its limited general
-usefulness make that ASCII Art output has a low priority; it may be
+usefulness gives ASCII Art output a low priority; it may be
dropped in future versions.
@c . {Sound}
-
+@c FIXME: Note entry vs Music entry at top level menu is confusing.
@c . {Music entry}
@node Music entry
@section Music entry
* Point and click::
@end menu
-One of the applications of LilyPond is to enter music from existing
-written or printed material. When you're doing this kind of copying
-work, you can easily make mistakes. This section deals with tricks and
-features that help you enter music, and find and correct mistakes.
+When entering music with LilyPond, it is easy to introduce errors. This
+section deals with tricks and features that help you enter music, and
+find and correct mistakes.
@c . {Relative}
@node Relative
@end lilypond
If the preceding item is a chord, the first note of the chord is used
-to determine the first note of the next chord. But other notes
+to determine the first note of the next chord. However, other notes
within the second chord are determined by looking at the immediately
preceding note.
\time 3/4 c2 e4 | g2.
@end example
+
+
+@cindex skipTypesetting
+
+Failed bar checks are most often caused by entering incorrect
+durations. Incorrect durations often completely garble up the score,
+especially if it is polyphonic, so you should start correcting the score
+by scanning for failed bar checks and incorrect durations. To speed up
+this process, you can use @code{skipTypesetting} (See @ref{Skipping
+corrected music})). Bar
+
+
@c . {Point and click}
@node Point and click
@subsection Point and click
#(set! point-and-click line-column-location)
@end example
+One final hint: if you correct large files with point-and-click, then
+start correcting at the end of the file. When you start at the top, and
+insert one line, all subsequent locations will be off by a line.
@refbugs
will complain about not finding @code{src:X:Y} files. Those complaints
are harmless, and can be ignored.
-When using @code{line-colum-location}, the cursor will be one off; it
-will not jump to the exact note that you clicked, but to the next one.
-
-[FIXME]
-
@node Skipping corrected music
@section Skipping corrected music
LilyPond. During the interpretation phase of LilyPond (when it prints
"interpreting music"), the music expression in a @code{\score} block is
interpreted in time order. This is the same order that humans hear and
-play music.
+play the music.
-During this interpretation, the interpretation context is holds the
+During this interpretation, the interpretation context holds the
state for the current point within the music. It contains information
like
the measure, etc.?
@end itemize
-Contexts are grouped hierarchically: A @code{Voice} context is
-contained in a @code{Staff} context (because a staff can contain
-multiple voices at any point), a @code{Staff} context is contained in
-@code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context.
+Contexts are grouped hierarchically: A @internalsref{Voice} context is
+contained in a @internalsref{Staff} context (because a staff can contain
+multiple voices at any point), a @internalsref{Staff} context is contained in
+@internalsref{Score}, @internalsref{StaffGroup}, or @internalsref{ChoirStaff} context.
Contexts associated with sheet music output are called @emph{notation
contexts}, those for sound output are called @emph{performance
-contexts}.
+contexts}. The default definitions of the standard notation and
+performance contexts can be found in @file{ly/engraver.ly} and
+@file{ly/performer.ly}, respectively.
@node Creating contexts
@node Default contexts
@subsection Default contexts
-Most music expressions don't need @code{\context}: they inherit the
+Most music expressions don't need an explicit @code{\context}
+declaration: they inherit the
notation context from their parent. Each note is a music expression, and
as you can see in the following example, only the sequential music
enclosing the three notes has an explicit context.
There are some quirks that you must keep in mind when dealing with
defaults:
-First, every top-level music is interpreted by the Score context, in other
+First, every top level music is interpreted by the Score context, in other
words, you may think of @code{\score} working like
@example
\score @{
@}
@end example
-Second, sequential music follows the contexts of its
-``children''. Consider the following example.
+Second, contexts are created automatically to be able to interpret the
+music expressions. Consider the following example.
@lilypond[verbatim, singleline]
\score { \context Score \notes { c'4 ( d' )e' } }
without @code{\context}. For every note, a separate staff is
instantiated.
+@cindex explicit context
+@cindex starting with chords
+@cindex chords, starting with
+
@lilypond[verbatim, singleline]
\score { \notes <c'4 es'> }
@end lilypond
Properties that are set in one context are inherited by all of the
contained contexts. This means that a property valid for the
-@code{Voice} context can be set in the @code{Score} context (for
-example) and thus take effect in all @code{Voice} contexts.
+@internalsref{Voice} context can be set in the @internalsref{Score} context (for
+example) and thus take effect in all @internalsref{Voice} contexts.
Properties can be unset using the following expression:
@example
To simplify editing translators, all standard contexts have standard
identifiers called @var{name}@code{Context}, e.g. @code{StaffContext},
-@code{VoiceContext}.
+@code{VoiceContext}, see @file{ly/engraver.ly}.
@node Defining new contexts
@subsection Defining new contexts
If you want to build a context from scratch, you must also supply the
following extra information:
@itemize @bullet
- @item A name, specified by @code{\name @var{contextname};}.
+ @item A name, specified by @code{\name @var{contextname}}.
@item A cooperation module. This is specified by @code{\type
-@var{typename};}.
+@var{typename}}.
@end itemize
This is an example:
End-users generally don't need this command.
@item @code{\accepts} @var{contextname}
- Add @var{contextname} to the list of context this context can
- contain. The first listed context is the context to create by
- default.
+ Add @var{contextname} to the list of contexts this context can
+ contain in the context hierarchy. The first listed context is the
+ context to create by default.
@item @code{\denies}. The opposite of @code{\accepts}. Added for
completeness, but is never used in practice.
@item @code{\name} @var{contextname}
- This sets name of the context, e.g. @code{Staff}, @code{Voice}. If
- the name is not specified, the translator won't do anything.
+ This sets the type name of the context, e.g. @internalsref{Staff},
+ @internalsref{Voice}. If the name is not specified, the translator won't do
+ anything.
@end itemize
In the @code{\paper} block, it is also possible to define translator
@subsubsection Default output
Default values for the @code{\paper} and @code{\midi} block are set by
-entering such a block at top-level.
+entering such a block at the top level.
@c . {Header}
@subsubsection Header
can also appear in a @code{\score} block. Tools like @code{ly2dvi} can
use this information for generating titles. Key values that are used by
@code{ly2dvi} are: title, subtitle, composer, opus, poet, instrument,
-metre, arranger, piece and tagline.
+meter, arranger, piece and tagline.
@cindex @code{ly2dvi}
@subsubsection Default output
-A @code{\midi} or @code{\paper} block at top-level sets the default
+A @code{\midi} or @code{\paper} block at top level sets the default
paper block for all scores that lack an explicit paper block.
@c . {Identifiers}
@subsection Identifiers
@cindex Identifiers
-All of the information in a LilyPond input file, is represented as a
-Scheme value. In addition to normal Scheme data types (such as pair,
-number, boolean, etc.), LilyPond has a number of specialized data types,
+@ignore
+ What has this section got to do with identifiers?
+ It seems more appropriate in the introduction to Chapter 4,
+ "Internals".
+
+ /MB
+@end ignore
+
+All of the information in a LilyPond input file, is internally
+represented as a Scheme value. In addition to normal Scheme data types
+(such as pair, number, boolean, etc.), LilyPond has a number of
+specialized data types,
@itemize @bullet
@item Input
@cindex @code{\lyrics}
To simplify entering notes, lyrics, and chords, LilyPond has three
-special input modes on top of the default mode: note, lyrics and chords
-mode. These input modes change the way that normal, unquoted words are
-interpreted: for example, the word @code{cis} may be interpreted as a
-C-sharp, as a lyric syllable `cis' or as a C-sharp major triad
-respectively.
+special input modes in addition to the default mode: note, lyrics and
+chords mode. These input modes change the way that normal, unquoted
+words are interpreted: for example, the word @code{cis} may be
+interpreted as a C-sharp, as a lyric syllable `cis' or as a C-sharp
+major triad respectively.
-A mode switch is entered as a compound music expressions
+A mode switch is entered as a compound music expression
@example
@code{\notes} @var{musicexpr}
@code{\chords} @var{musicexpr}
LilyPond contains a Scheme interpreter (the GUILE library) for
-internal use. In some places Scheme expressions also form valid syntax:
+internal use. In some places, Scheme expressions also form valid syntax:
wherever it is allowed,
@example
#@var{scheme}
expressions. The first one is a symbol (@code{foobar}), the second one
an integer (namely, 3).
-In-line scheme may be used at top level. In this case the result is
+In-line scheme may be used at the top level. In this case the result is
discarded.
Scheme is a full-blown programming language, and a full discussion is