+
@c Note:
@c
@c A menu is needed before every deeper *section nesting of @nodes
@c to automagically fill in these menus
@c before saving changes
-@c.{Reference Manual}
+
+@ignore
+ TODO:
+
+ fix all FIXMEs
+
+ Rhythm staff (clef, x-notehead)
+
+@end ignore
+
+
+@c .{Reference Manual}
@node Reference Manual
@chapter Reference Manual
+
+This document describes GNU LilyPond and its input format. This document
+has been revised for LilyPond 1.3.131
+
+
+
@menu
* Overview::
-* Music constructs::
-* Modifying music::
* Note entry::
-* Note specification::
* Music notation::
-* Lyrics entry::
-* Chord entry::
+* Polyphony::
+* Spanners::
+* Repeats::
+* Piano music::
+* Lyrics::
+* Chords::
+* Writing parts::
+* Custodes::
+* Tuning output::
* Page layout::
* Sound::
* Music entry::
* Engravers::
-* Lexer innards::
-* Unsorted::
+* Syntactic details::
@end menu
-@c. {Overview}
+@c . {Overview}
@node Overview
@section Overview
-This document
-describes the the GNU LilyPond input format This format represents a
-piece of music in an elegant way, but contains enough information for
-both automatic typesetting and automatic performances.
-
-This document has been revised for LilyPond 1.3.125
-
-[todo: ]
-
-There are two things to note here. The format contains musical
-concepts like pitches and durations, instead of symbols and positions:
-the input format tries to capture the meaning of @emph{music}, and not
-notation. Second, the format tries to be @emph{context-free}:
-a note will sound the same regardless of the current time signature,
-the key, etc.
The purpose of LilyPond is explained informally by the term `music
typesetter'. This is not a fully correct name: not only does the
program print musical symbols, it also makes esthetic decisions. All
-symbols and their placement is @emph{generated} from a high-level musical
-description. In other words, LilyPond would be best
-described by `music compiler' or `music to notation compiler'.
+symbols and their placement is @emph{generated} from a high-level
+musical description. In other words, LilyPond would be best described
+by `music compiler' or `music to notation compiler'.
+
+Internally, LilyPond is written in a mixture of Scheme and C++. Most of
+the algorithms and low-level routines are written in C++, but these low
+level components are glued together using Scheme data
+structures. LilyPond is linked to GUILE, GNU's Scheme library for
+extension.
+
+When lilypond is run to typeset sheet music, the following happens:
+
+@itemize @bullet
+@item GUILE Initialization: various scheme files are read
+@item parsing: first standard .ly initialization files are read, and
+then the user @file{.ly} file is read.
+@item interpretation: the music in the file is processed "in playing
+order", i.e. in the same order as your eyes scan sheet music, and in the
+same order that you hear the notes play.
+
+@item typesetting:
+in this step, the results of the interpretation, a typesetting
+specification, is solved.
+
+@item the visible results ("virtual ink") is written to the output file.
+@end itemize
-LilyPond input can be classified into three types:
+These stages, involve data of a specific type: during parsing,
+@strong{Music} objects are created. During the interpretation,
+@strong{context} is constructed, and with this context af network of
+@strong{graphical objects} (``grobs'') is created. The grobs contain
+unknown variables, and the network forms a set of equations. After
+solving the equations and filling in these variables, the printed output
+(in the form of @strong{molecules}) is written to an output file.
+
+These threemanship of tasks (parsing, translating, typesetting) and
+data-structures (music, context, graphical objects) permeates the entire
+design of the program. This manual is ordered in terms of user
+tasks. With each concept will be explained to which of the three parts
+it belongs.
+
+LilyPond input can be classified into three types:
@itemize @bullet
@item musical expressions: a musical expression is some combination of
rest, notes, lyrics
@end itemize
-@c. {Music constructs}
-@node Music constructs
-@section Music constructs
-@cindex Music constructs
+
+
+@c . {Note entry}
+@node Note entry
+@section Note entry
+@cindex Note entry
+
@menu
-* Music expressions::
-* Sequential music::
-* Simultanious music::
-* Compound music expressions::
-* Grace music::
-* Explicit atomic music::
+* Notes mode::
+* Pitches::
+* Defining pitch names::
+* Durations::
+* Notes::
+* Rests::
+* Skip::
@end menu
-@c. {Music expressions}
-@node Music expressions
-@subsection Music expressions
+@c . {Notes mode}
+@node Notes mode
+@subsection Notes mode
-@cindex music expressions
+@cindex note mode
-Music in LilyPond is entered as a music expression. Notes, rests,
-lyric syllables are music expressions (the atomic
-expressions),
-@cindex atomic music expressions
-and you can combine music expressions to form new ones. This example
-forms a compound expressions out of the quarter @code{c} note and a
-@code{d} note:
+@cindex @code{\notes}
+Note mode is introduced by the keyword
+@code{\notes}. In Note mode, words can only
+contain alphabetic characters. If @code{word} is encountered,
+LilyPond first checks for a notename of @code{word}. If no
+notename is found, then @code{word} is treated as a string.
-@example
-\sequential @{ c4 d4 @}
-@end example
+Since combinations of numbers and dots are used for indicating
+durations, it is not possible to enter real numbers in this mode.
-The meaning of this compound expression is to play the @code{c}
-first, and then the @code{d} (as opposed to playing them
-simultaneously, for instance).
+@cindex Notes mode
-Atomic music expression are discussed in
-subsection @ref{Atomic music expressions}. Compound music expressions are
-discussed in subsection @ref{Compound music expressions}.
+@c . {Pitches}
+@node Pitches
+@subsection Pitches
+@cindex Pitch names
+@cindex Note specification
+@cindex pitches
+@cindex entering notes
-@c. {Sequential music}
-@node Sequential music
-@subsection Sequential music
-@cindex Sequential music
-@cindex @code{\sequential}
-@cindex sequential music
+The verbose syntax for pitch specification is
+@cindex @code{\pitch}
@example
- \sequential @code{@{} @var{musicexprlist} @code{@}}
+ \pitch @var{scmpitch}
@end example
-This means that list should be played or written in sequence, i.e.,
-the second after the first, the third after the second. The duration
-of sequential music is the the sum of the durations of the elements.
-There is a shorthand, which leaves out the keyword:
-
-@example
-@cindex @code{<}
-@cindex @code{>}
+@var{scmpitch} is a pitch scheme object, see @ref{Pitch data type}.
- @code{@{} @var{musicexprlist} @code{@}}
-@end example
+In Note and Chord mode, pitches may be designated by names. The default
+names are the Dutch note names. The notes are specified by the letters
+@code{c} through @code{b}, where @code{c} is an octave below middle C
+and the letters span the octave above that C. In Dutch,
+@cindex note names, 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 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 will be accepted.
-@c. {Simultanious music}
-@node Simultanious music
-@subsection Simultanious music
-@cindex Simultanious music
-@cindex @code{\simultaneous}
+LilyPond has predefined sets of notenames for various other languages.
+To use them, simply include the language specific init file. For
+example: @code{\include "english.ly"}. The available language files and
+the names they define are:
-@example
- \simultaneous @code{@{} @var{musicexprlist} @code{@}}
-@end example
+@example
+ Note Names sharp flat
+nederlands.ly c d e f g a bes b -is -es
+english.ly c d e f g a bf b -s/-sharp -f/-flat
+deutsch.ly c d e f g a b h -is -es
+norsk.ly c d e f g a b h -iss/-is -ess/-es
+svenska.ly c d e f g a b h -iss -ess
+italiano.ly do re mi fa sol la sib si -d -b
+catalan.ly do re mi fa sol la sib si -d/-s -b
+@end example
-It constructs a music expression where all of its arguments start at
-the same moment. The duration is the maximum of the durations of the
-elements. The following shorthand is a common idiom:
+@cindex @code{'}
+@cindex @code{,}
-@example
- @code{<} @var{musicexprlist} @code{>}
-@end example
-If you try to use a chord as the first thing in your score, you might
-get multiple staffs instead of a chord.
-@lilypond[verbatim,center]
- \score {
- \notes <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- }
-@end lilypond
-This happens because the chord is interpreted by a score context.
-Each time a note is encountered a default Voice context (along with a
-Staff context) is created. The solution is to explicitly instantiate
-a Voice context:
+The optional octave specification takes the form of a series of
+single quote (`@code{'}') characters or a series of comma
+(`@code{,}') characters. Each @code{'} raises the pitch by one
+octave; each @code{,} lowers the pitch by an octave.
-@lilypond[verbatim,center]
- \score {
- \notes\context Voice <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- }
+@lilypond[fragment,verbatim,center]
+ c' d' e' f' g' a' b' c''
@end lilypond
-@c. {Compound music expressions}
-@node Compound music expressions
-@subsection Compound music expressions
-
-@cindex Compound music expressions
-
-Music expressions are compound data structures. You can nest music
-expressions any way you like. This simple example shows how three
-chords can be expressed in two different ways:
+@lilypond[fragment,verbatim,center]
+ cis' dis' eis' fis' gis' ais' bis'
+@end lilypond
@lilypond[fragment,verbatim,center]
- \notes \context Staff {
- <a c'> <b d' > <c' e'>
- < { a b c' } { c' d' e' } >
- }
+ ces' des' es' fes' ges' as' bes'
+@end lilypond
+@lilypond[fragment,verbatim,center]
+ cisis' eisis' gisis' aisis' beses'
@end lilypond
-@cindex @code{\context}
-@cindex context selection
+@lilypond[fragment,verbatim,center]
+ ceses' eses' geses' ases' beses'
+@end lilypond
-@example
- \context @var{contexttype} [= @var{contextname}] @var{musicexpr}
-@end example
-Interpret @var{musicexpr} within a context of type @var{contexttype}.
-If the context does not exist, it will be created. The new context
-can optionally be given a name.
+@c . {Defining pitch names}
+@node Defining pitch names
+@subsection Defining pitch names
+@cindex defining pitch names
+@cindex pitch names, defining
-@c. {Grace music} <-> Grace notes
-@node Grace music
-@subsection Grace music
-@cindex Grace music
-@cindex @code{\grace}
-@cindex ornaments
-@cindex grace notes
-@cindex @code{graceAlignPosition}
+Note names and chord modifiers can be customised for nationalities. The
+syntax is as follows.
+@cindex @code{\pitchnames}
+@cindex @code{\chordmodifiers}
@example
- \grace @var{musicexpr}
+ \pitchnames @var{scheme-alist}
+ \chordmodifiers @var{scheme-alist}
@end example
-A grace note expression has duration 0; the next real note is
-assumed to be the main note.
+See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
+specific examples how to do this. Some national note names have been
+provided, among others: Norwegian, Swedish, German, Italian, Catalan,
+French, Dutch and English.
-You cannot have the grace note after the main note, in terms of
-duration, and main notes, but you can typeset the grace notes to the
-right of the main note using the property
-@code{graceAlignPosition}.
-@cindex @code{flagStyle}
-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 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. This behavior can be controlled with the
-@code{flagStyle} property.
+@c . {Durations}
+@node Durations
+@subsection Durations
-@quotation
-@lilypond[fragment,verbatim]
-\relative c'' {
- \grace c8 c4 \grace { [c16 c16] } c4
- \grace { \property Grace.flagStyle = "" c16 } c4
-}
-@end lilypond
-@end quotation
-@cindex @code{\grace}
+@cindex duration
+@cindex @code{\duration}
-At present, nesting @code{\grace} notes is not supported. The following
-may cause run-time errors:
+The syntax for an verbose duration specification is
@example
- @code{\grace @{ \grace c32 c16 @} c4}
+ \duration @var{scmduration}
@end example
-Since the meaning of such a construct is unclear, we don't consider
-this a loss. Similarly, juxtaposing two @code{\grace} sections is
-syntactically valid, but makes no sense and may cause runtime errors.
-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.
+In Note, Chord, and Lyrics mode, durations may be designated by numbers
+and dots: durations are entered as their reciprocal values. For notes
+longer than a whole note, use identifiers.
-The present implementation is not robust and generally kludgy. We expect
-it to change after LilyPond 1.4
+@quotation
+@example
+c'\longa c'\breve
+c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64
+r\longa r\breve
+r1 r2 r4 r8 r16 r32 r64 r64
+@end example
-@c. {Explicit atomic music}
-@node Explicit atomic music
-@subsection Explicit atomic music
-@cindex Explicit atomic music
+@lilypond[]
+\score {
+ \notes \relative c'' {
+ a\longa a\breve \autoBeamOff
+ a1 a2 a4 a8 a16 a32 a64 a64
+ r\longa r\breve
+ r1 r2 r4 r8 r16 r32 r64 r64
+ }
+ \paper {
+ \translator {
+ \StaffContext
+ \remove "Clef_engraver";
+ \remove "Staff_symbol_engraver";
+ \remove "Time_signature_engraver";
+ \consists "Pitch_squash_engraver";
+ }
+ }
+}
+@end lilypond
+@end quotation
-@cindex pitch
+As you can see, the longa is not printed. To get a longa note head, you
+have to use a mensural note heads. This is done accomplished by setting
+the @code{style} property of the NoteHead grob to @code{mensural}.
-The syntax for pitch specification is
+If the duration is omitted then it is set equal to the previous duration
+entered. At the start of parsing there is no previous duration, so then
+a quarter note is assumed. The duration can be followed by a dot
+(`@code{.}') to obtain dotted note lengths.
+@cindex @code{.}
-@cindex @code{\pitch}
-@example
- \pitch @var{scmpitch}
-@end example
+@lilypond[fragment,verbatim,center]
+ a'4. b'4. c'2..
+@end lilypond
+@cindex @code{r}
+@cindex @code{s}
-@var{scmpitch} is a pitch scheme object, see @ref{Pitch}.
+You can alter the length of duration by writing `@code{*}@var{fraction}'
+after it. This will not affect the appearance of note heads or rests.
-In Note and Chord mode, pitches may be designated by names. See
-section @ref{Other languages} for pitch names in different languages.
+@c . {Notes}
+@node Notes
+@subsection Notes
-@cindex duration
-@cindex @code{\duration}
+A note specification has the form
-The syntax for duration specification is
@example
- \duration @var{scmduration}
+ @var{pitch}[@var{octavespec}][!][?][@var{duration}]
@end example
-In Note, Chord, and Lyrics mode, durations may be designated by
-numbers and dots.
-
+LilyPond will determine what accidentals to typeset depending on the key
+and context, so alteration refer to what note is heard, not to whether
+accidentals are printed. 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.
-@c. {Modifying music}
-@node Modifying music
-@section Modifying music
-@cindex Modifying music
-@menu
-* Relative::
-* Transpose::
-* Repeat::
-* Times ::
-* Apply::
-* Transform::
-@end menu
+@lilypond[fragment,verbatim,center]
+ cis' d' e' cis' c'? d' e' c'!
+@end lilypond
-@c. {Relative}
-@node Relative
-@subsection Relative
-@cindex Relative
-@cindex relative octave specification
-It is easy to get confused by octave changing marks and accidentally
-putting a pitch in the wrong octave. A much better way of entering a
-note's octave is `the relative octave' mode.
+@c . {Rests}
+@node Rests
+@subsection Rests
+@cindex Rests
+
+Rests are entered like notes, with note name `@code{r}'.
+There is also a note name
+`@code{s}', which produces a space of the specified
+duration.
+
+
+@c . {Skip}
+@node Skip
+@subsection Skip
+@cindex Skip
+
-@cindex @code{\relative}
@example
- \relative @var{startpitch} @var{musicexpr}
+ \skip @var{duration} @code{;}
@end example
+@cindex @code{\skip}
-The octave of notes that appear in @var{musicexpr} are calculated as
-follows: If no octave changing marks are used, the basic interval
-between this and the last note is always taken to be a fourth or
-less.@footnote{The interval is determined without regarding
-accidentals. A @code{fisis} following a @code{ceses} will be put above
-the @code{ceses}.} The octave changing marks @code{'} and @code{,}
-can then be added to raise or lower the pitch by an extra octave.
-Upon entering relative mode, an absolute starting pitch must be
-specified that will act as the predecessor of the first note of
-@var{musicexpr}.
+Skips the amount of time specified by @var{duration}. If no other
+music is played, a gap will be left for the skipped time with no
+notes printed. It works in Note Mode or Lyrics Mode. In Note mode,
+this has the same effect as the spacer rest.
-Entering scales is straightforward in relative mode.
-@lilypond[fragment,verbatim,center]
- \relative c' {
- c d e f g a b c c,
- }
-@end lilypond
-And octave changing marks are used for intervals greater than a fourth.
+@c . {Music notation}
+@node Music notation
+@section Music notation
+@cindex Music notation
+@menu
+* Key::
+* Breath marks::
+* Time signature::
+@end menu
-@lilypond[fragment,verbatim,center]
- \relative c'' {
- c g c f, c' a, e'' }
-@end lilypond
+@c . {Key}
+@node Key
+@subsection Key
+@cindex Key
-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
-within the second chord are determined by looking at the immediately
-preceding note.
+@cindex @code{\key}
-@lilypond[fragment,verbatim,center]
- \relative c' {
- c <c e g>
- <c' e g>
- <c, e' g>
- }
-@end lilypond
-@cindex @code{\notes}
+@example
+ @code{\key} @var{pitch} @var{type} @code{;}
+@end example
+@cindex @code{\minor}
+@cindex @code{\major}
+@cindex @code{\minor}
+@cindex @code{\ionian}
+@cindex @code{\locrian}
+@cindex @code{\aeolian}
+@cindex @code{\mixolydian}
+@cindex @code{\lydian}
+@cindex @code{\phrygian}
+@cindex @code{\dorian}
-The pitch after the @code{\relative} contains a notename. To parse
-the pitch as a notename, you have to be in note mode, so there must
-be a surrounding @code{\notes} keyword (which is not
-shown here).
+Change the key signature. @var{type} should be @code{\major} or
+@code{\minor} to get @var{pitch}-major or @var{pitch}-minor,
+respectively. The second argument is optional; the default is major
+keys. The @var{\context} argument can also be given as an integer,
+which tells the number of semitones that should be added to the pitch
+given in the subsequent @code{\key} commands to get the corresponding
+major key, e.g., @code{\minor} is defined as 3. The standard mode names
+@code{\ionian}, @code{\locrian}, @code{\aeolian}, @code{\mixolydian},
+@code{\lydian}, @code{\phrygian}, and @code{\dorian} are also defined.
-The relative conversion will not affect @code{\transpose} or
-@code{\relative} sections in its argument. If you want to use
-relative within transposed music, you must place an additional
-@code{\relative} inside the @code{\transpose}.
+This command sets @code{Staff.keySignature}.
-It is strongly recommended to use relative pitch mode: less work,
-less error-prone, and more readable.
-@c. {Transpose}
-@node Transpose
-@subsection Transpose
-@cindex Transpose
-@cindex transposition of pitches
-@cindex @code{\transpose}
-A music expression can be transposed with @code{\transpose}. The syntax
-is
+@cindex @code{keySignature}
+
+@c . {Clef changes}
+@subsubsection Clef changes
+@cindex @code{\clef}
@example
- \transpose @var{pitch} @var{musicexpr}
+ \clef @var{clefname} @code{;}
@end example
-This means that middle C in @var{musicexpr} is transposed to
-@var{pitch}.
+Short-cut for
-@code{\transpose} distinguishes between enharmonic pitches: both
-@code{\transpose cis'} or @code{\transpose des'} will transpose up half
-a tone. The first version will print sharps and the second version
-will print flats.
+@example
+ \property Staff.clefGlyph = @var{symbol associated with clefname}
+ \property Staff.clefPosition = @var{clef Y-position for clefname}
+ \property Staff.clefOctavation = @var{extra pitch of clefname}
+@end example
-@quotation
-@lilypond[fragment,verbatim]
-\context Staff {
- \clef "F";
- { \key e \major; c d e f }
- \clef "G";
- \transpose des'' { \key e \major; c d e f }
- \transpose cis'' { \key e \major; c d e f }
-}
+Supported clef-names include
-@end lilypond
-@end quotation
+@itemize @bullet
+@item treble, violin, G, G2: G clef on 2nd line
+@item french: G clef on 1st line
+@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: percussion clef
+@end itemize
-If you want to use both @code{\transpose} and @code{\relative}, then
-you must use @code{\transpose} first. @code{\relative} will have no
-effect music that appears inside a @code{\transpose}.
+Supported associated symbols (for Staff.clefGlyph) are:
-@c. {Repeat}
-@node Repeat
-@subsection Repeat
-@cindex Repeat
-@cindex repeats
+@itemize @bullet
+@item clefs-C: modern style C clef
+@item clefs-F: modern style F clef
+@item clefs-G: modern style G clef
+@item clefs-vaticana_do: Editio Vaticana style do clef
+@item clefs-vaticana_fa: Editio Vaticana style fa clef
+@item clefs-medicaea_do: Editio Medicaea style do clef
+@item clefs-medicaea_fa: Editio Medicaea style fa clef
+@item clefs-mensural1_c: modern style mensural C clef
+@item clefs-mensural2_c: historic style small mensural C clef
+@item clefs-mensural3_c: historic style big mensural C clef
+@item clefs-mensural1_f: historic style traditional mensural F clef
+@item clefs-mensural2_f: historic style new mensural F clef
+@item clefs-mensural_g: historic style mensural G clef
+@item clefs-hufnagel_do: historic style hufnagel do clef
+@item clefs-hufnagel_fa: historic style hufnagel fa clef
+@item clefs-hufnagel_do_fa: historic style hufnagel combined do/fa clef
+@item clefs-percussion: modern style percussion clef
+@end itemize
-@ref{Volta}
-[TODO: document #'repeatCommands.]
+@emph{Modern style} means "as is typeset in current editions".
+@emph{Historic style} means "as was typeset or written in contemporary
+historic editions". @emph{Editio XXX style} means "as is/was printed in
+Editio XXX".
-@cindex @code{\repeat}
+@node Breath marks
+@subsection Breath marks
-In order to specify repeats, use the @code{\repeat}
-keyword. Since repeats look and sound differently when played or
-printed, there are a few different variants of repeats.
+Breath marks are entered using @code{\breathe}:
-@table @asis
-@item unfolded
-Repeated music is fully written (played) out. Useful for MIDI
-output.
+@lilypond[fragment,relative]
+c'4 \breathe d4
+@end lilypond
-@item volta
-This is the normal notation: Repeats are not written out, but
-alternative endings (voltas) are printed, left to right.
-@item folded
-Alternative endings are written stacked. Which is unfortunately not
-practical for anything right now.
-@item tremolo
-Make tremolo beams.
-@end table
+@c . {Time signature}
+@node Time signature
+@subsection Time signature
+@cindex Time signature
+@cindex meter
+@cindex @code{\time}
-The syntax for repeats is
+@example
+ \time @var{numerator}@code{/}@var{denominator} @code{;}
+@end example
+A short-cut for doing
@example
- \repeat @var{variant} @var{repeatcount} @var{repeatbody}
+ \property Score.timeSignatureFraction = #'(@var{numerator} . @var{denominator})
@end example
-If you have alternative endings, you may add
+See the documentation of @code{timeSignatureFraction}
-@cindex @code{\alternative}
+
+@c . {Partial}
+@subsubsection Partial
+@cindex Partial
+@cindex anacrusis
+@cindex upstep
+@cindex partial measure
+@cindex measure, partial
+@cindex shorten measures
+@cindex @code{\partial}
@example
- \alternative @code{@{} @var{alternative1}
- @var{alternative2}
- @var{alternative3} @dots{} @code{@}}
+ \partial @var{duration} @code{;}
@end example
-where each @var{alternative} is a Music expression.
+Short cut for
-Normal notation repeats are used like this:
+@example
+ \property Score.measurePosition = @var{length of duration}
+@end example
+@cindex @code{|}
-@quotation
+See the documentation of @code{measurePosition}.
-@lilypond[fragment,verbatim]
- c'1
- \repeat volta 2 { c'4 d' e' f' }
- \repeat volta 2 { f' e' d' c' }
-@end lilypond
-@end quotation
-With alternative endings:
-@quotation
-@lilypond[fragment,verbatim]
- c'1
- \repeat volta 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
+@c . {Polyphony}
+@node Polyphony
+@section Polyphony
+@cindex Polyphony
-@end lilypond
-@end quotation
+[todo : collisiosn, rest-collisinos, voiceX identifiers, how to
+which contexts to instantiate.]
-Folded repeats look like this:@footnote{Folded repeats offer little
-more over simultaneous music. However, it is to be expected that
-more functionality -- especially for the MIDI backend -- will be
-implemented.}
-@quotation
+@table @code
+@cindex @code{\shiftOff}
+ @item @code{\shiftOff}
+ Disable horizontal shifting of note heads that collide.
-@lilypond[fragment,verbatim]
- c'1
- \repeat fold 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
+@cindex @code{\shiftOn}
+ @item @code{\shiftOn}
+ Enable note heads that collide with other note heads to be
+ shifted horiztonally. Also @code{\shiftOnn} and @code{\shiftOnnn}
+set different shift values.
-@end lilypond
-@end quotation
+@cindex @code{\stemBoth}
+ @item @code{\stemBoth}
+ Allow stems, beams, and slurs to point either upwards or
+ downwards, decided automatically by LilyPond.
-@quotation
+@cindex @code{\stemDown}
+ @item @code{\stemDown}
+ Force stems, beams, and slurs to point down.
-@lilypond[fragment,verbatim]
-\context Staff {
- \relative c' {
- \partial 4;
- \repeat volta 2 { e | c2 d2 | e2 f2 | }
- \alternative { { g4 g g } { a | a a a a | b1 } }
- }
-}
+@cindex @code{\stemUp}
+ @item @code{\stemUp}
+ Force stems, beams and slurs to point up.
+@end table
-@end lilypond
-@end quotation
+@c . {Spanners}
+@node Spanners
+@section Spanners
+@cindex Spanners
-If you don't give enough alternatives for all of the repeats, then
-the first alternative is assumed to be repeated often enough to equal
-the specified number of repeats.
+@menu
+* Beam::
+* Slur ::
+* Phrasing slur::
+* Ornaments::
+* Grace notes::
+* Bar check::
+@end menu
-@quotation
-@lilypond[fragment,verbatim]
-\context Staff {
- \relative c' {
- \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | }
- \alternative { { g4 g g }
- {\partial 1; e4 e e }
- {\partial 1; a a a a | b1 } }
- }
-}
-@end lilypond
-@end quotation
-As you can see, LilyPond doesn't remember the timing information, nor
-are slurs or ties repeated. We hope to fix this after 1.4.
-It is possible to nest @code{\repeat}. This is not entirely
-supported: the notes will come be in the right places, but the repeat
-bars will not.
+@c . {Beam}
+@node Beam
+@subsection Beams
-To place tremolo marks between notes, use @code{\repeat} with tremolo
-style.
-@cindex tremolo beams
-To create tremolo beams on a single note, simply attach
-`@code{:}@var{length}' to the note itself.
+@cindex beams
-@lilypond[verbatim,center]
-\score {
- \context Voice \notes\relative c' {
- \repeat "tremolo" 8 { c16 d16 }
- \repeat "tremolo" 4 { c16 d16 }
- \repeat "tremolo" 2 { c16 d16 }
- }
- \paper {
- linewidth = 40*\staffspace;
- }
-}
-@end lilypond
-@cindex @code{__}
+@c . {Automatic beams}
+@subsubsection Automatic beams
-@lilypond[fragment,verbatim,center]
- c'4:32
-@end lilypond
+@cindex automatic beam generation
+@cindex autobeam
+@cindex @code{Voice.noAutoBeaming}
-@c. {Times}
-@node Times
-@subsection Times
-@cindex Times
-@ref{Tuplets}
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
+LilyPond will group flagged notes and generate beams autmatically, where
+appropriate.
-@cindex @code{\times}
-@example
- \times @var{fraction} @var{musicexpr}
-@end example
+This feature can be disabled by setting the @code{Voice.noAutoBeaming}
+property to true, which you may find necessary for the melody that goes
+with lyrics, eg. Automatic beaming can easily be overridden for
+specific cases by specifying explicit beams. This is discussed in the
+next subsubsection.
-The duration of @var{musicexpr} will be multiplied by the fraction.
-In print, the fraction's denominator will be printed over the notes,
-optionally with a bracket. The most common tuplet is the triplet in
-which 3 notes have the length of 2, so the notes are 2/3 of
-their written length:
-@lilypond[fragment,verbatim,center]
- g'4 \times 2/3 {c'4 c' c'} d'4 d'4
-@end lilypond
+@cindex @code{Voice.autoBeamSettings}
+@cindex @code{(end * * * *)}
+@cindex @code{(begin * * * *)}
-@c. {Apply}
-@node Apply
-@subsection Apply
-@cindex Apply
-Apply allows a Scheme-function to operate directly on the internal
-representation of music.
+A large number of Voice properties are used to decide how to generate
+beams. Their default values appear in @file{scm/auto-beam.scm}. In
+general, beams can begin anywhere, but their ending location is
+significant. Beams can end on a beat, or at durations specified by the
+properties in @code{Voice.autoBeamSettings}. To end beams every quarter
+note, for example, you could set the property @code{(end * * * *)} to
+@code{(make-moment 1 4)}. To end beams at every three eighth notes you
+would set it to @code{(make-moment 1 8)}. The same syntax can be used
+to specify beam starting points using @code{(begin * * * *)}, eg:
+@quotation
@example
- \apply #@var{func} @var{music}
+\property Voice.autoBeamSettings \override
+ #'(end * * * *) = #(make-moment 1 4)
+\property Voice.autoBeamSettings \override
+ #'(begin * * * *) = #(make-moment 1 8)
@end example
-The function takes two arguments, being a function and an musical
-argument for that function. The function should return a music
-expression.
-
-This example replaces the text string of a script. It also shows a dump
-of the music it processes.
-@lilypond[verbatim]
-#(define (testfunc x)
- (if (eq? (ly-get-mus-property x 'text) "foo")
- (ly-set-mus-property x 'text "bar"))
- ;; recurse
- (ly-set-mus-property x 'elements
- (map testfunc (ly-get-mus-property x 'elements)))
- (display x)
- x
-)
-\score { \notes
- \apply #testfunc { c4_"foo" }
-}
-@end lilypond
-
-For more information on what is possible, see the @ref{Tricks} and the
-automatically generated documentation.
-
-@c. {Transform}
-@node Transform
-@subsection Transform
-@cindex Transform
-
-
-@c. {Note entry}
-@node Note entry
-@section Note entry
-@cindex Note entry
-
-@menu
-* Notes mode::
-* Pitch names::
-@end menu
-
-@c. {Notes mode}
-@node Notes mode
-@subsection Notes mode
+@end quotation
-@cindex note mode
+To allow different settings for different time signatures, instead of
+the first two asterisks @code{* *} you can specify a time signature; use
+@code{(end N M * *)} to restrict the definition to
+`@var{N}@code{/}@var{M}' time. For example, to specify beams ending
+only for 6/8 time you would use the property @code{(end 6 8 * *)}.
-@cindex @code{\notes}
-Note mode is introduced by the keyword
-@code{\notes}. In Note mode, words can only
-contain alphabetic characters. If @code{word} is encountered,
-LilyPond first checks for a notename of @code{word}. If no
-notename is found, then @code{word} is treated as a string.
+To allow different endings for notes of different durations, instead of
+th last two asterisks you can specify a duration; use @code{(end * * N
+M)} to restrict the definition to beams that contain notes of
+`@var{N}@code{/}@var{M}' duration.
-Since combinations of numbers and dots are used for indicating
-durations, it is not possible to enter real numbers in this mode.
+For example, to specify beam endings for beams that contain 32nd notes,
+you would use @code{(end * * 1 32)}.
-@cindex Notes mode
-@c. {Pitch names}
-@node Pitch names
-@subsection Pitch names
-@cindex Pitch names
-@node Note specification
-@section Note specification
-@cindex Note specification
+@c . {Manual beams}
+@cindex Automatic beams
+@subsubsection Manual beams
+@cindex beams, manual
+@cindex @code{]}
+@cindex @code{[}
-@cindex pitches
-@cindex entering notes
+In some cases it may be necessary to override LilyPond's automatic
+beaming algorithm. For example, the auto beamer will not beam over
+rests or bar lines, so if you want that, specify the begin and end point
+manually using @code{[} and @code{]}:
-A note specification has the form
+@quotation
+@lilypond[fragment,relative,verbatim]
+ \context Staff {
+ r4 [r8 g'' a r8] r8 [g | a] r8
+ }
+@end lilypond
-@example
- @var{pitch}[@var{octavespec}][!][?][@var{duration}]
-@end example
-The pitch of the note is specified by the note's name.
+@cindex @code{stemLeftBeamCount}
+If you have specific wishes for the number of beams, you can fully
+control the number of beams through the properties
+y@code{Voice.stemLeftBeamCount} and @code{Voice.stemRightBeamCount}.
-The default names are the Dutch note names. The notes are specified
-by the letters @code{c} through @code{b}, where @code{c} is an
-octave below middle C and the letters span the octave above that C.
-In Dutch,
-@cindex note names, 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 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 will be accepted.
+@lilypond[fragment,relative,verbatim]
+ \context Staff {
+ [f'8 r16 f g a]
+ [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
+ }
+@end lilypond
+@end quotation
+@cindex @code{stemRightBeamCount}
-LilyPond has predefined sets of notenames for various other languages.
-To use them, simply include the language specific init file. For
-example: @code{\include "english.ly"}. The available language files and
-the names they define are:
-@example
- Note Names sharp flat
-nederlands.ly c d e f g a bes b -is -es
-english.ly c d e f g a bf b -s/-sharp -f/-flat
-deutsch.ly c d e f g a b h -is -es
-norsk.ly c d e f g a b h -iss/-is -ess/-es
-svenska.ly c d e f g a b h -iss -ess
-italiano.ly do re mi fa sol la sib si -d -b
-catalan.ly do re mi fa sol la sib si -d/-s -b
-@end example
-@cindex @code{'}
-@cindex @code{,}
+@c . {Adjusting beams}
+@unnumberedsubsubsec Adjusting beams
+@cindex Adjusting beams
-Pitch names can be redefined using the @code{\pitchnames} command, see
-@ref{Pitch names}.
+FIXME
+
+@c . {Slur}
+@node Slur
+@subsection Slur
+@cindex slur
-The optional octave specification takes the form of a series of
-single quote (`@code{'}') characters or a series of comma
-(`@code{,}') characters. Each @code{'} raises the pitch by one
-octave; each @code{,} lowers the pitch by an octave.
+@menu
+* Slur attachments::
+@end menu
-@lilypond[fragment,verbatim,center]
- c' d' e' f' g' a' b' c''
-@end lilypond
+A slur connects chords and is used to indicate legato. Slurs avoid
+crossing stems. A slur is started with @code{(} and stopped with
+@code{)}. The starting @code{(} appears to the right of the first note
+in the slur. The terminal @code{)} appears to the left of the last note
+in the slur. This makes it possible to put a note in slurs from both
+sides:
@lilypond[fragment,verbatim,center]
- cis' dis' eis' fis' gis' ais' bis'
+ f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
@end lilypond
-@lilypond[fragment,verbatim,center]
- ces' des' es' fes' ges' as' bes'
-@end lilypond
+@c . {Adjusting slurs}
+@unnumberedsubsubsec Adjusting slurs
-@lilypond[fragment,verbatim,center]
- cisis' eisis' gisis' aisis' beses'
-@end lilypond
-@lilypond[fragment,verbatim,center]
- ceses' eses' geses' ases' beses'
-@end lilypond
+@node Slur attachments
+@subsubsection Slur attachments
-LilyPond will determine what accidentals to typeset depending on the key
-and context, so alteration refer to what note is heard, not to whether
-accidentals are printed. 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
+The ending of a slur should whenever possible be attached to a note
+head. Only in some instances where beams are involved, LilyPond may
+attach a slur to a stem end. In some cases, you may want to override
+LilyPond's decision, e.g., to attach the slur to the stem end. This can
+be done through @code{Voice.Slur}'s grob-property @code{attachment}:
-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'!
+@quotation
+@lilypond[fragment,relative,verbatim]
+ \property Voice.Slur \set #'direction = #1
+ \property Voice.Stem \set #'length = #5.5
+ g''8(g)g4
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+ g8(g)g4
@end lilypond
+@end quotation
+Similarly, slurs can be attached to note heads even when beams are
+involved:
-@c. {Rests}
-@menu
-* Rests::
-* Durations::
-* Multi measure rests::
-* Skip::
-@end menu
-
-@node Rests
-@subsection Rests
-@cindex Rests
-
-Rests are entered like notes, with note name `@code{r}'.
-There is also a note name
-`@code{s}', which produces a space of the specified
-duration.
-
-
-@c. {Durations}
-@node Durations
-@subsection Durations
-@cindex Durations
+@quotation
+@lilypond[fragment,relative,verbatim]
+ \property Voice.Slur \set #'direction = #1
+ \property Voice.Slur \set #'attachment = #'(head . head)
+ g''16()g()g()g()d'()d()d()d
+@end lilypond
+@end quotation
-Durations are entered as their reciprocal values. For notes longer
-than a whole note, use identifiers.
+If a slur would strike through a stem or beam, LilyPond will move the
+slur away vertically (upward or downward). In some cases, this may
+cause ugly slurs that you may want to correct:
@quotation
+@lilypond[fragment,relative,verbatim]
+ \property Voice.Stem \set #'direction = #1
+ \property Voice.Slur \set #'direction = #1
+ d'32( d'4 )d8..
+ \property Voice.Slur \set #'attachment = #'(stem . stem)
+ d,32( d'4 )d8..
+@end lilypond
+@end quotation
-@example
-c'\longa c'\breve
-c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64
-r\longa r\breve
-r1 r2 r4 r8 r16 r32 r64 r64
-@end example
+LilyPond will increase the curvature of a slur trying to stay free of
+note heads and stems. However, if the curvature would increase too much,
+the slur will be reverted to its default shape. This decision is based
+on @code{Voice.Slur}'s grob-property @code{beautiful} value. In some
+cases, you may find ugly slurs beautiful, and tell LilyPond so by
+increasing the @code{beautiful} value:
+[hoe gedefd?? wat betekent beautiful = X?]
-@lilypond[]
+@quotation
+@lilypond[verbatim]
\score {
- \notes \relative c'' {
- a\longa a\breve \autoBeamOff
- a1 a2 a4 a8 a16 a32 a64 a64
- r\longa r\breve
- r1 r2 r4 r8 r16 r32 r64 r64
- }
+ \notes \context PianoStaff <
+ \time 6/4;
+ \context Staff=up { s1 * 6/4 }
+ \context Staff=down <
+ \clef bass;
+ \autochange Staff \context Voice
+ \notes \relative c {
+ d,8( a' d f a d f d a f d )a
+ }
+ >
+ >
\paper {
+ linewidth = -1.;
\translator {
- \StaffContext
- \remove "Clef_engraver";
- \remove "Staff_symbol_engraver";
- \remove "Time_signature_engraver";
- \consists "Pitch_squash_engraver";
+ \VoiceContext
+ Slur \override #'beautiful = #5.0
+ Slur \override #'direction = #1
+ Stem \override #'direction = #-1
+ autoBeamSettings \override #'(end * * * *)
+ = #(make-moment 1 2)
+ }
+ \translator {
+ \PianoStaffContext
+ VerticalAlignment \override #'threshold = #'(5 . 5)
}
}
}
@end lilypond
@end quotation
-As you can see, the longa is not printed. To get a longa note head, you
-have to use a different style of note heads. See [TODO].
-
-@cindex @code{.}
+@cindex Adusting slurs
-If the duration is omitted then it is set equal to the previous duration
-entered. At the start of parsing there is no previous duration, so then
-a quarter note is assumed. The duration can be followed by a dot
-(`@code{.}') to obtain dotted note lengths.
+@c . {Phrasing slur}
+@node Phrasing slur
+@subsection Phrasing slur
+@cindex phrasing slur
+@cindex phrasing mark
+A phrasing slur (or phrasing mark) connects chords and is used to
+indicate a musical sentence. Phrasing slurs avoid crossing stems. A
+phrasing slur is started with @code{\(} and stopped with @code{\)}. The
+starting @code{\(} appears to the right of the first note in the
+phrasing slur. The terminal @code{\)} appears to the left of the last
+note in the phrasing slur.
-@lilypond[fragment,verbatim,center]
- a'4. b'4.
+@lilypond[fragment,verbatim,center,relative]
+ \time 6/4; c''\((d)e f(e)\)d
@end lilypond
-@cindex @code{r}
-@cindex @code{s}
-You can alter the length of duration by writing `@code{*}@var{fraction}'
-after it. This will not affect the appearance of note heads or rests.
-
-@c. {Multi measure rests}
-@node Multi measure rests
-@subsection Multi measure rests
-@cindex Multi measure rests
+[TODO: put together with breath mark.]
-@cindex @code{R}
-Multi_measure_rest are entered using `@code{R}'. It is specifically
-meant for entering parts: the rest can expand to fill a score with
-rests, or it can be printed as a single multimeasure rest This expansion
-is controlled by the property @code{Score.skipBars}. If this is set to true,
-Lily will not expand empty measures, and the multimeasure rests
-automatically adds the appropriate number.
+@c . {Tie}
+@menu
+* Tie::
+* Tuplets::
+* Text spanner::
+* Ottava::
+* Span requests::
+@end menu
-@lilypond[fragment]
- \time 3/4; R2.*2 \property Score.skipBars = ##t R2.*17 R2.*4
+@node Tie
+@subsubsection Tie
+
+@cindex Tie
+@cindex ties
+@cindex @code{~}
+
+A tie connects two adjacent note heads of the same pitch. When used
+with chords, it connects all of the note heads whose pitches match.
+Ties are indicated using the tilde symbol `@code{~}'.
+If you try to tie together chords which have no common pitches, a
+warning message will appear and no ties will be created.
+
+@lilypond[fragment,verbatim,center]
+ e' ~ e' <c' e' g'> ~ <c' e' g'>
@end lilypond
-Note that there is currently no way to condense multiple rests into a
-single multimeasure rest.
+[sparseTies]
-@c. {Skip}
-@node Skip
-@subsection Skip
-@cindex Skip
+@c . {Tuplets}
+@node Tuplets
+@subsubsection Tuplets
+@cindex Tuplets
+@cindex Times
+Tuplets are made out of a music expression by multiplying their duration
+with a fraction.
+
+@cindex @code{\times}
@example
- \skip @var{duration} @code{;}
+ \times @var{fraction} @var{musicexpr}
@end example
-@cindex @code{\skip}
-Skips the amount of time specified by @var{duration}. If no other
-music is played, a gap will be left for the skipped time with no
-notes printed. It works in Note Mode or Lyrics Mode. In Note mode,
-this has the same effect as the spacer rest.
+The duration of @var{musicexpr} will be multiplied by the fraction.
+In print, the fraction's denominator will be printed over the notes,
+optionally with a bracket. The most common tuplet is the triplet in
+which 3 notes have the length of 2, so the notes are 2/3 of
+their written length:
+@lilypond[fragment,verbatim,center]
+ g'4 \times 2/3 {c'4 c' c'} d'4 d'4
+@end lilypond
+[todo: document tupletSpannerDuration]
-@c. {Music notation}
-@node Music notation
-@section Music notation
-@cindex Music notation
-@menu
-* Key::
-* Clef::
-* Time signature::
-* Spanners::
-* Ornaments::
-* Bar check::
-@end menu
+@c . {Text spanner}
+@node Text spanner
+@subsubsection Text spanner
+@cindex Text spanner
-@c. {Key}
-@node Key
-@subsection Key
-@cindex Key
+@c . {Ottava}
+@node Ottava
+@subsubsection Ottava
+@cindex Ottava
+@unnumberedsubsubsec Ottava
-@cindex @code{\key}
+[move to trick. Not a supported feature.]
-@example
- @code{\key} @var{pitch} @var{type} @code{;}
-@end example
-@cindex @code{\minor}
-@cindex @code{\major}
-@cindex @code{\minor}
-@cindex @code{\ionian}
-@cindex @code{\locrian}
-@cindex @code{\aeolian}
-@cindex @code{\mixolydian}
-@cindex @code{\lydian}
-@cindex @code{\phrygian}
-@cindex @code{\dorian}
+@lilypond[fragment,relative,verbatim]
+ a'''' b c a
+ \property Voice.TextSpanner \set #'type = #'dotted-line
+ \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
+ \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
+ \property Staff.centralCPosition = #-13
+ a\spanrequest \start "text" b c a \spanrequest \stop "text"
+@end lilypond
-Change the key signature. @var{type} should be @code{\major} or
-@code{\minor} to get @var{pitch}-major or @var{pitch}-minor,
-respectively. The second argument is optional; the default is major
-keys. The @var{\context} argument can also be given as an integer,
-which tells the number of semitones that should be added to the pitch
-given in the subsequent @code{\key} commands to get the corresponding
-major key, e.g., @code{\minor} is defined as 3. The standard mode names
-@code{\ionian}, @code{\locrian}, @code{\aeolian}, @code{\mixolydian},
-@code{\lydian}, @code{\phrygian}, and @code{\dorian} are also defined.
-@c. {Clef}
-@node Clef
-@subsection Clef
-@cindex Clef
+@c . {Span requests}
+@node Span requests
+@subsubsection Span requests
+@cindex Span requests
+@cindex @code{\spanrequest}
-@c. {Clef changes}
-@subsubsection Clef changes
-@cindex @code{\clef}
@example
- \clef @var{clefname} @code{;}
+ \spanrequest @var{startstop} @var{type}
@end example
+@cindex @code{\start}
+@cindex @code{\stop}
-Short-cut for
+Define a spanning request. The @var{startstop} parameter is either -1
+(@code{\start}) or 1 (@code{\stop}) and @var{type} is a string that
+describes what should be started. Among the supported types are
+@code{crescendo}, @code{decrescendo}, @code{beam}, @code{slur}.This is
+an internal command. Users should use the shorthands which are defined
+in the initialization file @file{spanners.ly}.
-@example
- \property Clef.clefGlyph = @var{symbol associated with clefname}
- \property Clef.clefPosition = @var{clef Y-position for clefname}
- \property Clef.clefOctavation = @var{extra pitch of clefname}
-@end example
+You can attach a (general) span request to a note using the following
+syntax.
-Supported clef-names include
+@lilypond[fragment,verbatim,center]
+ c'4-\spanrequest \start "slur"
+ c'4-\spanrequest \stop "slur"
+@end lilypond
-[todo]
+The slur syntax with parentheses is a shorthand for this.
+@c . {Ornaments}
+@node Ornaments
+@subsection Ornaments
+@cindex Ornaments
+@menu
+* Articulation::
+* Text scripts::
+@end menu
-@c. {Time signature}
-@node Time signature
-@subsection Time signature
-@cindex Time signature
-@cindex meter
-@cindex @code{\time}
+@c . {Articulation}
+@node Articulation
+@subsubsection Articulation
+@cindex Articulation
-@example
- \time @var{numerator}@code{/}@var{denominator} @code{;}
-@end example
+@cindex articulations
+@cindex scripts
+@cindex ornaments
-A short-cut for doing
-@example
- \property Score.timeSignatureFraction = #'(@var{numerator} . @var{denominator})
-@end example
+A variety of symbols can appear above and below notes to indicate
+different characteristics of the performance. These symbols can be
+added to a note with `@var{note}@code{-\}@var{name}'. Numerous symbols
+are defined in @file{script.ly} and @file{script.scm}. Symbols can be
+forced to appear above or below the note by writing
+`@var{note}@code{^\}@var{name}' and `@var{note}@code{_\}@var{name}'
+respectively. Here is a chart showing symbols above notes, with the
+name of the corresponding symbol appearing underneath.
-See the documentation of @code{timeSignatureFraction}
+@lilypond[]
+ \score {
+ < \notes {
+ \property Score.LyricSyllable \override #'font-family =
+#'typewriter
+ \property Score.LyricSyllable \override #'font-shape = #'upright
+ c''-\accent c''-\marcato c''-\staccatissimo c''-\fermata
+ c''-\stopped c''-\staccato c''-\tenuto c''-\upbow
+ c''-\downbow c''^\lheel c''-\rheel c''^\ltoe
+ 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
+ }
+ \context Lyrics \lyrics {
+ accent__ marcato__ staccatissimo__ fermata
+ stopped__ staccato__ tenuto__ upbow
+ downbow__ lheel__ rheel__ ltoe
+ rtoe__ turn__ open__ flageolet
+ reverseturn__ trill__ prall__ mordent
+ prallprall__ prallmordent__ uprall__ downprall
+ thumb__ segno__ coda
+ }
+ >
+ \paper {
+ linewidth = 5.875\in;
+ indent = 0.0;
+ }
+ }
+
+@end lilypond
+
+@c . {Text scripts}
+@node Text scripts
+@subsubsection Text scripts
+@cindex Text scripts
+
+In addition, it is possible to place arbitrary strings of text or markup
+text (see @ref{Text markup}) above or below notes by using a string
+instead of an identifier: @code{c^"text"}. It is possible to use @TeX{}
+commands, but this should be avoided because this 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. Fingerings can be placed by simply using digits. All of these
+note ornaments appear in the printed output but have no effect on the
+MIDI rendering of the music.
+
+@c . {Fingerings}
+@unnumberedsubsubsec Fingerings
+@cindex Fingerings
+
+To save typing, fingering instructions (digits 0 to 9 are
+supported) and single characters shorthands exist for a few
+common symbols
+
+@lilypond[]
+ \score {
+ \notes \context Voice {
+ \property Voice.TextScript \set #'font-family = #'typewriter
+ \property Voice.TextScript \set #'font-shape = #'upright
+ c''4-._"c-." s4
+ c''4--_"c-{}-" s4
+ c''4-+_"c-+" s4
+ c''4-|_"c-|" s4
+ c''4->_"c->" s4
+ c''4-^_"c-\\^{ }" s4
+ c''4-1_"c-1" s4
+ c''4-2_"c-2" s4
+ c''4-3_"c-3" s4
+ c''4-4_"c-4" s4
+ }
+ \paper {
+ linewidth = 5.875 \in;
+ indent = 0.0;
+ }
+ }
+
+@end lilypond
+
+
+@cindex @code{\textscript}
-@c. {Partial}
-@subsubsection Partial
-@cindex Partial
-@cindex anacrusis
-@cindex upstep
-@cindex partial measure
-@cindex measure, partial
-@cindex shorten measures
-@cindex @code{\partial}
@example
- \partial @var{duration} @code{;}
+
+ \textscript @var{text} @var{style}
@end example
-Short cut for
+Defines a text to be printed over or under a note. @var{style} is a
+string that may be one of @code{roman}, @code{italic}, @code{typewriter},
+@code{bold}, @code{Large}, @code{large}, @code{dynamic} or @code{finger}.
+
+You can attach a general textscript request using this syntax:
+
+@quotation
+
+@example
+c4-\textscript "6" "finger"
+c4-\textscript "foo" "normal"
+@end example
+
+@end quotation
+
+This is equivalent to @code{c4-6 c4-"foo"}.
+
+@cindex @code{\script}
+@cindex scripts
+@cindex superscript
+@cindex subscript
@example
- \property Score.measurePosition = @var{length of duration}
+ \script @var{alias}
@end example
-@cindex @code{|}
-See the documentation of @code{measurePosition}.
+Prints a symbol above or below a note. The argument is a string which
+points into the script-alias table defined in @file{scm/script.scm}.
+Usually the @code{\script} keyword is not used directly. Various
+helpful identifier definitions appear in @file{script.ly}.
+For information on how to add scripts, consult @file{scm/script.scm}.
-@c. {Spanners}
-@node Spanners
-@subsection Spanners
-@cindex Spanners
-@menu
-* Beam::
-* Slur::
-* Tie::
-* Tuplet::
-* Volta::
-* Crescendo and Decrescendo::
-* Text spanner::
-* Ottava::
-* Span requests::
-@end menu
-@c. {Beam}
-@node Beam
-@subsubsection Beam
-@cindex Beam
-@c. {Automatic beams}
-@unnumberedsubsubsec Automatic beams
-@cindex automatic beam generation
-@cindex autobeam
+@c . {Grace notes}
+@node Grace notes
+@subsection Grace notes
-@cindex @code{Voice.noAutoBeaming}
-By default, LilyPond will generate beams automatically. This feature
-can be disabled by setting the @code{Voice.noAutoBeaming} property to
-true. It can be overridden for specific cases by specifying explicit
-beams.
-@cindex @code{Voice.autoBeamSettings}
-@cindex @code{(end * * * *)}
-@cindex @code{(begin * * * *)}
-A large number of Voice properties are used to decide how to generate
-beams. Their default values appear in @file{scm/auto-beam.scm}. In
-general, beams can begin anywhere, but their ending location is
-significant. Beams can end on a beat, or at durations specified by the
-properties in
-@code{Voice.autoBeamSettings}.
-To end beams every quarter note, for example, you could set the property
-@code{(end * * * *)} to @code{(make-moment 1
-4)}. To end beams at every three eighth notes you would set
-it to @code{(make-moment 1 8)}.
-The same syntax can be used to specify beam
-starting points using
-@code{(begin * * * *)}, eg:
-@quotation
+
+
+
+@cindex Grace music
+@cindex @code{\grace}
+@cindex ornaments
+@cindex grace notes
+@cindex @code{graceAlignPosition}
+
@example
-\property Voice.autoBeamSettings \override
- #'(end * * * *) = #(make-moment 1 4)
-\property Voice.autoBeamSettings \override
- #'(begin * * * *) = #(make-moment 1 8)
+ \grace @var{musicexpr}
@end example
-@end quotation
-To allow different settings for different time signatures, instead of
-the first two asterisks @code{* *} you can specify a time signature; use
-@code{(end N M * *)} to restrict the definition to
-`@var{N}@code{/}@var{M}' time. For example, to specify beams ending
-only for 6/8 time you would use the property @code{(end 6 8 * *)}.
+A grace note expression has duration 0; the next real note is
+assumed to be the main note.
-To allow different endings for notes of different durations, instead of
-th last two asterisks you can specify a duration; use @code{(end * * N
-M)} to restrict the definition to beams that contain notes of
-`@var{N}@code{/}@var{M}' duration.
+You cannot have the grace note after the main note, in terms of
+duration, and main notes, but you can typeset the grace notes to the
+right of the main note using the property
+@code{graceAlignPosition}.
+@cindex @code{flagStyle}
-For example, to specify beam endings for beams that contain 32nd notes,
-you would use @code{(end * * 1 32)}.
+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 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. This behavior can be controlled with the
+@code{flagStyle} property.
+
+@quotation
+@lilypond[fragment,verbatim]
+\relative c'' {
+ \grace c8 c4 \grace { [c16 c16] } c4
+ \grace { \property Grace.flagStyle = "" c16 } c4
+}
+@end lilypond
+@end quotation
+
+
+At present, 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 a loss. Similarly, juxtaposing two @code{\grace} sections is
+syntactically valid, but makes no sense and may cause runtime errors.
+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.
-@c. {Manual beams}
-@cindex Automatic beams
-@unnumberedsubsubsec Manual beams
+The present implementation is not robust and generally kludgy. We expect
+it to change after LilyPond 1.4. Syntax changes might also be
+implemented.
-@cindex beams, manual
-@cindex @code{]}
-@cindex @code{[}
-FIXME
-Beaming can be generated automatically; see section @ref{Automatic Beaming}.
-A beam is specified by surrounding the beamed notes with brackets
-`@code{[}' and `@code{]}'.
-@lilypond[fragment,verbatim,center]
- [a'8 a'] [a'16 a' a' a']
- [a'16 <a' c''> c'' <a' c''>]
- \times 2/3 { [e'8 f' g'] }
-@end lilypond
-@cindex @code{-}@code{-}
-@c. {Adjusting beams}
-@unnumberedsubsubsec Adjusting beams
-@cindex Adjusting beams
+@menu
+* Glissando ::
+* Dynamics::
+* Crescendo and Decrescendo::
+* Bar lines::
+@end menu
-@c. {Slur}
-@node Slur
-@subsubsection Slur
-@cindex Slur
+@c . {Glissando}
+@node Glissando
+@subsubsection Glissando
+@cindex Glissando
-@cindex slur
+@cindex @code{\glissando}
-Slurs connects chords and try to avoid crossing stems. A slur is
-started with @code{(} and stopped with @code{)}. The
-starting @code{(} appears to the right of the first note in
-the slur. The terminal @code{)} appears to the left of the
-first note in the slur. This makes it possible to put a note in
-slurs from both sides:
+A glissando line can be requested by attaching a @code{\glissando} to a
+note:
-@lilypond[fragment,verbatim,center]
- f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
+@quotation
+@lilypond[fragment,relative,verbatim]
+ c'' \glissando c'
@end lilypond
+@end quotation
+Printing of an additional text (such as @emph{gliss.}) must be done
+manually.
-@c. {Adjusting slurs}
-@unnumberedsubsubsec Adjusting slurs
-@c. {Tie}
-@cindex Adusting slurs
-@node Tie
-@subsubsection Tie
-@cindex Tie
-@cindex ties
-@cindex @code{~}
+@c . {Dynamics}
+@node Dynamics
+@subsubsection Dynamics
+@cindex Dynamics
-A tie connects two adjacent note heads of the same pitch. When used
-with chords, it connects all of the note heads whose pitches match.
-Ties are indicated using the tilde symbol `@code{~}'.
-If you try to tie together chords which have no common pitches, a
-warning message will appear and no ties will be created.
-@lilypond[fragment,verbatim,center]
- e' ~ e' <c' e' g'> ~ <c' e' g'>
-@end lilypond
-[sparseTies]
+@cindex @code{\ppp}
+@cindex @code{\pp}
+@cindex @code{\p}
+@cindex @code{\mp}
+@cindex @code{\mf}
+@cindex @code{\f}
+@cindex @code{\ff}
+@cindex @code{\fff}
+@cindex @code{\ffff}
+@cindex @code{\fp}
+@cindex @code{\sf}
+@cindex @code{\sff}
+@cindex @code{\sp}
+@cindex @code{\spp}
+@cindex @code{\sfz}
+@cindex @code{\rfz}
+
-@c. {Tuplet}
-@node Tuplet
-@subsubsection Tuplet
-@cindex Tuplet
-See @ref{Times}.
-@c. {Volta}
-@node Volta
-@subsubsection Volta
-@cindex Volta
-See @ref{Repeat}.
+Dynamic marks are specified by using an identifier after a note:
+@code{c4-\ff}. The available dynamic marks are:
+@code{\ppp}, @code{\pp}, @code{\p}, @code{\mp}, @code{\mf}, @code{\f},
+@code{\ff}, @code{\fff}, @code{\fff}, @code{\fp}, @code{\sf},
+@code{\sff}, @code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}.
-@c. {Crescendo and Decrescendo}
+@c . {Crescendo and Decrescendo}
@node Crescendo and Decrescendo
@subsubsection Crescendo and Decrescendo
+
@cindex Crescendo and Decrescendo
@cindex crescendo
@cindex @code{\cr}
< f''1 { s4 \< \! s2 \> \! s4 } >
@end lilypond
-[todo: text cr]
-
-
-@c. {Text spanner}
-@node Text spanner
-@subsubsection Text spanner
-@cindex Text spanner
-
-Have crescendo set a text spanner instead of hairpin
+You can also use a text saying @emph{cresc.} instead of hairpins. Here
+is an example how to do it:
@lilypond[fragment,relative,verbatim]
\context Voice {
}
@end lilypond
-@c. {Ottava}
-@node Ottava
-@subsubsection Ottava
-@cindex Ottava
-@unnumberedsubsubsec Ottava
-@lilypond[fragment,relative,verbatim]
- a'''' b c a
- \property Voice.TextSpanner \set #'type = #'dotted-line
- \property Voice.TextSpanner \set #'edge-height = #'(0 . 1.5)
- \property Voice.TextSpanner \set #'edge-text = #'("8va " . "")
- \property Staff.centralCPosition = #-13
- a\spanrequest \start "text" b c a \spanrequest \stop "text"
-@end lilypond
+@c . {Bar lines}
+@node Bar lines
+@subsubsection Bar lines
+@cindex Bar lines
+@cindex @code{\bar}
+@cindex measure lines
+@cindex repeat bars
-@c. {Text crescendo and decrescendo}
-@unnumberedsubsubsec Text crescendo and decrescendo
+@example
+ \bar @var{bartype};
+@end example
-TODO
+This is a short-cut for doing
+@example
+ \property Score.whichBar = @var{bartype}
+@end example
-@c. {Span requests}
-@node Span requests
-@subsubsection Span requests
-@cindex Span requests
+You are encouraged to use @code{\repeat} for repetitions. See
+@ref{Repeats}, and the documentation of @code{whichBar} in
+@ref{(lilypond-internals)LilyPond context properties}.
-@cindex @code{\spanrequest}
-@example
- \spanrequest @var{startstop} @var{type}
-@end example
-@cindex @code{\start}
-@cindex @code{\stop}
+[FIXME]
-Define a spanning request. The @var{startstop} parameter is either -1
-(@code{\start}) or 1 (@code{\stop}) and @var{type} is a string that
-describes what should be started. Supported types are @code{crescendo},
-@code{decrescendo}, @code{beam}, @code{slur}. This is an internal
-command. Users should use the shorthands which are defined in the
-initialization file @file{spanners.ly}.
-You can attach a (general) span request to a note using
+@c . {Bar check}
+@node Bar check
+@subsection Bar check
+@cindex Bar check
-@lilypond[fragment,verbatim,center]
- c'4-\spanrequest \start "slur"
- c'4-\spanrequest \stop "slur"
-@end lilypond
+@cindex bar check
+@cindex @code{barCheckNoSynchronize}
+@cindex @code{|}
-The slur syntax with parentheses is a shorthand for this.
+Whenever a bar check is encountered during interpretation, a warning
+message is issued if it doesn't fall at a measure boundary. This can
+help you find errors in the input. Depending on the value of
+@code{barCheckNoSynchronize}, the beginning of the measure will be
+relocated, so this can also be used to shorten measures.
+
+A bar check is entered using the bar symbol, @code{|}
+
+
+
+
+
+@c . {Repeats}
+@node Repeats
+@section Repeats
+
+
+@cindex repeats
+@cindex @code{\repeat}
+
+In order to specify repeats, use the @code{\repeat}
+keyword. Since repeats look and sound differently when played or
+printed, there are a few different variants of repeats.
+
+@table @asis
+@item unfolded
+Repeated music is fully written (played) out. Useful for MIDI
+output.
+
+@item volta
+This is the normal notation: Repeats are not written out, but
+alternative endings (voltas) are printed, left to right.
+
+@item folded
+Alternative endings are written stacked. Which is unfortunately not
+practical for anything right now.
+
+@item tremolo
+Make tremolo beams.
+@end table
-@c. {Ornaments}
-@node Ornaments
-@subsection Ornaments
-@cindex Ornaments
@menu
-* Articulation::
-* Text scripts::
-* Grace notes::
-* Stem tremolo::
-* Arpeggio::
-* Glissando ::
-* Dynamics::
-* Bar lines::
-* Breath marks::
-* Rehearsal marks::
+* Repeat syntax::
+* Manual repeat commands::
+* Tremolo repeats::
+* Tremolo subdivision::
@end menu
-@c. {Articulation}
-@node Articulation
-@subsubsection Articulation
-@cindex Articulation
+@node Repeat syntax
+@subsection Repeat syntax
-@cindex articulations
-@cindex scripts
-@cindex ornaments
+The syntax for repeats is
-A variety of symbols can appear above and below notes to indicate
-different characteristics of the performance. These symbols can be
-added to a note with `@var{note}@code{-\}@var{name}'. Numerous symbols
-are defined in @file{script.ly} and @file{script.scm}. Symbols can be
-forced to appear above or below the note by writing
-`@var{note}@code{^\}@var{name}' and `@var{note}@code{_\}@var{name}'
-respectively. Here is a chart showing symbols above notes, with the
-name of the corresponding symbol appearing underneath.
+@example
+ \repeat @var{variant} @var{repeatcount} @var{repeatbody}
+@end example
-@lilypond[]
+If you have alternative endings, you may add
- \score {
- < \notes {
- \property Score.LyricSyllable \override #'font-family =
-#'typewriter
- \property Score.LyricSyllable \override #'font-shape = #'upright
- c''-\accent c''-\marcato c''-\staccatissimo c''-\fermata
- c''-\stopped c''-\staccato c''-\tenuto c''-\upbow
- c''-\downbow c''^\lheel c''-\rheel c''^\ltoe
- 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
- }
- \context Lyrics \lyrics {
- accent__ marcato__ staccatissimo__ fermata
- stopped__ staccato__ tenuto__ upbow
- downbow__ lheel__ rheel__ ltoe
- rtoe__ turn__ open__ flageolet
- reverseturn__ trill__ prall__ mordent
- prallprall__ prallmordent__ uprall__ downprall
- thumb__ segno__ coda
- }
- >
- \paper {
- linewidth = 5.875\in;
- indent = 0.0;
- }
+@cindex @code{\alternative}
+@example
+ \alternative @code{@{} @var{alternative1}
+ @var{alternative2}
+ @var{alternative3} @dots{} @code{@}}
+@end example
+
+where each @var{alternative} is a Music expression.
+
+Normal notation repeats are used like this:
+
+@quotation
+
+@lilypond[fragment,verbatim]
+ c'1
+ \repeat volta 2 { c'4 d' e' f' }
+ \repeat volta 2 { f' e' d' c' }
+@end lilypond
+@end quotation
+
+With alternative endings:
+
+@quotation
+
+@lilypond[fragment,verbatim]
+ c'1
+ \repeat volta 2 {c'4 d' e' f'}
+ \alternative { {d'2 d'} {f' f} }
+@end lilypond
+@end quotation
+
+Folded repeats look like this:@footnote{Folded repeats offer little
+more over simultaneous music. However, it is to be expected that
+more functionality -- especially for the MIDI backend -- will be
+implemented at some point in the future.}
+
+@quotation
+
+@lilypond[fragment,verbatim]
+ c'1
+ \repeat fold 2 {c'4 d' e' f'}
+ \alternative { {d'2 d'} {f' f} }
+
+@end lilypond
+@end quotation
+
+
+If you don't give enough alternatives for all of the repeats, then
+the first alternative is assumed to be repeated often enough to equal
+the specified number of repeats.
+
+@quotation
+@lilypond[fragment,verbatim]
+\context Staff {
+ \relative c' {
+ \partial 4;
+ \repeat volta 3 { e | c2 d2 | e2 f2 | }
+ \alternative { { g4 g g } { a | a a a a | b2. } }
}
+}
@end lilypond
+@end quotation
-@c. {Text scripts}
-@node Text scripts
-@subsubsection Text scripts
-@cindex Text scripts
-FIXME: markup
+As you can see, LilyPond doesn't remember the timing information, nor
+are slurs or ties repeated, so you have to reset timing information
+after a repeat, eg using bar-checks, @code{Score.measurePosition} or
+@code{\partial}. We hope to fix this after 1.4.
-In addition, it is possible to place arbitrary strings of text or
-@TeX{} above or below notes by using a string instead of an
-identifier: @code{c^"text"}. Fingerings
-can be placed by simply using digits. All of these note ornaments
-appear in the printed output but have no effect on the MIDI rendering of
-the music.
+It is possible to nest @code{\repeat}, although it probably is only
+meaningful for unfolded repeats.
-@c. {Fingerings}
-@unnumberedsubsubsec Fingerings
-@cindex Fingerings
+@node Manual repeat commands
+@subsection Manual repeat commands
-To save typing, fingering instructions (digits 0 to 9 are
-supported) and single characters shorthands exist for a few
-common symbols
+@cindex @code{repeatCommands}
-@lilypond[]
- \score {
- \notes \context Voice {
- \property Voice.TextScript \set #'font-family = #'typewriter
- \property Voice.TextScript \set #'font-shape = #'upright
- c''4-._"c-." s4
- c''4--_"c-{}-" s4
- c''4-+_"c-+" s4
- c''4-|_"c-|" s4
- c''4->_"c->" s4
- c''4-^_"c-\\^{ }" s4
- c''4-1_"c-1" s4
- c''4-2_"c-2" s4
- c''4-3_"c-3" s4
- c''4-4_"c-4" s4
- }
- \paper {
- linewidth = 5.875 \in;
- indent = 0.0;
- }
- }
+The property @code{repeatCommands} can be used to control the layout of
+repeats. Its value is a Scheme list of repeat commands, where each repeat
+command can be
+
+@table @code
+@item 'start-repeat
+ Print a |: bar line
+@item 'stop-repeat
+ Print a :| bar line
+@item (volta . @var{text})
+ Print a volta bracket saying @var{text}.
+@item (volta . #f)
+ Stop a running volta bracket
+@end table
+@lilypond[verbatim, fragment]
+ c''4
+ \property Score.repeatCommands = #'((volta "93") end-repeat)
+ c4 c4
+ \property Score.repeatCommands = #'((volta #f))
+ c4 c4
@end lilypond
-@cindex @code{\textscript}
+@node Tremolo repeats
+@subsection Tremolo repeats
+@cindex tremolo beams
-@example
+To place tremolo marks between notes, use @code{\repeat} with tremolo
+style.
+@lilypond[verbatim,center]
+\score {
+ \context Voice \notes\relative c' {
+ \repeat "tremolo" 8 { c16 d16 }
+ \repeat "tremolo" 4 { c16 d16 }
+ \repeat "tremolo" 2 { c16 d16 }
+ \repeat "tremolo" 4 c16
+ }
+ \paper {
+ linewidth = 40*\staffspace;
+ }
+}
+@end lilypond
- \textscript @var{text} @var{style}
-@end example
+@node Tremolo subdivision
+@subsection Tremolo subdivision
+@cindex tremolo marks
+@cindex @code{tremoloFlags}
-Defines a text to be printed over or under a note. @var{style} is a
-string that may be one of @code{roman}, @code{italic}, @code{typewriter},
-@code{bold}, @code{Large}, @code{large}, @code{dynamic} or @code{finger}.
+Tremolo marks can be printed on a single note by adding
+`@code{:}[@var{length}]' after the note. The length must be at least 8.
+A @var{length} value of 8 gives one line across the note stem. If the
+length is omitted, then the last value is used, or the value of the
+@code{tremoloFlags} property if there was no last value.
-You can attach a general textscript request using this syntax:
+@lilypond[verbatim,fragment,center]
+ c'2:8 c':32
+@end lilypond
-@quotation
+Tremolos in this style do not carry over into the MIDI output.
-@example
-c4-\textscript "6" "finger"
-c4-\textscript "foo" "normal"
-@end example
+Using this mechanism pays off when you entering many tremolos, since the
+default argument saves a lot of typing.
-@end quotation
-This is equivalent to @code{c4-6 c4-"foo"}.
-@cindex @code{\script}
-@cindex scripts
-@example
- \script @var{alias}
+@c . {Piano music}
+@node Piano music
+@section Piano music
+@menu
+* Automatic staff changes::
+* Manual staff switches::
+* Pedals::
+* Arpeggio::
+* Follow Thread::
+@end menu
+
+
+@c . {Automatic staff changes}
+@node Automatic staff changes
+@subsection Automatic staff changes
+@cindex Automatic staff changes
+
+Voices can be switched from top to bottom staff automatically. The
+syntax for this is
+@example
+ \autochange @var{contexttype} @var{musicexp}
@end example
-@cindex @code{\script}
+This will switch notation 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
+of pitch (central C is the turning point), and it looks ahead skipping
+over rests to switch rests in advance.
+
+@lilypond[verbatim,singleline]
+\score { \notes \context PianoStaff <
+ \context Staff = "up" {
+ \autochange Staff \context Voice = VA < \relative c' { g4 a b c d r4 a g } >
+ }
+ \context Staff = "down" {
+ \clef bass;
+ s1*2
+ } > }
+@end lilypond
-Prints a symbol above or below a note. The argument is a string which
-points into the script-alias table defined in @file{scm/script.scm}, for
-information on how to add scripts, read the comments in that file.
-Usually the @code{\script} keyword is not used directly. Various
-helpful identifier definitions appear in @file{script.ly}.
+@node Manual staff switches
+@subsection Manual staff switches
-@c. {Grace notes}
-@node Grace notes
-@subsubsection Grace notes
-@cindex Grace notes
+@cindex manual staff switches
+@cindex staff switch, manual
-See @ref{Grace music}.
+@cindex @code{\translator}
+@example
+ \translator @var{contexttype} = @var{name}
+@end example
-@c. {Stem tremolo}
-@node Stem tremolo
-@subsubsection Stem tremolo
-@cindex tremolo marks
-@cindex @code{tremoloFlags}
+A music expression indicating that the context which is a direct
+child of the a context of type @var{contexttype} should be shifted to
+a context of type @var{contexttype} and the specified name.
-[FIXME: should be \repeat]
+Usually this is used to switch staffs in Piano music, e.g.
-Tremolo marks can be printed on a single note by adding
-`@code{:}[@var{length}]' after the note. The length must be at
-least 8. A @var{length} value of 8 gives one line across
-the note stem. If the length is omitted, then the last value is
-used, or the value of the @code{tremoloFlags} property if there was
-no last value.
+@example
+ \translator Staff = top @var{Music}
+@end example
-@lilypond[verbatim,fragment,center]
- c'2:8 c':32
+
+@c . {Pedals}
+@node Pedals
+@subsection Pedals
+@cindex Pedals
+
+Piano pedals can be entered using the following span requests of the
+types @code{Sustain}, @code{UnaChorda} and @code{Sostenuto}:
+@lilypond[fragment,verbatim]
+c''4 \spanrequest \start "Sustain" c4 c4 \spanrequest \stop "Sustain"
@end lilypond
+For these verbose expressions, standard shorthands have been defined:
+@table @code
+@item sustainDown
+@item sustainUp
+@item unaChorda
+@item treChorde
+@item sostenutoDown
+@item sostenutoUp
+@end table
+
+The symbols that are printed can be modified by setting pedalXStrings,
+where one of the pedal types. Refer to the generaetd documentation for
+more information.
+
+Currently, brackets are not supported, only text markings (ie. Ped*
+style).
-@c. {Arpeggio}
+
+@c . {Arpeggio}
@node Arpeggio
-@subsubsection Arpeggio
+@subsection Arpeggio
@cindex Arpeggio
@cindex broken arpeggio
@cindex @code{\arpeggio}
-You can specify an @rgrob{Arpeggio} sign on a chord by issuing an
-@c FIXME
-
-@code{\arpeggio} request:
+You can specify an arpeggio sign on a chord by attaching an
+@code{\arpeggio} to a note of the chord.
@quotation
@end lilypond
@end quotation
-Typesetting of simultanious chords with arpeggios can be controlled with
-the property @code{PianoStaff.connectArpeggios} @footnote{ FIXME:
-connectArpeggios. Can't find the English terms for two kinds of
-arpeggio (Dutch: gebroken arpeggio vs doorlopend arpeggio).} By
-default, LilyPond prints broken arpeggios; when set to true, one
-extended arpeggio sign is printed.
+When an arpeggio crosses staffs in piano music, you attach an arpeggio
+to the chords in both staffs, and set
+@code{PianoStaff.connectArpeggios}. LilyPond will connect the arpeggios
+in both staffs.
@quotation
@lilypond[fragment,relative,verbatim]
\context PianoStaff <
\property PianoStaff.connectArpeggios = ##t
- \context Staff \context Voice <c''\arpeggio e g c>
- \context Staff=other \context Voice <c,\arpeggio e g>
+ \context Voice = one { <c''\arpeggio e g c> }
+ \context Voice = other { \clef bass; <c,,\arpeggio e g>}
>
@end lilypond
@end quotation
-@c. {Glissando}
-@node Glissando
-@subsubsection Glissando
-@cindex Glissando
-
-@cindex @code{\glissando}
-
-A @rgrob{Glissando} line can be requested by issuing a
-FIXME
-
-@code{\glissando} request:
-
-
-@quotation
-@lilypond[fragment,relative,verbatim]
- c'' \glissando c'
-@end lilypond
-@end quotation
-
-Printing of the additional text @samp{gliss.} must be done manually.
-
-@c. {Follow Thread}
-@subsubsection Follow Thread
+@c . {Follow Thread}
+@node Follow Thread
+@subsection Follow Thread
@cindex follow thread
@cindex staff switching
@cindex cross staff
-@c Documented here because it looks like a glissando...
+[todo: different name, eg. voice line ? ]
+
@cindex @code{followThread}
-A glissando-like line can be printed to connect notes whenever a thread
-switches to another staff. This is enabled if the property
+
+Whenever a voice switches to another staff a line connecting the notes
+can be printed automatically. This is enabled if the property
@code{PianoStaff.followThread} is set to true:
@quotation
@end quotation
+@c . {Lyrics}
+@node Lyrics
+@section Lyrics
-@c. {Dynamics}
-@node Dynamics
-@subsubsection Dynamics
-@cindex Dynamics
-
-@unnumberedsubsec Dynamics
-
-@cindex @code{\ppp}
-@cindex @code{\pp}
-@cindex @code{\p}
-@cindex @code{\mp}
-@cindex @code{\mf}
-@cindex @code{\f}
-@cindex @code{\ff}
-@cindex @code{\fff}
-@cindex @code{\ffff}
-@cindex @code{\fp}
-@cindex @code{\sf}
-@cindex @code{\sff}
-@cindex @code{\sp}
-@cindex @code{\spp}
-@cindex @code{\sfz}
-@cindex @code{\rfz}
-
-Dynamic marks are specified by using an identifier after a note:
-@code{c4-\ff} (the dash is optional for dynamics: `@code{c4 \ff})'.
-The available dynamic marks are:
-@code{\ppp},
-@code{\pp}, @code{\p}, @code{\mp},
-@code{\mf}, @code{\f}, @code{\ff},
-@code{\fff}, @code{\fff},
-@code{\fp}, @code{\sf},
-@code{\sff}, @code{\sp},
-@code{\spp}, @code{\sfz}, and
-@code{\rfz}.
-
-See also @ref{Crescendo and Decrescendo}
-
-
-@c. {Bar lines}
-@node Bar lines
-@subsubsection Bar lines
-@cindex Bar lines
-
-@cindex @code{\bar}
-@cindex measure lines
-@cindex repeat bars
-
-@example
- \bar @var{bartype};
-@end example
-
-This is a short-cut for doing
-@example
- \property Score.whichBar = @var{bartype}
-@end example
-
-You are encouraged to use @code{\repeat} for repetitions. See
-@ref{Repeat}, @ref{Volta}, and the documentation of @code{whichBar} in
-@ref{(lilypond-internals)LilyPond context properties}.
-
-
-[FIXME]
-
-@c. {Breath marks}
-@node Breath marks
-@subsubsection Breath marks
-@cindex Breath marks
-
-@c. {Rehearsal marks}
-@node Rehearsal marks
-@subsubsection Rehearsal marks
-@cindex Rehearsal marks
-@cindex mark
-@cindex @code{\mark}
-
-@example
- \mark @var{unsigned};
-@cindex @code{Mark_engraver}
- \mark @var{string};
-@end example
-
-Prints a mark over or under the staff.
-
-
-@c. {Bar check}
-@node Bar check
-@subsection Bar check
-@cindex Bar check
-
-@cindex bar check
-@cindex @code{barCheckNoSynchronize}
-@cindex @code{|}
-
-
-Bar checks help you find errors in the input: Whenever one is
-encountered during interpretation, a warning message is issued if it
-doesn't fall at a measure boundary. Depending on the value of
-@code{barCheckNoSynchronize}, the beginning of the measure will be
-relocated, so this can also be used to shorten measures.
-
-A bar check is entered using the bar symbol, @code{|}
-
-This can help you finding errors in the input.
-
-
-@c. {Lyrics entry}
-@node Lyrics entry
-@section Lyrics entry
-@cindex Lyrics entry
@menu
* Lyrics mode::
* Printing lyrics::
-* Lyric hyphen::
-* Lyric extender::
-* Addlyrics::
+* Automatic syllable durations::
+* More stanzas::
@end menu
-@c. {Lyrics mode}
+@c . {Lyrics mode}
@node Lyrics mode
@subsection Lyrics mode
@cindex Lyrics mode
Since combinations of numbers and dots are used for indicating
durations, you can not enter real numbers in this mode.
-[todo: include short table showing differences]
-
@cindex lyrics expressions
Syllables are entered like notes, with pitches replaced by text. For
Spaces can be introduced into a lyric either by using quotes
(@code{"}) or by using an underscore without quotes: @code{He_could4
not4}. All unquoted underscores are converted to spaces. Printing
-lyrics is discussed in section @ref{lyricprint}.
+lyrics is discussed in the next section.
-@c. {Printing Lyrics}
+@c . {Printing lyrics}
@node Printing lyrics
-@subsection lyricprint
+@subsection Printing lyrics
@cindex lyrics
-@cindex printing!lyrics
-
-
-Lyric syllables must be interpreted within a @code{Lyrics} context
-
-@cindex context!Lyrics
- for printing them.
-
-Here is a full example:
+Lyric syllables must be interpreted within a @code{Lyrics} context for
+printing them. Here is a full example:
@quotation
@lilypond[verbatim]
@end lilypond
@end quotation
+
+
+
+@cindex extender
+@cindex lyric extender
+
You may want a continuous line after the syllables to show melismata.
To achieve this effect, add a @code{__} lyric as a separate word
after the lyric to be extended. This will create an extender, a line
@end lilypond
@end quotation
-
+@cindex Lyric hyphen
+
If you want to have hyphens centered between syllables (rather than
attached to the end of the first syllable) you can use the special
`@code{-}@code{-}' lyric as a separate word between syllables. This
}
@end lilypond
-@end quotation
-
-
-
-
-@c. {Lyric hyphen}
-@node Lyric hyphen
-@subsection Lyric hyphen
-@cindex Lyric hyphen
-
-The syntax for a spanning hyphen (i.e., a hyphen that will be printed
-between two lyric syllables) is `@code{-}@code{-}'.
-
-@c. {Lyric extender}
-@node Lyric extender
-@subsection Lyric extender
-@cindex Lyric extender
-@cindex extender
-@cindex lyric extender
-@cindex hyphen
-
-The syntax for an extender mark is @code{__}. This syntax can only
-be used within lyrics mode.
-
-
+@end quotation
-@c. {Addlyrics}
-@node Addlyrics
-@subsection Addlyrics
-@cindex Addlyrics
+@c . {Automatic syllable durations}
+@node Automatic syllable durations
+@subsection Automatic syllable durations
+@cindex Automatic syllable durations
-[explain automatic phrasing]
@cindex automatic lyric durations
@cindex @code{\addlyrics}
It is valid (but probably not very useful) to use notes instead of
lyrics for @var{musicexpr2}.
+@node More stanzas
+@subsection More stanzas
+
+@cindex phrasing
+
+If you have multiple stanzas printed underneath each other, the separate
+syllables should be aligned around punctuation. LilyPond can do this if
+you explain it which lyric lines belong to which melody.
+
+To this end, give the Voice context an identity, and set the LyricsVoice
+to name starting with that identity. In the following example, the Voice
+identity is @code{duet}, and the identities of the LyricsVoices are
+@code{duet-1} and @code{duet-2}.
+
+
+@lilypond[singleline,verbatim]
+\score {
+\addlyrics
+ \notes \relative c'' \context Voice = duet { \time 3/4; g2 e4 a2 f4 g2. }
+ \lyrics \context Lyrics <
+ \context LyricsVoice = "duet-1" {
+ \property LyricsVoice . stanza = "Bert"
+ Hi, my name is bert. }
+ \context LyricsVoice = "duet-2" {
+ \property LyricsVoice . stanza = "Ernie"
+ Ooooo, ch\'e -- ri, je t'aime. }
+ >
+}
+@end lilypond
+
+You can add stanza numbers by setting @code{LyricsVoice.Stanza} (for the
+first system) and @code{LyricsVoice.stz} for the following systems.
+@cindex stanza numbering
-@c. {Chord entry}
-@node Chord entry
-@section Chord entry
-@cindex Chord entry
+
+@c . {Chords}
+@node Chords
+@section Chords
+@cindex Chords
+
+[chords vs. simultaneous music]
@menu
* Chords mode::
* Printing named chords::
@end menu
-@c. {Chords mode}
+@c . {Chords mode}
@node Chords mode
@subsection Chords mode
@cindex Chords mode
and carets are used to indicate chord additions and subtractions,
so scripts can not be entered in Chord mode.
-@c. {Entering named chords}
+@c . {Entering named chords}
@node Entering named chords
@subsection Entering named chords
@cindex Chords names
@end lilypond
-The most interesting application is printing chords using chord names,
-See @ref{Chord names}.
+The most interesting application is printing chord names, which is
+explained in the next subsection.
You should not combine @code{\relative} with named chords. [FIXME]
-@c. {Printing named chords}
+@c . {Printing named chords}
@node Printing named chords
@subsection Printing named chords
+
+
+
+
+@cindex printing chord names
@cindex chord names
@cindex chords
-
-@cindex printing!chord names
@cindex @code{ChordNames}
@cindex @code{ChordNameVoice}
the notation described above, or directly using simultaneous music.
@quotation
-@lilypond[verbatim]
+@lilypond[verbatim,singleline]
scheme = \notes {
\chords {a1 b c} <d f g> <e g b>
}
\context ChordNamesVoice \scheme
\context Staff \transpose c'' \scheme
>
- \paper { linewidth = -1.; }
}
@end lilypond
@end quotation
chord names when chords are entered as a list of pitches:
@quotation
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
scheme = \notes {
<c'1 e' g'>
<e' g' c''>
\context ChordNamesVoice \scheme
\context Staff \scheme
>
- \paper { linewidth = -1.; }
}
@end lilypond
@end quotation
added bass note, append @code{/+<notename}:
@quotation
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
scheme = \chords {
d1 d/a d/+gis
}
\context ChordNames \scheme
\context Staff \transpose c'' \scheme
>
- \paper { linewidth = -1.; }
}
@end lilypond
@end quotation
@end lilypond
@end quotation
+@node Writing parts
+@section Writing parts
+
+@c . {Transpose}
+@menu
+* Rehearsal marks::
+* Instrument names::
+* Transpose::
+* Sound output for transposing instruments::
+* Multi measure rests::
+* Automatic part combining::
+@end menu
+
+@c . {Rehearsal marks}
+@node Rehearsal marks
+@subsection Rehearsal marks
+@cindex Rehearsal marks
+@cindex mark
+@cindex @code{\mark}
+@cindex @code{Mark_engraver}
+
+@example
+ \mark @var{unsigned};
+ \mark @var{string};
+ \mark ;
+@end example
+
+With this command, you can print a rehearsal mark above the system. You
+can provide a number, a string or a markup text as argument. If there is
+no argument, the property @code{rehearsalMark} is used and automatically
+incremented.
+
+@lilypond[fragment,verbatim]
+\relative c'' {
+ c1 \mark "A2";
+ c1 \mark ;
+ c1 \mark ;
+ c1 \mark "12";
+ c1 \mark #'(music "scripts-segno") ;
+ c1
+}
+@end lilypond
+
+@node Instrument names
+@subsection Instrument names
+
+You can specify an instrument name for a staff by setting
+@code{Staff.instrument} and @code{Staff.instr}. This will print a string
+before the start of the staff. For the first start, @code{instrument} is
+used, for the next ones @code{instr} is used.
+
+@lilypond[verbatim,singleline]
+\score { \notes {
+ \property Staff.instrument = "instr " { c''4 } }
+ \paper {
+ \translator { \StaffContext
+ \consists "Instrument_name_engraver"; } } }
+@end lilypond
+
+This requires that you add the @code{Instrument_name_engraver} to the
+staff context.
+
+
+@node Transpose
+@subsection Transpose
+@cindex Transpose
+@cindex transposition of pitches
+@cindex @code{\transpose}
+
+A music expression can be transposed with @code{\transpose}. The syntax
+is
+@example
+ \transpose @var{pitch} @var{musicexpr}
+@end example
+
+This means that middle C in @var{musicexpr} is transposed to
+@var{pitch}.
+
+@code{\transpose} distinguishes between enharmonic pitches: both
+@code{\transpose cis'} or @code{\transpose des'} will transpose up half
+a tone. The first version will print sharps and the second version
+will print flats.
+
+@quotation
+@lilypond[fragment,verbatim]
+\context Staff {
+ \clef "F";
+ { \key e \major; c d e f }
+ \clef "G";
+ \transpose des'' { \key e \major; c d e f }
+ \transpose cis'' { \key e \major; c d e f }
+}
+
+@end lilypond
+@end quotation
+
+If you want to use both @code{\transpose} and @code{\relative}, then
+you must use @code{\transpose} first. @code{\relative} will have no
+effect music that appears inside a @code{\transpose}.
+
+@node Sound output for transposing instruments
+@subsection Sound output transposing instruments
+
+When you want to play 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
+@code{transposing}.
+
+@cindex @code{transposing}
+
+@example
+ \property Staff.instrument = #"Cl. in B-flat"
+ \property Staff.transposing = #-2
+@end example
+
+
+@c . {Multi measure rests}
+@node Multi measure rests
+@subsection Multi measure rests
+@cindex Multi measure rests
+
+@cindex @code{R}
+
+Multi measure rests are entered using `@code{R}'. It is specifically
+meant for entering parts: the rest can expand to fill a score with
+rests, or it can be printed as a single multimeasure rest This expansion
+is controlled by the property @code{Score.skipBars}. If this is set to true,
+Lily will not expand empty measures, and the appropriate number is added
+automatically.
+
+@lilypond[fragment,verbatim]
+ \time 3/4; R2.*2 \property Score.skipBars = ##t R2.*17 R2.*4
+@end lilypond
+
+Currently, there is no way to condense multiple rests into a single
+multimeasure rest.
+
+@cindex condensing rests
+
+@node Automatic part combining
+@subsection Automatic part combining
+
+[TODO]
+
+
+@c . {Custodes}
+@node Custodes
+@section Custodes
+@cindex Custos
+@cindex Custodes
+
+A @emph{custos} (plural: @emph{custodes}; latin word for "guard") is a
+staff context symbol that appears at the end of a staff line. It
+anticipates the pitch of the first note(s) of the following line and
+thus helps the player or singer to manage line breaks during
+performance, thus enhancing readability of a score.
+
+@quotation
+@lilypond[verbatim]
+\score {
+ \notes { c'1 d' e' d' \break c' d' e' d' }
+ \paper {
+ \translator {
+ \StaffContext
+ \consists Custos_engraver;
+ Custos \override #'style = #'mensural;
+ }
+ }
+}
+@end lilypond
+@end quotation
+
+Custodes were frequently used in music notation until the 16th century.
+There were different appearences for different notation styles.
+Nowadays, they have survived only in special forms of musical notation
+such as via the 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
+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
+@code{mensural}.
+
+@quotation
+\paper @{
+ \translator @{
+ \StaffContext
+ \consists Custos_engraver;
+ Custos \override #'style = #'mensural;
+ @}
+@}
+@end quotation
+
+The property can also be set locally, for example in a @code{\notes}
+block:
+
+@quotation
+\notes @{
+ \property Staff.Custos \override #'style = #'vaticana
+ c'1 d' e' d' \break c' d' e' d'
+@}
+@end quotation
+
+@c . {Tuning output}
+@node Tuning output
+@section Tuning output
+
+LilyPond tries to take as much formatting as possible out of your
+hands. Nevertheless, there are situations where it needs some help, or
+where you want to override its decisions.
+
+Here we discuss how you can do that.
+
+Notational output is specified in so called grobs (graphic
+objects). Each grob carries with it a set of properties (grob
+properties) specific to that grob. For example, a stem grob has grob
+properties that specify its direction, length and thickness.
+
+The most common way of tuning the output is to alter the values of these
+properties. There are two ways of doing that: first, you can
+specifically select a set of grobs at one point, and set properties as
+you wish, or secondly, you can (temporarily) modify the definition of a
+grob, thereby affecting an entire group of grobs.
+
+@menu
+* Tuning groups of grobs ::
+* Tuning per grob ::
+* What to tune?::
+* Text markup::
+@end menu
+
+@node Tuning groups of grobs
+@subsection Tuning groups of grobs
+
+@cindex grob description
+
+A grob definition is an association list, that is stored in a context
+property. By assigning to that property (using plain @code{\property}),
+you can change the resulting grobs.
+@lilypond[verbatim, fragment]
+c'4 \property Voice.Stem = #'((meta . ((interfaces . ())))) c'4
+@end lilypond
+The @code{\property} statement effectively empties the definition of the
+Stem object. One of the effects is that property specifying how it
+should be printed is erased, with the effect of rendering it invisible.
+
+@cindex \override
+@cindex \revert
+@cindex \set
+
+
+This mechanism is fairly crude, since you can only set, but not modify,
+the definition of a grob. For this reason, there is a more advanced
+mechanism: you can add a property on top of an existing definition, or
+remove a property: @code{\override} adds a settings, @code{\revert}
+removes that setting.
+@lilypond[verbatim]
+c'4 \property Voice.Stem \override #'thickness = #4.0
+c'4 \property Voice.Stem \revert #'thickness
+c'4
+@end lilypond
+
+For the digirati, the grob description is an Scheme association
+list. Since it is singly linked, we can treat it as a stack, and
+@code{\override} and @code{\revert} are just push and pop
+operations. This pushing and popping is also used in the
+@code{autoBeamSettings} property.
+
+If you revert a setting which was not set in the first place, then it
+has no effect. However, if the setting was set as a system default, it
+may remove the default value, and this may give surprising results,
+including crashes. In other words, if you use @code{\override} and
+@code{\revert}, be sure to balance the overrides and reverts.
+
+If balancing them is too much work, use the following shorthand:
+@code{\set} performs a revert followed by an override:
+@example
+\property Voice.Stem \set #'thickness = #2.0
+@end example
+
+Formally the syntax for these constructions is
+@example
+\property @var{context}.@var{grobname} \override @var{symbol} = @var{value}
+\property @var{context}.@var{grobname} \set @var{symbol} = @var{value}
+\property @var{context}.@var{grobname} \revert @var{symbol}
+@end example
+Here @var{symbol} is a Scheme expression of symbol type, @var{context}
+and @var{grobname} are strings and @var{value} is a Scheme expression.
+
+LilyPond will hang or crash if @var{value} contains cyclic references.
+
+
+
+@node Tuning per grob
+@subsection Tuning per grob
+
+@cindex \outputproperty
+
+A second way of tuning grobs is the more arcane @code{\outputproperty}
+feature.
+Syntax is as follows
+@example
+\outputproperty @var{predicate} @var{symbol} = @var{value}
+@end example
+Here @code{predicate} is a Scheme functoin taking a grob a argument
+argument, and returning a boolean. This statement is processed by the
+@code{Output_property_engraver}. It instructs the engraver to feed all
+grobs that it sees to @var{predicate}. Whenever the predicate returns
+true, the grob property @var{symbol} will be set to @var{value}.
+
+You will need to combine this statement with @code{\context} to select
+the appropriate context to apply this to.
+
+If possible, avoid this feature: the semantics are not very clean, and
+the syntax and semantics are up for rewrite.
+
+Here are some random examples:
+
+@lilypond[fragment,verbatim,singleline]
+\relative c'' { c4
+ \context Staff \outputproperty
+ #(make-type-checker 'note-head-interface)
+ #'extra-offset = #'(0.5 . 0.75)
+ <c8 e g> }
+@end lilypond
+
+@cindex @code{extra-offset}
+
+This selects all note heads occurring at current staff level, and sets
+the @code{extra-offset} of those heads to @code{(0.5,0.75)}, shifting
+them up and right.
+
+Move the text "m.d.", but not the fingering instruction "2".
+@lilypond[verbatim,singleline]
+#(define (make-text-checker text)
+ (lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
+
+\score {
+ \notes\relative c''' {
+ \property Voice.Stem \set #'direction = #1
+ \outputproperty #(make-text-checker "m.d.")
+ #'extra-offset = #'(-3.5 . -4.5)
+ a^2^"m.d."
+ }
+}
+@end lilypond
+
+
+
+
+@node What to tune?
+@subsection What to tune?
+This all tells you how to tune grobs, but what variables are there? The
+question is not answered in this manual (although you may encounter
+some examples.).
+Grob properties are tied directly to the implementation of LilyPond, and
+they are thus a moving target. Refer to the automatically generated
+documentation of the internals (available from the website).
-@c. {Page layout}
+You need the following information
+
+@itemize @bullet
+@item
+which grob to modify
+@item
+which property to modify
+@item
+which context the grob comes from.
+@end itemize
+
+Included with the automatically generated documentation is a master list
+of grobs. Each one can be clicked, taking you to a overview of the
+available properties.
+
+There is also a master list of contexts. Clicking each takes you to an
+overview of the context, listing which grob types are created there.
+
+
+
+@node Text markup
+@subsection Text markup
+@cindex text markup
+@cindex markup text
+
+LilyPond has an internal mechanism to typeset texts. You can
+form text markup expressions by composing scheme expressions
+in the following way.
+
+@lilypond[verbatim]
+\score { \notes \relative c' {
+ b-#"text"
+ c-#'(bold "text")
+ d-#'(lines "one" (bold "text"))
+ e-#'(music (named "noteheads-2" "flags-u3"))
+}
+\paper { linewidth = 10.\cm; } }
+@end lilypond
+
+Normally, the Scheme markup text is stored in the @code{text} property
+of a grob. Formally, it is defined as follows:
+
+@example
+text: string | (head? text+)
+head: markup | (markup+)
+markup-item: property | abbrev | @var{fontstyle}
+property: (@var{key} . @var{value})
+abbrev: @code{rows lines roman music bold italic named super sub text}
+@end example
+
+The markup is broken down and converted into a list of grob properties,
+which are prepended to the grop's property list. The
+@var{key}-@var{value} pair is a grob property.
+
+The following abbreviations are currently
+defined:
+
+@table @code
+@item rows
+horizontal mode: set all text on one line (default)
+@item lines
+ vertical mode: set every text on new line
+@item roman
+ select roman font
+@item music
+ select feta font
+@item bold
+ select bold series
+@item italic
+ select italic shape
+@item named
+ lookup by character name
+@item text
+ plain text lookup (by character value)
+@item super
+ superscript
+@item sub
+ subscript
+@end table
+
+@var{fontstyle} may be any of @code{finger volta timesig mmrest mark
+script large Large dynamic}
+
+
+@c . {Page layout}
@node Page layout
@section Page layout
@cindex Page layout
* Page break::
@end menu
-@c. {Paper block}
+@c . {Paper block}
@node Paper block
@subsection Paper block
@cindex Paper block
@item An assignment. The assignment must be terminated by a
semicolon.
- @item A context definition. See section @ref{contextdefs} for
+ @item A context definition. See Section @ref{Notation contexts} for
more information on context definitions.
-@ignore
-
- FIXME
-
-
- @item
-
- A margin shape declaration. The syntax is
-@cindex @code{\shape}
- @example
-
- \shape @var{indent1}@code{,} @var{width1}@code{,}
- @var{indent2}@code{,} @var{width2} @dots{} @code{;}
- @end example
-
-
-
- Each pair of @var{indent} and @var{width} values is a dimension
- specifying how far to indent and how wide to make the line.
- The indentation and width of successive lines are specified by
- the successive pairs of dimensions. The last pair of
- dimensions will define the characeristics of all lines beyond
- those explicitly specified.
-@end ignore
-
@item \stylesheet declaration. Its syntax is
@example
\stylesheet @var{alist}
See @file{font.scm} for details of @var{alist}.
@end itemize
-@c. {Paper variables}
+@c . {Paper variables}
@node Paper variables
@subsection Paper variables
@cindex Paper variables
@item @code{staffspace}
The distance between two staff lines, calculated from the center
- of the lines. You should use either this or @code{rulethickness}
+ of the lines. You should use either this or @code{stafflinethickness}
as a unit for distances you modify.
@cindex @code{linewidth}
@item @code{linewidth}
- Sets the width of the lines. If set to -1.0, a single
- unjustified line is produced. If you use this variable, you
- probably want to define it in staff spaces, ie
- @example
- linewidth = 30 * \staffspace;
- @end example
+ Sets the width of the lines.
+
+If set to a negative value, a single
+ unjustified line is produced.
+
@cindex @code{textheight}
@item @code{textheight}
@end table
-@c. {Font size}
+
+@c . {Font size}
@node Font Size
@subsection Font size
@cindex font size
-@c. {Paper size}
+@c . {Paper size}
@node Paper size
@subsection Paper size
@cindex Paper size
-@c. {Line break}
+@c . {Line break}
@node Line break
@subsection Line break
-@cindex Line break
-
-
-@cindex @code{\penalty}
-
-@example
- \penalty @var{int} @code{;}
-@end example
-
-Discourage or encourage line breaks. See @ref{Page layout}.
-
-
-
@cindex line breaks
@cindex breaking lines
nor loose.
Occasionally you might want to override the automatic breaks; you can do
-this by specifying @code{\break} (see also @ref{Pre-defined
-Identifiers}). This will force a line break at this point. Do remember
-that line breaks can only occur at places where there are barlines. If
-you want to have a line break where there is no barline, you can force a
-barline by entering @code{\bar "";}.
+this by specifying @code{\break}. This will force a line break at this
+point. Do remember that line breaks can only occur at places where there
+are barlines. If you want to have a line break where there is no
+barline, you can force a barline by entering @code{\bar "";}.
+
+Similarly, @code{\noBreak} forbids a line break at a certain point.
+
+@cindex @code{\penalty}
+The @code{\break} and @code{\noBreak} commands are defined in terms of
+the penalty command:
+@example
+ \penalty @var{int} @code{;}
+@end example
+This imposes encourages or discourages LilyPond to make a line break
+at this point.
+@strong{Warning} do not use @code{\penalty} directly. It is rather
+kludgy, and slated for rewriting.
-@c. {Page break}
+@c . {Page break}
@node Page break
@subsection Page break
-@cindex Page break
+@cindex page breaks
+@cindex breaking pages
-Not implemented, but see @ref{Tricks}
Page breaks are normally computed by @TeX{}, so they are not under direct
-control. However, you can insert a commands into the .tex output to
+control. 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}
+[or -> Tricks? ]
-@cindex page breaks
-@cindex breaking pages
-@c. {Sound}
+@c . {Sound}
@node Sound
@section Sound
@cindex Sound
+
+LilyPond allows MIDI output, with the purpose of proof-hearing the music
+you enter. The performance lacks lots of interesting effects, such as
+swing, articulation, slurring, tieing, etc.
+
+Also note that it is not possible to use the percussion channel
+(generally channel 10 of a MIDI file).
+
@menu
* MIDI block::
* MIDI instrument names::
* Tempo::
@end menu
-@c. {MIDI block}
+@c . {MIDI block}
@node MIDI block
@subsection MIDI block
@cindex MIDI block
The contexts for MIDI output are defined in @file{ly/performer.ly}.
-@c. {MIDI instrument names}
+@c . {MIDI instrument names}
@node MIDI instrument names
@subsection MIDI instrument names
@cindex instrument names
-@c. {Tempo}
+@c . {Tempo}
@node Tempo
@subsection Tempo
@cindex Tempo
-@c. {Music entry}
+@c . {Music entry}
@node Music entry
@section Music entry
@cindex Music entry
@menu
-* Pre-defined Identifiers::
+* Relative::
* Point and click::
@end menu
-@c. {Pre-defined Identifiers}
-@node Pre-defined Identifiers
-@subsection Pre-defined Identifiers
-@cindex pre-defined identifiers
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings. Most of them are in
-@file{ly/declarations.ly} and @file{ly/property.ly}.
+@c . {Relative}
+@node Relative
+@subsection Relative
+@cindex Relative
+@cindex relative octave specification
-@table @code
-@cindex @code{\break}
- @item @code{\break}
- Force a line break in music by using a large argument for the
- keyword @code{\penalty}.
+Octaves are specified by adding @code{'} and @code{,} to pitch names.
+When you copy existing music, it is easy to accidentally put a pitch in
+the wrong octave and hard to find such an error. To prevent these
+errors, LilyPond features octave entry.
-@cindex @code{\nobreak}
- @item @code{\nobreak}
- Prevent a line break in music by using a large negative argument
- for the keyword @code{\penalty}.
+@cindex @code{\relative}
+@example
+ \relative @var{startpitch} @var{musicexpr}
+@end example
-@cindex @code{\shiftOff}
- @item @code{\shiftOff}
- Disable horizontal shifting of note heads that collide.
+The octave of notes that appear in @var{musicexpr} are calculated as
+follows: If no octave changing marks are used, the basic interval
+between this and the last note is always taken to be a fourth or less.
+ The octave changing marks @code{'} and @code{,} can then
+be added to raise or lower the pitch by an extra octave. Upon entering
+relative mode, an absolute starting pitch must be specified that will
+act as the predecessor of the first note of @var{musicexpr}.
-@cindex @code{\shiftOn}
- @item @code{\shiftOn}
- Enable note heads that collide with other note heads to be
- shifted horiztonally. Also @code{\shiftOnn} and @code{\shiftOnnn}
-set different shift values.
+This distance is determined without regarding accidentals: a
+@code{fisis} following a @code{ceses} will be put above the
+@code{ceses}.
-@cindex @code{\stemBoth}
- @item @code{\stemBoth}
- Allow stems, beams, and slurs to point either upwards or
- downwards, decided automatically by LilyPond.
+Entering scales is straightforward in relative mode.
-@cindex @code{\stemDown}
- @item @code{\stemDown}
- Force stems, beams, and slurs to point down.
+@lilypond[fragment,verbatim,center]
+ \relative c'' {
+ g a b c d e f g g, g
+ }
+@end lilypond
-@cindex @code{\stemUp}
- @item @code{\stemUp}
- Force stems, beams and slurs to point up.
+And octave changing marks are used for intervals greater than a fourth.
-@end table
+@lilypond[fragment,verbatim,center]
+ \relative c'' {
+ c g c f, c' a, e'' }
+@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
+within the second chord are determined by looking at the immediately
+preceding note.
+
+@lilypond[fragment,verbatim,center]
+ \relative c' {
+ c <c e g>
+ <c' e g>
+ <c, e' g>
+ }
+@end lilypond
+@cindex @code{\notes}
+
+The pitch after the @code{\relative} contains a notename. To parse
+the pitch as a notename, you have to be in note mode, so there must
+be a surrounding @code{\notes} keyword (which is not
+shown here).
+
+The relative conversion will not affect @code{\transpose} or
+@code{\relative} sections in its argument. If you want to use
+relative within transposed music, you must place an additional
+@code{\relative} inside the @code{\transpose}.
-@c. {Point and click}
+@c . {Point and click}
@node Point and click
@subsection Point and click
[todo]
-@c. {Engravers}
+@c . {Engravers}
@node Engravers
@section Engravers
@cindex engravers
@menu
-* Context definitions::
* Notation Contexts::
+* Creating contexts::
+* Default contexts::
+* Context properties::
+* Changing context definitions::
+* Defining new contexts::
@end menu
-@c. {Context definitions}
-@node Context definitions
-@subsection Context definitions
+@c . {Music expressions}
-@cindex context definition
-@cindex translator definition
-@cindex engraver hacking
-A notation contexts is defined by the following information
+@c . {Notation Contexts}
+@node Notation Contexts
+@subsection Notation Contexts
+
+@cindex notation contexts
+
+Notation contexts are objects that only exist during a run of LilyPond.
+During the interpretation phase of LilyPond (when lily prints
+"interpreting music"), music a @code{\score} block is interpreted in
+time order, i.e. in much the same order that humans read, play, and
+write music.
-@enumerate 1
- @item A name.
+During this reading, the notation context is holds the state
+for the current point within the music. It contains information like
- @item The LilyPond modules that do the actual conversion of music to
- notation. Each module is a so-called
- @emph{engraver}
-@cindex engraver
-.
+@itemize @bullet
+ @item What notes are playing at this point?
+ @item What symbols will be printed at this point?
+ @item What is the current key signature, time signature, point within
+ the measure, etc.?
+@end itemize
- @item How these modules should cooperate, i.e. which ``cooperation
- module'' should be used. This cooperation module is a special
- type of engraver.
+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
+a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because
+these can all contain multiple staffs).
- @item What other contexts the context can contain,
- @item What properties are defined.
-@end enumerate
+Contexts associated with sheet music output are called @emph{notation
+contexts}, those for sound output are called performance contexts.
-A context definition has this syntax:
-@example
+@node Creating contexts
+@subsection Creating contexts
- \translator @code{@{}
- @var{translatorinit} @var{translatormodifierlist}
- @code{@}}
-@end example
+@cindex @code{\context}
+@cindex context selection
-@var{translatorinit} can be an identifier or of the form
+Contexts for a music expression can be selected manually, using the
+following music expression.
@example
+ \context @var{contexttype} [= @var{contextname}] @var{musicexpr}
+@end example
+
+This instructs lilypond to interpret @var{musicexpr} within the context
+ of type @var{contexttype} and with name @var{contextname}. If this
+context does not exist, it will be created.
- \type @var{typename} @code{;}
+@quotation
+
+@lilypond[verbatim,singleline]
+\score {
+ \notes \relative c'' {
+ c4 <d4 \context Staff = "another" e4> f
+ }
+}
+
+@end lilypond
+@end quotation
+
+In this example, the @code{c} and @code{d} are printed on the
+default staff. For the @code{e}, a context Staff called
+@code{another} is specified; since that does not exist, a new
+context is created. Within @code{another}, a (default) Voice context
+is created for the @code{e4}. When all music referring to a
+context is finished, the context is ended as well. So after the
+third quarter, @code{another} is removed.
+
+
+
+@node Default contexts
+@subsection Default contexts
+
+Most music expressions don't need @code{\context}: 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.
+
+@lilypond[verbatim,singleline]
+\score { \notes \context Voice = goUp { c'4 d' e' } }
+@end lilypond
+
+There are some quirks that you must keep in mind when dealing with
+defaults:
+
+Every top-level music is interpreted by the Score context, in other
+words, you may think of @code{\score} working like
+@example
+ \score @{
+ \context Score @var{music}
+ @}
@end example
-@var{typename} is one of
+Sequential music follows the contexts of its "children". Take this example
+@lilypond[verbatim, singleline]
+\score { \context Score \notes { c'4 ( d' )e' } }
+@end lilypond
-@table @code
-@cindex @code{Engraver_group_engraver}
- @item @code{Engraver_group_engraver}
- The standard cooperation engraver.
-@cindex @code{Score_engraver}
+The sequential music is interpreted by the Score context initially
+(notice that the @code{\context} specification is redundant), but when a
+note is encountered, contexts are setup to accept that note. In this
+case, a Thread, Voice and Staff are created. The rest of the sequential
+music is also interpreted with the same Thread, Voice and Staff context,
+putting the notes on the same staff, in the same voice.
- @item @code{Score_engraver}
- This is cooperation module that should be in the top level context.
-@cindex @code{Grace_engraver_group}
+This is a convenient mechanism, but do not expect opening chords to work
+without @code{\context}. For every note, a separate staff is
+instantiated.
- @item @code{Grace_engraver_group}
- This is a special cooperation module (resembling
- @code{Score_engraver}) that is used to created an embedded
- `miniscore'.
-@end table
+@lilypond[verbatim, singleline]
+\score { \notes <c'4 es'> }
+@end lilypond
-@var{translatormodifierlist} is a list of items where each item is
-one of
+Of course, if the chord is preceded by a normal note in sequential
+music, the chord will be interpreted by the Thread of the preceding
+note:
+@lilypond[verbatim,singleline]
+\score { \notes { c'4 <c'4 es'> } }
+@end lilypond
-@itemize @bullet
- @item @code{\consists} @var{engravername} @code{;}
- Add @var{engravername} to the list of modules in this context.
- The order of engravers added with @code{\consists} is
- significant.
-
- @item @code{\consistsend} @var{engravername} @code{;}
- Analogous to @code{\consists}, but makes sure that
- @var{engravername} is always added to the end of the list of
- engravers.
- Some engraver types need to be at the end of the list; this
- insures they are put there, and stay there, if a user adds or
- removes engravers. This command is usually not needed for
- end-users.
-
- @item @code{\accepts} @var{contextname} @code{;}
- Add @var{contextname} to the list of context this context can
- contain. 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{\remove} @var{engravername} @code{;}
- Remove a previously added (with @code{\consists}) engraver.
-
- @item @code{\name} @var{contextname} @code{;}
- This sets name of the context, e.g. @code{Staff}, @code{Voice}. If
- the name is not specified, the translator won't do anything.
+@node Context properties
+@subsection Context properties
- @item @var{propname} @code{=} @var{value} @code{;}
- A property assignment. It is allowed to use reals for
- @var{value}.
-@end itemize
+Notation contexts can be modified from within the @file{.ly} file. The
+following music expression does that job:
-In the @code{\paper} block, it is also possible to define translator
-identifiers. Like other block identifiers, the identifier can only
-be used as the very first item of a translator. In order to define
-such an identifier outside of @code{\score}, you must do
+@cindex @code{\property}
+@example
+ \property @var{contextname}.@var{propname} = @var{value}
+@end example
-@quotation
+Sets the @var{propname} property of the context @var{contextname} to the
+specified Scheme expression @var{value}. All @var{propname} and
+@var{contextname} are strings, which are typically unquoted.
-@example
+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.
+
+
+
+
+@c . {Context definitions}
+@node Changing context definitions
+@subsection Changing context definitions
+
+@cindex context definition
+@cindex translator definition
+
+The most common way to define a context is by extending an existing
+context. You can change an existing context from the paper block, by
+first initializing a translator with an existing context identifier:
+@example
\paper @{
- foo = \translator @{ @dots{} @}
-@}
-\score @{
- \notes @{
- @dots{}
- @}
- \paper @{
- \translator @{ \foo @dots{} @}
- @}
-@}
-@end example
+ \translator @{
+ @var{context-identifier}
+ @} @}
+@end example
+Then you can add engravers, remove engravers and set context
+properties. The syntax for these operations are respectively
+@example
+ \remove @var{engravername}
+ \consists @var{engravername}
+ @var{propname} = @var{value}
+@end example
-@end quotation
+Here @var{engravername} is a string, the name of an engraver in the
+system. @var{propname} is a string and @var{value} is a Scheme
+expression.
+@lilypond[verbatim,singleline]
+\score { \notes {
+ c'4 c'4 }
+ \paper {
+ \translator { \StaffContext
+ \consists Instrument_name_engraver;
+ instrument = #"foo"
+ \remove Clef_engraver;
+ } } }
+@end lilypond
+
+@cindex engraver
+
+These type of property assignments happen before interpretation starts,
+so a @code{\property} expression will override any predefined settings.
+
+Engravers are the actual C++ modules that do the work in the
+interpretation phase.
-@cindex paper types, engravers, and pre-defined translators
-Some pre-defined identifiers can simplify modification of
-translators. The pre-defined identifiers are:
+There are some pre-defined identifiers to simplify editing translators,
+they are defined in @file{ly/engraver.ly}. These pre-defined
+identifiers are:
@table @code
@cindex @code{StaffContext}
@item @code{ScoreContext}
Default Score context.
-@cindex @code{ScoreWithNumbers}
- @item @code{ScoreWithNumbers}
- Score context with numbering at the Score level.
-@cindex @code{BarNumberingStaffContext}
-
- @item @code{BarNumberingStaffContext}
- Staff context with numbering at the Staff level.
@cindex @code{HaraKiriStaffContext}
@item @code{HaraKiriStaffContext}
Staff context that does not print if it only contains rests.
Useful for orchestral scores.@footnote{Harakiri, also called
Seppuku, is the ritual suicide of the Japanese Samourai warriors.}
-@cindex @code{OrchestralPartStaffContext}
-
- @item @code{OrchestralPartStaffContext}
-@cindex @code{OrchestralScoreContext}
-
- @item @code{OrchestralScoreContext}
@end table
-Using these pre-defined values, you can remove or add items to the
-translator:
-
-@quotation
-
-@example
-\paper @{
- \translator @{
- \StaffContext
- \remove Some_engraver;
- \consists Different_engraver;
- @}
-@}
-@end example
-
-@end quotation
-
-
-
-
-@c. {Notation Contexts}
-@node Notation Contexts
-@subsection Notation Contexts
+@node Defining new contexts
+@subsection Defining new contexts
-@cindex notation contexts
-
-Notation contexts are objects that only exist during a run of
-LilyPond. During the interpretation phase of LilyPond, the Music
-expression contained in a @code{\score} block is interpreted in time
-order. This is the order in which humans read, play, and write
-music.
-
-A context is an object that holds the reading state of the
-expression; it contains information like
-
-@itemize @bullet
- @item What notes are playing at this point?
- @item What symbols will be printed at this point?
- @item In what style will they printed?
- @item What is the current key signature, time signature, point within
- 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
-a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because
-these can all contain multiple staffs).
+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};}.
-Contexts associated with sheet music output are called @emph{notation
-contexts}, those for sound output are called performance contexts.
+ @item A cooperation engraver. This is specified by @code{\type
+@var{typename};}.
+@end itemize
-Contexts are created either manually or automatically. Initially, the
-top level music expression is interpreted by the top level context (the
-@code{Score} context). When a atomic music expression (i.e. a note, a
-rest, etc.), a nested set of contexts is created that can process these
-atomic expressions, as in this example:
+
+A context definition has this syntax:
@example
-\score @{ \notes @{ c4 @} @}
-@end example
-The sequential music, `@code{@{ c4 @}}' is interpreted by @code{Score}
-context. When the note @code{c4} itself is interpreted, a set of
-contexts is needed that will accept notes. The default for this is a
-@code{Voice} context, contained in a @code{Staff} context. Creation of
-these contexts results in the staff being printed.
+ \translator @code{@{}
+ @var{translatorinit} @var{translatormodifierlist}
+ @code{@}}
+@end example
-@cindex context
+@var{translatorinit} can be an identifier or
+@example
-You can also create contexts manually, and you probably have to do so
-if you want to typeset complicated multiple part material. If a
-`@code{\context} @var{name} @var{musicexpr}' expression is encountered
-during the interpretation phase, the @var{musicexpr} argument will be
-interpreted with a context of type @var{name}. If you specify a name,
-the specific context with that name is searched.
+@end example
+where @var{typename} is one of
-[type vs id]
+The cooperation engraver groups other engravers, and specifies how they
+should cooperate. Choices are:
-If a context of the specified type and name can not be found, a new
-one is created. For example,
+@table @code
+@cindex @code{Engraver_group_engraver}
+ @item @code{Engraver_group_engraver}
+ The standard cooperation engraver.
-@quotation
+@cindex @code{Score_engraver}
-@lilypond[verbatim]
-\score {
- \notes \relative c'' {
- c4 <d4 \context Staff = "another" e4> f
- }
-}
+ @item @code{Score_engraver}
+ This is cooperation module that should be in the top level context,
+and only the toplevel context.
-@end lilypond
-@end quotation
+@cindex @code{Grace_engraver_group}
-In this example, the @code{c} and @code{d} are printed on the
-default staff. For the @code{e}, a context Staff called
-@code{another} is specified; since that does not exist, a new
-context is created. Within @code{another}, a (default) Voice context
-is created for the @code{e4}. When all music referring to a
-context is finished, the context is ended as well. So after the
-third quarter, @code{another} is removed.
+ @item @code{Grace_engraver_group}
+ This is a special cooperation module (resembling
+ @code{Score_engraver}) that is used to created an embedded
+ `miniscore'.
+@end table
-Almost all music expressions inherit their interpretation context
-from their parent. In other words, suppose that the syntax for a
-music expression is
+@var{translatormodifierlist} is a list of items where each item is
+one of
-@example
+@itemize @bullet
+ @item @code{\consists} @var{engravername} @code{;}
+ Add @var{engravername} to the list of modules in this context.
+ The order of engravers added with @code{\consists} is
+ significant.
+
+ @item @code{\consistsend} @var{engravername} @code{;}
+ Analogous to @code{\consists}, but makes sure that
+ @var{engravername} is always added to the end of the list of
+ engravers.
- \keyword @var{musicexpr1} @var{musicexpr2} @dots{}
-@end example
+ Some engraver types need to be at the end of the list; this
+ insures they are put there, and stay there, if a user adds or
+ removes engravers. This command is usually not needed for
+ end-users.
+
+ @item @code{\accepts} @var{contextname} @code{;}
+ Add @var{contextname} to the list of context this context can
+ contain. The first listed context is the context to create by
+ default.
-When the interpretation of this music expression starts, the context
-for @var{musicexpr1}, @var{musicexpr2}, etc. is that of the total
-expression.
+ @item @code{\denies}. The opposite of @code{\accepts}. Added for
+completeness, but is never used in practice.
+
+
+ @item @code{\remove} @var{engravername} @code{;}
+ Remove a previously added (with @code{\consists}) engraver.
+
+ @item @code{\name} @var{contextname} @code{;}
+ This sets name of the context, e.g. @code{Staff}, @code{Voice}. If
+ the name is not specified, the translator won't do anything.
+
+ @item @var{propname} @code{=} @var{value} @code{;}
+ A property assignment.
+@end itemize
-Lastly, you may wonder, why this:
+In the @code{\paper} block, it is also possible to define translator
+identifiers. Like other block identifiers, the identifier can only
+be used as the very first item of a translator. In order to define
+such an identifier outside of @code{\score}, you must do
@quotation
@example
+\paper @{
+ foo = \translator @{ @dots{} @}
+@}
\score @{
- \notes \relative c'' @{
- c4 d4 e4
+ \notes @{
+ @dots{}
+ @}
+ \paper @{
+ \translator @{ \foo @dots{} @}
@}
@}
@end example
@end quotation
-doesn't result in this:
-
-@lilypond[]
-
- \score {
- \notes \relative c'' {
- <c4> <d4> <e4>
- }
- }
-@end lilypond
+@cindex paper types, engravers, and pre-defined translators
-For the @code{c4}, a default @code{Staff} (with a contained
-@code{Voice}) context is created. After the @code{c4} ends, no
-music refers to this default staff, so it would be ended, with the
-result shown. To prevent this inconvenient behavior, the context to
-which the sequential music refers is adjusted during the
-interpretation. So after the @code{c4} ends, the context of the
-sequential music is also the default @code{Voice} context.
-The @code{d4} gets interpreted in the same context
-as @code{c4}.
+
-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.
-Properties can be preset within the @code{\translator} block
+ Properties can be preset within the @code{\translator} block
corresponding to the appropriate context. In this case, the syntax
is
@var{propname} @code{=} @var{value}
@end example
-This assignment happens before interpretation starts, so a
-@code{\property} expression will override any predefined settings.
-
The property settings are used during the interpretation phase. They
are read by the LilyPond modules where interpretation contexts are
built of. These modules are called @emph{translators}. Translators for
-@c. {Lexer innards}
-@node Lexer innards
-@section Lexer innards
-@cindex Lexer innards
+
+@c . {Syntactic details}
+@node Syntactic details
+@section Syntactic details
+@cindex Syntactic details
@menu
* Top level::
* Identifiers::
+* Music expressions::
+* Manipulating music expressions::
* Assignments::
* Lexical details::
* Lexical modes::
* Ambiguities::
@end menu
-@c. {Top level}
+@c . {Top level}
@node Top level
@subsection Top level
@cindex Top level
This section describes what you may enter at top level.
-@unnumberedsubsec Score definition
+@c . {Score}
+@subsubsection Score
+@cindex Score
+
@cindex score definition
The output is generated combining a music expression with an output
definition is supplied, the default @code{\paper} block will be added.
-@c. {Score}
-@subsubsection Score
-@cindex Score
-@c. {Paper}
-@subsubsection Paper
-@cindex Paper
+@c . {Default output}
+@subsubsection Default output
-@c. {Midi}
-@subsubsection Midi
-@cindex Midi
+Default values for the @code{\paper} and @code{\midi} block are set by
+entering such a block at top-level.
-@c. {Header}
+@c . {Header}
@subsubsection Header
@cindex Header
@cindex @code{\header}
paper block for all scores that lack an explicit paper block.
-@c. {Identifiers}
+@c . {Identifiers}
@node Identifiers
@subsection Identifiers
@cindex Identifiers
@itemize @bullet
@item Input
@item c++-function
-@item Music: see @ref{Music expressions}
+@item Music
@item Identifier
-@item Translator_def:
-See section @ref{contextdefs} for more information
+@item Translator_def
@item Duration
@item Pitch
@item Score
@end itemize
-@c. {Assignments}
+@node Music expressions
+@subsection Music expressions
+
+@cindex music expressions
+
+Music in LilyPond is entered as a music expression. Notes, rests, lyric
+syllables are music expressions, and you can combine music expressions
+to form new ones, for example by enclosing a list of expressions in
+@code{\sequential @{ @}} or @code{< >}. In this example, a compound
+expression is formed out of the quarter note @code{c} and a quarter note
+@code{d}:
+
+@example
+\sequential @{ c4 d4 @}
+@end example
+
+@cindex Sequential music
+@cindex @code{\sequential}
+@cindex sequential music
+@cindex @code{<}
+@cindex @code{>}
+@cindex Simultaneous music
+@cindex @code{\simultaneous}
+
+The two basic compound music expressions are simultaneous and
+sequential music.
+
+@example
+ \sequential @code{@{} @var{musicexprlist} @code{@}}
+ \simultaneous @code{@{} @var{musicexprlist} @code{@}}
+@end example
+For both, there is a shorthand:
+@example
+ @code{@{} @var{musicexprlist} @code{@}}
+@end example
+for sequential and
+@example
+ @code{<} @var{musicexprlist} @code{>}
+@end example
+for simultaneous music.
+Other compound music expressions include
+@example
+ \repeat @var{expr}
+ \transpose @var{pitch} @var{expr}
+ \apply @var{func} @var{expr}
+ \context @var{type} = @var{id} @var{expr}
+ \times @var{fraction} @var{expr}
+@end example
+
+In principle, the way in which you nest sequential and simultaneous to
+produce music is not relevant. In the following example, three chords
+are expressed in two different ways:
+
+@lilypond[fragment,verbatim,center]
+ \notes \context Voice {
+ <a c'> <b d' > <c' e'>
+ < { a b c' } { c' d' e' } >
+ }
+@end lilypond
+
+However, in some cases, LilyPond will also try to choose contexts, and
+use the structure of the music expression to do so. This can have
+undesired effects: for example, LilyPond will create a separate staff
+for each note if you start a @code{\score} with a chord:
+@lilypond[verbatim,center,singleline]
+ \score {
+ \notes <c''4 e''>
+ }
+@end lilypond
+ The solution is to explicitly instantiate the context you desire.
+In this case this is typically a Voice context
+@lilypond[verbatim,center,singleline]
+ \score {
+ \notes\context Voice <c''4 e''>
+ }
+@end lilypond
+If you use @code{\context Staff} you will get separate stems for each
+note head, leading to collisions, so don't use that.
+
+
+
+@c . {Manipulating music expressions}
+@node Manipulating music expressions
+@subsection Manipulating music expressions
+
+The @code{\apply} mechanism gives you access to the internal
+representation of music. You can write Scheme-functions that operate
+directly on it. The syntax is
+@example
+ \apply #@var{func} @var{music}
+@end example
+This means that @var{func} is applied to @var{music}. The function
+@var{func} should return a music expression.
+
+This example replaces the text string of a script. It also shows a dump
+of the music it processes, which is useful if you want to know more
+about how music is stored.
+@lilypond[verbatim]
+#(define (testfunc x)
+ (if (equal? (ly-get-mus-property x 'text) "foo")
+ (ly-set-mus-property x 'text "bar"))
+ ;; recurse
+ (ly-set-mus-property x 'elements
+ (map testfunc (ly-get-mus-property x 'elements)))
+ (display x)
+ x
+)
+\score { \notes
+ \apply #testfunc { c4_"foo" }
+}
+@end lilypond
+
+For more information on what is possible, see the @ref{Tricks} and the
+automatically generated documentation.
+
+As always: directly accessing internal representations is dangerous: the
+implementation is subject to changes, so you should not use this if
+possible.
+
+
+@c . {Assignments}
@node Assignments
@subsection Assignments
@cindex Assignments
An identifier can be created with any string for its name, but you will
only be able to refer to identifiers whose names begin with a letter,
-being entirely alphanumeric. It is impossible to refer to an identifier
+being entirely alphabetical. It is impossible to refer to an identifier
whose name is the same as the name of a keyword.
The right hand side of an identifier assignment is parsed completely
first item in a block.
@example
\paper @{
-foo = 1.0
-\paperIdent % wrong and invalid
+ foo = 1.0
+ \paperIdent % wrong and invalid
@}
\paper @{
-\paperIdent % correct
-foo = 1.0
-@}
+ \paperIdent % correct
+ foo = 1.0 @}
@end example
-
-
-@c. {Lexical details}
+@c . {Lexical details}
@node Lexical details
@subsection Lexical details
@cindex Lexical details
@menu
@end menu
-@c. {Comments}
+@c . {Comments}
@subsubsection Comments
@cindex Comments
A one line comment is introduced by a @code{%} character.
-Block comments are started by @code{%@{} and ended by `@code{%@}}'.
+Block comments are started by @code{%@{} and ended by @code{%@}}.
They cannot be nested.
-@c. {Direct Scheme}
+@c . {Direct Scheme}
@subsubsection Direct Scheme
@cindex Scheme
@cindex GUILE
Scheme.
-@c. {Keywords}
+@c . {Keywords}
@subsubsection Keywords
@cindex Keywords
transpose type
@end example
-@c. {Integers}
+@c . {Integers}
@subsubsection Integers
@cindex integers
operations cannot be done with integers, and integers cannot be mixed
with reals.
-@c. {Reals}
+@c . {Reals}
@subsubsection Reals
@cindex real numbers
to a real that is the internal representation of dimensions.
-@c. {Strings}
+@c . {Strings}
@subsubsection Strings
@cindex string
@cindex concatenate
character in a string write @code{\"}. Various other backslash
sequences have special interpretations as in the C language. A string
that contains no spaces can be written without the quotes. See
-@ref{Lexical modes} for details on unquoted strings; their interpretation varies
-depending on the situation. Strings can be concatenated with the
-@code{+} operator.
+@ref{Lexical modes} for details on unquoted strings; their
+interpretation varies depending on the situation. Strings can be
+concatenated with the @code{+} operator.
The tokenizer accepts the following commands. They have no grammatical
function, hence they can appear anywhere in the input.
-@c. {Main input}
+@c . {Main input}
@subsubsection Main input
@cindex Main input
The @code{\maininput} command is used in init files to signal that the
user file must be read. This command cannot be used in a user file.
-@c. {File inclusion}
+@c . {File inclusion}
@subsubsection Main input
@cindex Main input
@cindex convert-ly
-
-
-@c. {Pitch names}
-@subsubsection Pitch names
+@c . {Pitch names}
+@subsubsection Defining pitch names
@cindex Lexical modes
-@cindex pitch names
-
+@cindex definining pitch names
+@cindex pitch names, definining
@cindex note names
@cindex chord modifier names
-Note names and chord modifiers can be customised for nationalities.
-languages and conventions. The syntax is as follows.
-@cindex @code{\pitchnames}
-@cindex @code{\chordmodifiers}
-
-@example
- \pitchnames @var{scheme-alist}
- \chordmodifiers @var{scheme-alist}
-@end example
-
-See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
-specific examples how to do this. tables can be tailored specified
-using. Some national note names have been provided, see
-section @ref{Other languages}.
A @code{\paper} block at top level sets the default paper block. A
@code{\midi} block at top level works similarly.
-@c. {Assignments}
+@c . {Assignments}
@subsubsection Assignments
@cindex assignments
@cindex @code{#}
-@c. {Direct scheme}
+@c . {Direct scheme}
@subsubsection Direct scheme
@cindex Direct scheme
Scheme statements maybe issued to produce interesting side-effects.
-@c. {Lexical modes}
+@c . {Lexical modes}
@node Lexical modes
@subsection Lexical modes
@cindex Lexical modes
-
-@cindex Lexical modes
-@cindex modes
+@cindex input mode
+@cindex mode, input
+@cindex @code{\notes}
+@cindex @code{\chords}
+@cindex @code{\lyrics}
To simplify entering notes, lyrics, and chords, LilyPond has three
-special input modes on top of the default mode. In each mode, words
-are identified on the input. If @code{"word"} is encountered, it is
-treated as a string. If @code{\word} is encountered, it is treated as
-a keyword or as an identifier. The behavior of the modes differs in
-two ways: Different modes treat unquoted words differently, and
-different modes have different rules for deciding what is a word.
-
-@table @asis
-@item Normal mode.
-@cindex normal mode
-
-At the start of parsing, LilyPond is in Normal mode. In Normal
-mode, a word is an alphabetic character followed by alphanumeric
-characters. If @code{word} is encountered on the input it is
-treated as a string.
+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.
-@item Note mode
-See @ref{Note entry}.
-
-@item Lyrics mode
-See @ref{Lyrics entry}.
-
-@item Chord mode
-See @ref{Chord entry}.
-@end table
-
-@cindex input modes
-
-@cindex mode switch
+A mode switch is entered as a compound music expressions
+@example
+@code{\notes} @var{musicexpr}
+@code{\chords} @var{musicexpr}
+@code{\lyrics} @var{musicexpr}.
+@end example
-@cindex @code{\notes}
-@cindex @code{\chords}
-@cindex @code{\lyrics}
+In each of these cases, these expressions do not add anything to the
+meaning of their arguments. They are just a way to indicate that the
+arguments should be parsed in indicated mode. The modes are treated in
+more detail in the sections @ref{Note entry}, @ref{Lyrics} and
+@ref{Chords}.
-Mode switching keywords form compound music expressions: @code{\notes}
-@var{musicexpr}, @code{\chords} @var{musicexpr},
-and @code{\lyrics} @var{musicexpr}. These
-expressions do not add anything to the meaning of their arguments. They
-are just a way to indicate that the arguments should be parsed in
-indicated mode. See @ref{Lexical modes} for more information on modes.
+You may nest different input modes.
-@c. {Ambiguities}
+@c . {Ambiguities}
@node Ambiguities
@subsection Ambiguities
@cindex ambiguities
-@c. {Unsorted}
-@node Unsorted
-@section Unsorted
-
-[mucho todo]
-
-Translation?
-
-@cindex properties
-@unnumberedsubsec Translation property
-
-@cindex @code{\property}
-@example
- \property @var{contextname}.@var{propname} = @var{value}
-@end example
-
-Sets the @var{propname} property of the context @var{contextname} to
-the specified @var{value}. All three arguments are strings.
-Depending on the context, it may be necessary to quote the strings or
-to leave space on both sides of the dot.
-
-@cindex translator switches
-@unnumberedsubsec Translator switches
-
-@cindex @code{\translator}
-@example
- \translator @var{contexttype} = @var{name}
-@end example
-
-A music expression indicating that the context which is a direct
-child of the a context of type @var{contexttype} should be shifted to
-a context of type @var{contexttype} and the specified name.
-
-Usually this is used to switch staffs in Piano music, e.g.
-
-@example
- \translator Staff = top @var{Music}
-@end example
-
-
-@cindex output properties
-@unnumberedsubsec Output properties
-
-These allow you to tweak what is happening in the back-end
-directly. If you want to control every detail of the output
-formatting, this is the feature to use. The downside to this is that
-you need to know exactly how the backend works. Example:
-
-
-@lilypond[fragment,verbatim]
-\relative c'' { c4
- \context Staff \outputproperty
- #(make-type-checker 'note-head-interface)
- #'extra-offset = #'(5.0 . 7.5)
-<c8 e g> }
-@end lilypond
-
-This selects all note heads occurring at current staff level, and sets
-the @code{extra-offset} of those heads to @code{(5,7.5)}, shifting them
-up and right.
-
-Use of this feature is entirely on your own risk: if you use this, the
-result will depend very heavily on the implementation of the backend,
-which we change regularly and unscrupulously.
-
-
-@c.{Local emacs vars}
+@c .{Local emacs vars}
@c Local variables:
@c mode: texinfo
@c minor-mode: font-lock
@c minor-mode: outline
@c outline-layout: (-1 : 0)
-@c outline-use-mode-specific-leader: "@c\."
+@c outline-use-mode-specific-leader: "@c \."
@c outline-primary-bullet: "{"
@c outline-stylish-prefixes: nil
@c outline-override-protect: t