]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/user/refman.itely
* Documentation/user/refman.itely (Analysis brackets): add
[lilypond.git] / Documentation / user / refman.itely
index 90e9e53e42441d1174090dbc90c6e4ac77602e1f..7d7ece992f601f9ad04221aea8368b14d1915057 100644 (file)
-@c -*-texinfo-*-
-@c TODO: 
-@c - Reinsert subsection commands that were lost in the
-@c   ancient conversion from YODL!  /MB
-@c - Restructure! Separate internal commands from user level commands. /MB
-@c - Add some words about Guile.  /MB
-@c - Fix indexing (keyindex) so it doesn't add line breaks  /MB
-
-@node Reference Manual, ,  , Top
-@chapter Reference Manual
-
-@menu
-* Overview::                       Overview
-* Top level::                      Top level
-* Pitch names::                    Pitch names
-* Lexical conventions::            Lexical conventions
-* Other languages::                Note names in various languages
-* Lexical modes::                          modes
-* Types::                          Types
-* Music expressions::              Music expressions
-* Atomic music expressions::       Atomic music expressions
-* Note specification::             notedesc
-* barlines::                       barlines
-* Manual beams::                   Manual beam
-* stem tremolo::                   tremolo
-* Compound music expressions::     Compound music expressions
-* relative::                       relative
-* Repeats::                       Repeats      
-* transpose::                      transpose
-* Ambiguities::                    Ambiguities
-* Notation conversion specifics::  Notation conversion specifics
-* autobeam::                       autobeam
-* lyricprint::                     lyricprint
-* Notation Contexts::              Notation Contexts
-* Properties::                     Changing formatting
-* Notation output definitions::    Notation output definitions
-* paper::                          paper
-* Paper variables::                papervars
-* contextdefs::                    contextdefs
-* Sound output::                   Sound output
-* midilist::                       midilist
-* Grobs::                          Graphical objects
-* Molecule::                       Molecules
-* Pre-defined Identifiers::        Pre-defined Identifiers
-@c May be fragile.  Better make single link to generated doco?
-* Interpretation contexts:(lilypond-internals)LilyPond interpretation contexts.
-* Engravers:(lilypond-internals)LilyPond engravers.
-* Backend:(lilypond-internals)LilyPond backend.
-@end menu
+@c Note: -*-texinfo-*-
+@c
+@c A menu is needed before every deeper *section nesting of @node's; run
+@c     M-x texinfo-all-menus-update
+@c to automagically fill in these menus before saving changes
 
+@c FIXME: singular vs. plural:  Beams/Beam
 
 
-@node Overview, , , Reference Manual
-@section Overview
+@macro refbugs
+@strong{BUGS}
+@end macro
 
-This document@footnote{This document has been revised for LilyPond 1.2.}
-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.
 
-LilyPond input can be classified  into three types:
-@itemize @bullet
-  @item musical expressions: a musical expression is some combination of
-rest, notes, lyrics
-  @item output definitions: recipes for translating those musical
-expressions into performances (MIDI) or graphics (eg. PostScript).
+@c .{Reference Manual}
 
-  @item declarations: by declaring and naming musical expressions, you
-can enter and edit them in manageable chunks.
-@end itemize
+@node Reference Manual
+@chapter Reference Manual
 
+@html
+<!--- @@WEB-TITLE@@=Reference Manual --->
+@end html
 
+This document describes GNU LilyPond and its input format. The last
+revision of this document was made for LilyPond 1.6.2.  It assumes
+that you already know a little bit about LilyPond input (how to
+make an input file, how to create sheet music from that input file,
+etc).  New users are encouraged to study the tutorial before reading
+this manual.
 
-@node Top level, , , Reference Manual
-@section Top level
 
-@cindex top level
+@menu
+* Note entry::                  
+* Easier music entry::          
+* Staff notation::              
+* Polyphony::                   
+* Beaming::                     
+* Accidentals::                 
+* Expressive marks::            
+* Ornaments::                   
+* Repeats::                     
+* Rhythmic music::              
+* Piano music::                 
+* Tablatures::                  
+* Chords::                      
+* Writing parts::               
+* Ancient notation ::           
+* Tuning output::               
+* Global layout::               
+* Sound::                       
+@end menu
 
-This section describes what you may enter at top level.
+@c FIXME: Note entry vs Music entry at top level menu is confusing.
+@c . {Note entry}
+@node Note entry
+@section Note entry
+@cindex Note entry
 
+Notes constitute the most basic elements of LilyPond input, but they do
+not form valid input on their own without a @code{\score} block.  However,
+for the sake of brevity and simplicity we will generally omit
+@code{\score} blocks and @code{\paper} declarations in this manual.
 
 
-@cindex score definition
+@menu
+* Notes::                       
+* Pitches::                     
+* Chromatic alterations::       
+* Rests::                       
+* Skips::                       
+* Durations::                   
+* Ties::                        
+* Automatic note splitting ::   
+* Tuplets::                     
+* Easy Notation note heads ::   
+@end menu
 
-The output is generated combining a music expression with an output
-definition.  A score block has the following syntax:
+@c . {Notes}
+@node Notes
+@subsection Notes
 
-@example
-  \score @{ @var{musicexpr} @var{outputdefs} @}
-@end example
 
-@var{outputdefs} are zero or more output definitions.  If no output
-definition is supplied, the default @code{\paper} block will be added.
+A note is printed by specifying its pitch and then its duration.
+@lilypond[fragment,verbatim]
+  cis'4 d'8 e'16 c'16
+@end lilypond
 
-@cindex header
+@c .  {Pitches}
+@node Pitches
+@subsection Pitches
 
-@keyindex{header}
+@cindex Pitch names
+@cindex Note specification
+@cindex pitches
+@cindex entering notes
 
-The syntax is
+The verbose syntax for pitch specification is
 
+@cindex @code{\pitch}
 @example
-  \header @{ @var{key1} = @var{val1};
-             @var{key2} = @var{val2}; @dots{} @}
+  \pitch @var{scmpitch}
 @end example
 
-A header describes the file's contents.  It can also appear in a
-@code{\score} block.  Tools like @code{ly2dvi}@indexcode{ly2dvi} can use this
-information for generating titles.  Key values that are used by
-@code{ly2dvi} are: title, subtitle, composer, opus, poet, instrument,
-metre, arranger, piece and tagline.
-
-It is customary to put the @code{\header} at the top of the file.
+where @var{scmpitch} is a pitch scheme object.
 
+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{a} through @code{g}, while the octave is formed with notes ranging
+from @code{c} to @code{b}.  The pitch @code{c} is an octave below
+middle C and the letters span the octave above that C.  Here's an example
+which should make things more clear:
 
-@node Pitch names, , ,  Reference Manual
+@lilypond[fragment,verbatim]
+\clef bass
+  a,4 b, c d e f g a b c' d' e' \clef treble f' g' a' b' c''
+@end lilypond
 
-Note names and chord modifiers can be customised for nationalities.
-languages and conventions.  The syntax is as follows.
-@example
-   \pitchnames @keyindex{pitchnames} @var{scheme-alist}
-   \chordmodifiers@keyindex{chordmodifiers} @var{scheme-alist}
-@end example
+@cindex note names, Dutch
 
-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 @ref{Other
-languages}.
+In Dutch, a sharp is formed by adding @code{-is} to the end of a pitch
+name and a flat is formed by adding @code{-es}.  Double sharps and double
+flats are obtained by adding @code{-isis} or @code{-eses}.  @code{aes}
+and @code{ees} are contracted to @code{as} and @code{es} in Dutch, but
+both forms are accepted.
 
-A @code{\paper} block at top level sets the default paper block.  A
-@code{\midi} block at top level works similarly.
+LilyPond has predefined sets of note names 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 note names they define are:
 
+@anchor{note name}
+@anchor{note names}
+@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 
+espanol.ly     do  re  mi  fa  sol la  sib si  -s          -b 
 
+@end example 
 
-Identifier assignments may appear at top level.  Semicolons are
-forbidden after top level assignments.
+@cindex @code{'}
+@cindex @code{,}
 
 
 
-@node Lexical conventions, , ,  Reference Manual
-@section Lexical conventions
+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.
 
-@cindex lexical conventions
+@lilypond[fragment,verbatim,center]
+  c' c'' es' g' as' gisis' ais'  
+@end lilypond
 
+@node Chromatic alterations
+@subsection Chromatic alterations
 
+Normally accidentals are printed automatically, but you may also
+print them manually.  A reminder accidental
+@cindex reminder accidental
+@cindex @code{?}
+can be forced by adding an exclamation mark @code{!}
+after the pitch.  A cautionary accidental
+@cindex cautionary accidental
+@cindex parenthesized accidental
+(an accidental within parentheses) can be obtained by adding the
+question mark `@code{?}' after the pitch.
 
-@cindex comment
+@lilypond[fragment,verbatim]
+  cis' cis' cis'! cis'?
+@end lilypond
 
-@indexcode{%}
 
+The automatic production of accidentals can be tuned in many
+ways. For more information, refer to @ref{Accidentals}.
 
-A one line comment is introduced by a `@code{%}' character. 
-Block comments are started by `@code{%@{}' and ended by `@code{%@}}'. 
-They cannot be nested.
+@c .  {Rests}
+@node  Rests
+@subsection Rests
+@cindex Rests
 
-@indexcode{#}
+Rests are entered like notes, with a ``note name'' of `@code{r}':
 
-LilyPond contains a Scheme interpreter (the GUILE library) for
-internal use. The interpreter is accessed by the pound sign:
+@lilypond[singleline,verbatim]
+r1 r2 r4 r8
+@end lilypond
 
-Whereever the syntax allows Scheme expressions, you may enter one as
+Whole bar rests, centered in middle of the bar, are specified using
+@code{R} (capital R); see @ref{Multi measure rests}.  See also
+@seeinternals{Rest}.
 
-@example
-  #@var{scheme}
-@end example
+For some music, you may wish to explicitly specify the rest's vertical
+position.  This can be achieved by entering a note with the @code{\rest}
+keyword appended. Rest collision testing will leave these rests alone.
 
-Evaluates the specified Scheme code. If this is used at toplevel, then
-the result is discarded. Example:
-@example
-  \property Staff.TestObject \override #'symbol =  #(+ 1 2)
-@end example
+@lilypond[singleline,verbatim]
+a'4\rest d'4\rest
+@end lilypond
 
-(in this case, @code{\override} expects two Scheme expressions. 
 
-[refer appendix/ online intro on Scheme] 
+@c .  {Skips}
+@c FIXME: naming.
+@node Skips
+@subsection Skips
+@cindex Skip
+@cindex Invisible rest
+@cindex Space note
 
-@cindex keyword
+An invisible rest (also called a `skip') can be entered like a note
+with note name `@code{s}' or with @code{\skip @var{duration}}:
 
-Keywords start with a backslash, followed by a number of lower case
-alphabetic characters.  These are all the keywords.
+@lilypond[singleline,verbatim]
+a2 s4 a4 \skip 1 a4 
+@end lilypond
 
-@example
-apply arpeggio autochange spanrequest commandspanrequest
-simultaneous sequential accepts alternative bar breathe
-char chordmodifiers chords clef cm consists consistsend
-context denies duration dynamicscript elementdescriptions
-font grace header in lyrics key mark musicalpitch
-time times midi mm name pitchnames notes outputproperty
-override set revert partial paper penalty property pt
-relative remove repeat addlyrics partcombine score
-script stylesheet skip textscript tempo translator
-transpose type
-@end example
+@c FIXME: in Lyrics mode, we have " " and _
 
-@cindex integer
+In Lyrics mode, invisible rests are entered using either `@code{" "}' 
+or `@code{_}':
+@lilypond[singleline,verbatim]
+<
+  \context Lyrics \lyrics { lah2 di4 " " dah2 _4 di }
+  \notes\relative c'' { a2 a4 a a2 a4 a }
+>
+@end lilypond
 
-Formed from an optional minus sign followed by digits.  Arithmetic
-operations cannot be done with integers, and integers cannot be mixed
-with reals.
+Note that the @code{s} syntax is only available in Note mode and Chord
+mode.  In other situations, you should use the @code{\skip} command,
+which will work outside of those two modes:
 
-@cindex real
+@lilypond[singleline,verbatim]
+\score {
+  \context Staff <
+    { \time 4/8 \skip 2 \time 4/4 } 
+    \notes\relative c'' { a2 a1 }
+  >
+}
+@end lilypond
 
-Formed from an optional minus sign and a sequence of digits followed
-by a @emph{required} decimal point and an optional exponent such as
-@code{-1.2e3}.  Reals can be built up using the usual operations:
-`@code{+}@indexcode{+}', `@code{-}@indexcode{-}', `@code{*}@indexcode{*}', and
-`@code{/}@indexcode{/}', with parentheses for grouping.
+The skip command is merely an empty musical placeholder.  It doesn't
+produce any output, not even transparent output.
 
-A real constant can be followed by one of the dimension
-keywords:
-@cindex dimensions
- @code{\mm}@keyindex{mm},
-@code{\pt}@keyindex{pt}, @code{\in}@keyindex{in}, or
-@code{\cm}@keyindex{cm}, for millimeters, points, inches and
-centimeters, respectively.  This converts the number to a real that
-is the internal representation of dimensions.
 
 
+@c .  {Durations}
+@node Durations
+@subsection Durations
 
-@cindex string
 
-Begins and ends with the `@code{"}' character.  To include a `@code{"}'
-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.
+@cindex duration
+@cindex @code{\duration}
 
 
-The tokenizer accepts the following commands. They have no grammatical
-function, hence they can appear anywhere in the input.
+In Note, Chord, and Lyrics mode, durations are designated by numbers
+and dots: durations are entered as their reciprocal values.  For example,
+a quarter note is entered using a @code{4} (since it's a 1/4 note), while
+a half note is entered using a @code{2} (since it's a 1/2 note).  For notes
+longer than a whole you must use identifiers.
+@c FIXME: what's an identifier?  I don't think it's been introduced yet.
+@c and if it has, I obviously skipped that part.     - Graham
 
-@example
-  \maininput@keyindex{maininput}
-@end example
+@example 
+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 
 
-This command is used in init files to signal that the user file must
-be read. This command cannot be used in a user file.
+@lilypond[noindent,noquote]
+\score {
+  \notes \relative c'' {
+    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
 
-@example
-  \include@keyindex{include} @var{file}
-@end example
 
-Include @var{file}.  The argument @var{file} may be a quoted string (an
-unquoted string will not work here!) or a string identifier.  The full
-filename including the @file{.ly} extension must be given,
+If the duration is omitted then it is set to the previously entered
+duration.  At the start of parsing, a quarter note is assumed.  The
+duration can be followed by dots (`@code{.}') in order to obtain dotted
+note lengths:
+@cindex @code{.}
 
-@example
-  \version@keyindex{version} @var{string} ;
-@end example
+@lilypond[fragment,verbatim,center]
+  a' b' c''8 b' a'4 a'4. b'4.. c'8.
+@end lilypond
+@cindex @code{r}
+@cindex @code{s}
 
-Specify the version of LilyPond that a file was written for.  The
-argument is a version string in quotes, for example @code{"1.2.0"}. 
-This is used to detect invalid input, and to aid
-@code{convert-ly}, a tool that automatically upgrades input files.
+You can alter the length of duration by a fraction @var{N/M}
+appending `@code{*}@var{N/M}' (or `@code{*}@var{N}' if @var{M=1}). This
+won't affect the appearance of the notes or rests produced.
 
+@lilypond[fragment,verbatim]
+  a'2*2 b'4*2 a'8*4 a'4*3/2 gis'4*3/2 a'4*3/2 a'4
+@end lilypond
 
+Durations can also be produced through GUILE extension mechanism. 
+@lilypond[verbatim,fragment]
+ c'\duration #(ly:make-duration 2 1)
+@end lilypond
 
-@cindex other languages
 
-@node Other languages, , ,  Reference Manual
+@refbugs
 
-Note name definitions have been provided in various languages. 
-Simply include the language specific init file.  For example:
-`@code{\include "english.ly"}'.  The available language files and the
-names they define are:
+Dot placement for chords is not perfect.  In some cases, dots overlap:
+@lilypond[]
+ <<f, c'' d e f>>4.
+@end lilypond
 
-@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 
 
-Pitch names can be redefined using the @code{\pitchnames} command, see
-@ref{Pitch names}.
+@node Ties
+@subsection Ties
 
-@cindex Lexical Modes
+@cindex Tie
+@cindex ties
+@cindex @code{~}
 
-@cindex modes
+A tie connects two adjacent note heads of the same pitch.  The tie in
+effect extends the length of a note.  Ties should not be confused with
+slurs, which indicate articulation, or phrasing slurs, which indicate
+musical phrasing.  A tie is entered using the tilde symbol `@code{~}'.
 
-@node Lexical modes, , ,  Reference Manual
+@lilypond[fragment,verbatim,center]
+  e' ~ e' <<c' e' g'>> ~ <<c' e' g'>>
+@end lilypond
 
-To simplify entering notes, lyrics, and chords, @emph{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.
+When a tie is applied to a chord, all note heads (whose pitches match) are
+connected.  If you try to tie together chords that have no common pitches,
+no ties will be created.
 
-@table @samp
-  @item Normal mode.
-@cindex mode!normal
-    At the start of parsing, @emph{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.
-
-  @item Note mode.
-@cindex mode!note
-
-    Note mode is introduced by the keyword
-    @code{\notes}@keyindex{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.
-
-    Since combinations of numbers and dots are used for indicating
-    durations, it is not possible to enter real numbers in this mode.
-
-  @item Chord mode.
-@cindex mode!chord
-
-    Chord mode is introduced by the keyword
-    @code{\chords}@keyindex{chords}.  It is similar to Note mode, but
-    words are also looked up in a chord modifier table (containing
-    @code{maj}, @code{dim}, etc).
-
-    Since combinations of numbers and dots are used for indicating
-    durations, you can not enter real numbers in this mode.  Dashes
-    and carets are used to indicate chord additions and subtractions,
-    so scripts can not be entered in Chord mode.
-
-  @item Lyrics mode. 
-@cindex mode!lyric
-
-    Lyrics mode is introduced by the keyword
-    @code{\lyrics}@keyindex{lyrics}.  This mode has rules that make it
-    easy to include punctuation and diacritical marks in words.  A
-    word in Lyrics mode begins with: an alphabetic character,
-    `@code{_}', `@code{?}', `@code{!}', `@code{:}', `@code{'}', the
-    control characters @code{^A} through @code{^F}, @code{^Q} through
-    @code{^W}, @code{^Y}, @code{^^}, any 8-bit character with ASCII code
-    over 127, or a two-character combination of a backslash followed
-    by one of `@code{`}', `@code{'}', `@code{"}', or
-    `@code{^}'.@footnote{The purpose of Lyrics mode is that you can
-    enter lyrics in @TeX{} format or a standard encoding without
-    needing quotes.  The precise definition of this mode indeed is
-    ludicrous.  This will remain so until the authors of LilyPond
-    acquire a deeper understanding of character encoding, or someone
-    else steps up to fix this.}
-
-    Subsequent characters of a word can be any character that is not
-    a digit and not white space.  One important consequence of this
-    is that a word can end with `@code{@}}', which may be confusing if
-    you thought the closing brace was going to terminate Lyrics
-    mode.@footnote{LilyPond will issue a warning, though.}  Any
-    `@code{_}' character which appears in an unquoted word is
-    converted to a space.  This provides a mechanism for introducing
-    spaces into words without using quotes.  Quoted words can also be
-    used in Lyrics mode to specify words that cannot be written with
-    the above rules.  Here are some examples.  Not all of these words
-    are printable by @TeX{}.
+If you want less ties created for a chord, you can set
+@code{Voice.sparseTies} to true.  In this case, a single tie is used
+for every tied chord.
+@lilypond[fragment,verbatim,center]
+  \property Voice.sparseTies = ##t
+  <<c' e' g'>> ~ <<c' e' g'>>
+@end lilypond
 
-@example 
-Ah!             % a word
-2B_||_!2B       % not a word because it starts with a digit
-``Hello''       % not a word because it starts with `
-_ _ _ _         % 4 words, each one a space 
-@end example 
+In its meaning a tie is just a way of extending a note duration, similar
+to the augmentation dot: the following example are two ways of notating
+exactly the same concept.
+@c
+@lilypond[fragment, singleline]
+\time 3/4 c'2. c'2 ~ c'4
+@end lilypond
+If you need to tie notes over bars, it may be easier to use
+@ref{Automatic note splitting}.
 
-    Since combinations of numbers and dots are used for indicating
-    durations, you can not enter real numbers in this mode.
-@end table
+See also @seeinternals{Tie}.
 
-[todo: include short table showign differences] 
 
-@node Types, , ,  Reference Manual
-@section Types
+@refbugs
 
-@cindex  Identifiers
+At present, the tie is represented as a separate event, temporally
+located in between the notes.  Tying only a subset of the note heads
+of a chord is not supported in a simple way.  It can be achieved by
+moving the tie-engraver into the Thread context and turning on and off
+ties per Thread.
 
-[say something about types]
+Switching staves when a tie is active will not work.
 
-All of the information in a LilyPond input file, is represented as a
-Scheme value. In addition to normal Scheme data types (such as pair,
-number, boolean, etc.), LilyPond has a number of specialized data types,
+@node Automatic note splitting 
+@subsection Automatic note splitting
+@c FIXME: This subsection doesn't belong in @ref{Note entry}.
 
-@itemize @bullet
-  @item Input
-  @item c++-function
-  @item Music: see @ref{Music expressions}
-  @item Identifier
-  @item Translator_def:
-See       section @ref{contextdefs} for more information
-
-  @item Duration
-  @item Pitch
-  @item Score (TODO, smobme)
-@item  Music_output_def (TODO, smobme)
-
-  @item Moment (rational number)
-@end itemize
+LilyPond can automatically converting long notes to tied notes.  This
+is done by replacing the @code{Note_heads_engraver} by the
+@code{Completion_heads_engraver}. 
 
-LilyPond also includes some transient object types. Objects of these
-types are built during a LilyPond run, and do not `exist' per se within
-your input file. These objects are created as a result of your input
-file, so you can include commands in the input to manipulate them,
-during a lilypond run .
+@lilypond[verbatim,noindent,noquote]
+\score{
+  \notes\relative c'{ \time 2/4
+  c2. c8 d4 e f g a b c8 c2 b4 a g16 f4 e d c8. c2 
+  }
+  \paper{ \translator{
+      \ThreadContext
+      \remove "Note_heads_engraver"
+      \consists "Completion_heads_engraver"
+  } } }
+@end lilypond
 
-@itemize @bullet
-  @item Grob: short for Graphical object. See @ref{Grobs}. 
-  @item Molecule: device-independent paper output object,
-    including dimensions.  Produced by some Grob functions 
-  @item Translator: object that  produces audio  objects or Grobs
+This engraver splits all running notes at the bar line, and inserts
+ties.  One of its uses is to debug complex scores: if the measures are
+not entirely filled, then the ties exactly show how much each measure
+is off.
 
-  @item Font_metric: object representing a font. (Not yet user accessible.)
-  @item Audio_element: (TODO, smobme)
-@end itemize
+@refbugs
 
-Identifiers allow objects to be assigned to names during the parse
-stage.  To assign an identifier, you use `@var{name}=@var{value}' and to
-refer to an identifier, you preceed its name with a backslash:
-`@code{\}@var{name}'.  Identifier assignments must appear at top level
-in the @emph{Lilypond} file.  Semicolons are forbidden after assignments
-appearing at top level but they are obligatory after assignments
-appearing in the @code{\paper} block, see Section @ref{paper}.
+Not all durations (especially those containing tuplets) can be
+represented exactly; the engraver will not insert tuplets. 
 
-@var{value} is any valid Scheme value or any of the input-types listed
-above.
+@node Tuplets
+@subsection Tuplets
 
-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 whose name is the same as the name of a keyword.
+@cindex tuplets
+@cindex triplets
+@cindex @code{\times}
 
-The right hand side of an identifier assignment is parsed completely
-before the assignment is done, so it is allowed to redefine an
-identifier in terms of its old value, e.g.
+Tuplets are made out of a music expression by multiplying all durations
+with a fraction.
 
+@cindex @code{\times}
 @example
-  foo = \foo * 2.0
+  \times @var{fraction} @var{musicexpr}
 @end example
 
-When an identifier is referenced, the information it points to is
-copied.  For this reason, an identifier reference must always be the
- first item in a block.
-@example
-\paper  @{
-   foo = 1.0
-   \paperIdent % wrong and invalid
-@}
+The duration of @var{musicexpr} will be multiplied by the fraction. 
+In the sheet music, 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:
 
-\paper @{
-   \paperIdent % correct
-   foo = 1.0
-@}
-@end example
+@lilypond[fragment,verbatim,center]
+  g'4 \times 2/3 {c'4 c' c'} d'4 d'4
+@end lilypond
+
+The property @code{tupletSpannerDuration} specifies how long each bracket
+should last.  With this, you can make lots of tuplets while typing
+@code{\times} only once, saving you lots of typing.
 
+@lilypond[fragment,  relative, singleline, verbatim]
+\property Voice.tupletSpannerDuration = #(ly:make-moment 1 4)
+\times 2/3 { c'8 c c c c c }
+@end lilypond
 
-@node Music expressions, , ,  Reference Manual
-@section Music expressions
+The format of the number is determined by the property
+@code{tupletNumberFormatFunction}.  The default prints only the
+denominator, but if you set it to the Scheme function
+@code{fraction-tuplet-formatter}, Lilypond will print @var{num}:@var{den}
+instead.
 
-@cindex music expressions
 
-Music in @emph{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{tupletNumberFormatFunction}
+@cindex tuplet formatting 
 
-@example 
-\sequential @{ c4 d4 @} 
-@end example 
+See also @seeinternals{TupletBracket}.
 
-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).
+@refbugs
 
-Atomic music expression are discussed in
-subsection @ref{Atomic music expressions}.  Compound music expressions are
-discussed in subsection @ref{Compound music expressions}.
+Nested tuplets are not formatted automatically.  In this case, outer
+tuplet brackets should be moved automatically.
 
+@node Easy Notation note heads 
+@subsection Easy Notation note heads
 
+@cindex easy notation
+@cindex Hal Leonard
 
-@node Atomic music expressions, , ,  Reference Manual
-@section Atomic music expressions
+A entirely different type of note head is the "easyplay" note head: a
+note head that includes a note name.  It is used in some publications by
+Hal-Leonard Inc. music publishers.
 
+@lilypond[singleline,verbatim,26pt]
+\score {
+  \notes { c'2 e'4 f' | g'1 }
+  \paper { \translator { \EasyNotation } } 
+}
+@end lilypond
 
+Note that @code{EasyNotation} overrides a @internalsref{Score} context.  You
+probably will want to print it with magnification or a large font size to
+make it more readable.  To print with magnification, you must create a dvi
+(with @file{ly2dvi}) and then enlarge it with something like @file{dvips -x
+2000 file.dvi}.  See @file{man dvips} for details.  To print with a larger
+font, see @ref{Font Size}.
 
 
-@cindex pitch
+@cindex Xdvi
+@cindex ghostscript
 
-@cindex duration
+If you view the result with Xdvi, then staff lines will show through
+the letters.  Printing the PostScript file obtained with ly2dvi does
+produce the correct result.
 
-The syntax for pitch specification is
 
+@node Easier music entry
+@section Easier music entry
+@cindex Music entry
+@menu
+* Graphical interfaces::        
+* Relative octaves::            
+* Bar check::                   
+* Point and click::             
+* Skipping corrected music::    
+@end menu
 
-@example
-  \musicalpitch@keyindex{musicalpitch} @{ @var{octave} @var{note} @var{shift} @}
-@end example
+When entering music with LilyPond, it is easy to introduce errors. This
+section deals with tricks and features that help you enter music, and
+find and correct mistakes.
 
-@var{octave} is specified by an integer, zero for the octave
-containing middle C.  @var{note} is a number from 0 to 7, with 0
-corresponding to C and 7 corresponding to B.  The shift is zero for a
-natural, negative to add flats, or positive to add sharps.
+@node Graphical interfaces
+@subsection Graphical interfaces
 
-In Note and Chord mode, pitches may be designated by names.  See
-section @ref{Other languages} for pitch names in different languages.
+@cindex GUI
+@cindex graphical interface
+@cindex sequencer
+@cindex RoseGarden
+@cindex Denemo
+@cindex NoteEdit
+@cindex MIDI
 
-The syntax for duration specification is
+One way to avoid entering notes using the keyboard is to use a
+graphical user interface.  The following programs are known to have
+a lilypond export option:
 
-@example
- \duration@keyindex{duration}
-   @{ @var{length} @var{dotcount} @}
-@end example
+@itemize @bullet
+@item
+Denemo was once intended as
+a LilyPond graphical user interface.  It run on Gnome/GTK.
 
-@var{length} is the negative logarithm (base 2) of the duration:
-1 is a half note, 2 is a quarter note, 3 is an eighth
-note, etc.  The number of dots after the note is given by
-@var{dotcount}.
+@quotation
+@uref{http://denemo.sourceforge.net/}
+@end  quotation
 
-In Note, Chord, and Lyrics mode, durations may be designated by
-numbers and dots.  
+@item
+ Noteedit, a graphical score editor that runs under KDE/Qt.
+@quotation
+@uref{http://rnvs.informatik.tu-chemnitz.de/~jan/noteedit/noteedit.html,}
+@end quotation
 
+@item
+RoseGarden was once the inspiration for naming LilyPond.  Nowadays it
+has been rewritten from scratch and supports LilyPond export as of
+version 0.1.6.
 
-@node Note specification, , ,  Reference Manual
+@quotation
+@uref{http://rosegarden.sf.net/}
+@end quotation
+@end itemize
 
-@cindex note specification
+Another option is to enter the music using your favorite MIDI
+sequencer, and then import it using midi2ly. midi2ly is described in
+@ref{Invoking midi2ly}.
 
-@cindex pitches
 
-@cindex entering notes
+@c .  {Relative}
+@node Relative octaves
+@subsection Relative octaves
+@cindex Relative
+@cindex relative octave specification
 
-A note specification has the form
+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{\relative}
 @example
-  @var{pitch}[@var{octavespec}][!][?][@var{duration}]
+  \relative @var{startpitch} @var{musicexpr}
 @end example
 
-The pitch of the note is specified by the note's name.
-
-
-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 notenames!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 has predefined sets of notenames for various languages.  See
-@ref{Other languages}.
-
-
-
-The optional octave specification takes the form of a series of
-single quote (`@code{'}@indexcode{'}') characters or a series of comma
-(`@code{,}@indexcode{,}') characters.  Each @code{'} raises the pitch by one
-octave; each @code{,} lowers the pitch by an octave.
-
-@lilypond[fragment,verbatim,center]
-  c' d' e' f' g' a' b' c''
+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
+(This distance is determined without regarding alterations; a
+@code{fisis} following a @code{ceses} will be put above the
+@code{ceses})
+
+The octave changing marks @code{'} and @code{,} can 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}.
+
+Entering music that changes octave frequently  is easy in relative mode.
+@lilypond[fragment,singleline,verbatim,center]
+  \relative c'' {
+    b c d c b c bes a 
+  }
 @end lilypond
 
+And octave changing marks are used for intervals greater than a fourth.
 @lilypond[fragment,verbatim,center]
-  cis' dis' eis' fis' gis' ais' bis'
+  \relative c'' {
+    c g c f, c' a, e'' }
 @end lilypond
 
-@lilypond[fragment,verbatim,center]
-  ces' des' es' fes' ges' as' bes'
-@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. However, other notes
+within the second chord are determined by looking at the immediately
+preceding note.
 
 @lilypond[fragment,verbatim,center]
-  cisis' eisis' gisis' aisis' beses'
-@end lilypond
+  \relative c' {
+    c <<c e g>> 
+    <<c' e g>>
+    <<c, e' g>>
+  }
+@end lilypond 
+@cindex @code{\notes}
 
-@lilypond[fragment,verbatim,center]
-  ceses' eses' geses' ases' beses'
-@end lilypond
+The pitch after the @code{\relative} contains a note name.  To parse
+the pitch as a note name, you have to be in note mode, so there must
+be a surrounding @code{\notes} keyword (which is not
+shown here).
 
-Whenever a C-sharp is desired,  you must specify a C-sharp.  LilyPond
-will determine what accidentals to typeset depending on the key and
-context.  A reminder accidental 
-@cindex reminder accidental
- 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{?}@indexcode{?}' after the pitch.
+The relative conversion will not affect @code{\transpose},
+@code{\chords} 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}.
 
-@lilypond[fragment,verbatim,center]
-  cis' d' e' cis'  c'? d' e' c'!
-@end lilypond
 
+@c . {Bar check}
+@node Bar check
+@subsection Bar check
+@cindex Bar check
 
-@cindex duration
+@cindex bar check
+@cindex @code{barCheckSynchronize}
+@cindex @code{|}
 
-Durations are entered as their reciprocal values.  For notes longer
-than a whole note, use identifiers.
 
-@quotation
+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{barCheckSynchronize}, the beginning of the measure will be
+relocated, so this can also be used to shorten measures.
 
-@example 
-c'\longa c'\breve  
-c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 
-@end example 
+A bar check is entered using the bar symbol, @code{|}:
+@example
+  \time 3/4 c2 e4 | g2.
+@end example
 
-@end quotation
 
-@quotation
 
-@lilypond[]
-\score {
-  \notes \relative c'' {
-    a\longa a\breve  
-    a1 a2 a4 a8 a16 a32 a64 a64 
-  }
-  \paper {
-%{    \translator {
-      \StaffContext
-       \remove "Clef_engraver";
-       \remove "Staff_symbol_engraver";
-    } %}
-  }
-}
-@end lilypond
-@end quotation
+@cindex skipTypesetting
 
-@quotation
+Failed bar checks are most often caused by entering incorrect
+durations. Incorrect durations often completely garble up the score,
+especially if it is polyphonic, so you should start correcting the score
+by scanning for failed bar checks and incorrect durations.  To speed up
+this process, you can use @code{skipTypesetting} (See @ref{Skipping
+corrected music})). 
 
-@example 
-r\longa r\breve  
-r1 r2 r4 r8 r16 r32 r64 r64 
-@end example 
+@c .  {Point and click}
+@node Point and click
+@subsection Point and click
+@cindex poind and click
 
-@end quotation
+Point and click lets you find notes in the input by clicking on them in
+the Xdvi window. This makes it very easy to find input that causes some
+error in the sheet music.
 
-@quotation
+To use it, you need the following software
+@itemize @bullet
+@item A dvi viewer that supports src specials.
+@itemize @bullet
+@item Xdvi, version 22.36 or newer.  Available from
+@uref{ftp://ftp.math.berkeley.edu/pub/Software/TeX/xdvi.tar.gz,ftp.math.berkeley.edu}.
 
-@lilypond[]
-\score {
-  \notes \relative c'' {
-    r\longa r\breve  
-    r1 r2 r4 r8 r16 r32 r64 r64 
-  }
-  \paper {
-    loose_column_distance = 2.5 * \staffspace;
-    linewidth = -1.0;
-    \translator {
-       \StaffContext
-       \remove "Clef_engraver";
-       \remove "Staff_symbol_engraver";
-       \remove "Bar_engraver";
-    }
-  }
-}
-@end lilypond
-@end quotation
+  Note that most @TeX{} distributions ship with xdvik, which is always
+  a few versions behind the official Xdvi. To find out which xdvi you
+  are running, try @code{xdvi -version} or @code{xdvi.bin -version}.
+@item KDVI.  A dvi viewer for KDE.  You need KDVI from KDE 3.0 or
+newer.  Enable option @emph{Inverse search} in the menu @emph{Settings}.
 
-If the duration is omitted then it is set equal to the previous
-duration.  If there is no previous duration, a quarter note is
-assumed.  The duration can be followed by a dot (`@code{.}@indexcode{.}')
-to obtain dotted note lengths.
+@cindex Xdvi
+@cindex KDVI
+@cindex KDE
 
-@lilypond[fragment,verbatim,center]
-  a'4. b'4.
-@end lilypond
 
-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.
 
+@end itemize
+@item An editor with a client/server interface (or a lightweight GUI
+editor).
 
-Rests are entered like notes, with note name `@code{r}@indexcode{r}',
-or `@code{R}@indexcode{R}'.  There is also a note name
-`@code{s}@indexcode{s}', which produces a space of the specified
-duration.  `@code{R}' is specifically meant for entering parts: the
-@code{R} rest can expand to fill a score with rests, or it can be
-printed as a single multimeasure rest.
+@cindex editor
 
-You can control the expansion by setting 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.
+@itemize @bullet
+@item Emacs. Emacs is an extensible text-editor.  It is available from
+@uref{http://www.gnu.org/software/emacs/}.  You need version 21 to use
+column location.
 
+@c move this elsewhere?
 
-@cindex lyrics expressions
+LilyPond also comes with support files for emacs: lilypond-mode for
+emacs provides indentation, syntax coloring and handy compile
+short-cuts. If lilypond-mode is not installed on your platform, then
+refer to the installation instructions for more information
 
-Syllables are entered like notes, with pitches replaced by text.  For
-example, `@code{Twin-4 kle4 twin-4 kle4}' enters four syllables, each
-with quarter note duration.  Note that the hyphen has no special
-meaning for lyrics, and does not introduce special symbols.  See
-section @ref{Lexical modes} for a description of what is interpreted as
-lyrics.
+@cindex emacs
+@cindex emacs mode
+@cindex lilypond-mode for emacs
+@cindex syntax coloring
 
-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}.
+@item XEmacs. Xemacs is very similar to emacs.
 
+@cindex XEmacs
 
+@item NEdit.  NEdit runs under Windows, and Unix.
+  It is available from @uref{http://www.nedit.org}.
 
-@cindex properties
+@cindex NEdit
 
-@example
-  \property@keyindex{property}
-    @var{contextname}.@var{propname} =  @var{value}
-@end example
+@item GVim.  GVim is a GUI variant of VIM, the popular VI
+clone.  It is available from @uref{http://www.vim.org}.
 
-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 GVim
+@cindex Vim
 
+@end itemize
+@end itemize
 
 
-@cindex translator switches
+Xdvi must be configured to find the @TeX{} fonts and music
+fonts. Refer to the Xdvi documentation for more information.
 
+To use point-and-click, add one of these lines to the top of your .ly
+file.
 @example
-  \translator@keyindex{translator}
-    @var{contexttype} = @var{name}
+#(ly:set-point-and-click 'line)
 @end example
+@cindex line-location
+
+When viewing, Control-Mousebutton 1 will take you to the originating
+spot in the @file{.ly} file.  Control-Mousebutton 2 will show all
+clickable boxes.
 
-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.
+If you correct large files with point-and-click, be sure to start
+correcting at the end of the file. When you start at the top, and
+insert one line, all following locations will be off by a line.
 
-Usually this is used to switch staffs in Piano music, e.g.
+@cindex Emacs
+For using point-and-click with emacs,  add the following
+In your emacs startup file (usually @file{~/.emacs}), 
+@example
+(server-start)
+@end example
 
+Make sure that the environment variable @var{XEDITOR} is set to
 @example
-  \translator Staff = top @var{Music}
+emacsclient --no-wait +%l %f
 @end example
+@cindex @var{XEDITOR}
+If you use xemacs instead of emacs, you use @code{(gnuserve-start)} in
+your @file{.emacs}, and set @code{XEDITOR} to @code{gnuclient -q +%l %f}
+
+For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or
+use this argument with xdvi's @code{-editor} option.
+
+@cindex NEdit
+For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or
+use this argument with xdvi's @code{-editor} option.
+
+If can also make your editor jump to the exact location of the note
+you clicked. This is only supported on Emacs and VIM. Users of Emacs version
+20 must apply the patch @file{emacsclient.patch}. Users of version 21
+must apply @file{server.el.patch} (version 21.2 and earlier).  At the
+top of the @code{ly} file, replace the @code{set-point-and-click} line
+with the following line,
+@example
+#(ly:set-point-and-click 'line-column)
+@end example
+@cindex line-colomn-location
+and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.  Vim
+users can set @var{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}.
 
 
-@cindex output properties
 
+@refbugs
 
-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:
+When you convert the @TeX{} file to PostScript using @code{dvips}, it
+will complain about not finding @code{src:X:Y} files. These complaints
+are harmless, and can be ignored.
 
+@node Skipping corrected music
+@subsection Skipping corrected music
 
-@lilypond[fragment,verbatim]
-\relative c'' { c4
-       \context Staff \outputproperty
-               #(make-type-checker 'Note_head)
-               #'extra-offset = #'(5.0 . 7.5)
-<c8 e g> }
+The property @code{Score.skipTypesetting} can be used to switch on and
+off typesetting completely during the interpretation phase. When
+typesetting is switched off, the music is processed much more quickly.
+You can use this to skip over the parts of a score that you have already
+checked for errors. 
+
+@lilypond[fragment,singleline,verbatim]
+\relative c'' { c8 d
+\property Score.skipTypesetting = ##t
+  e f g a g c, f e d
+\property Score.skipTypesetting = ##f
+c d b bes a g c2 } 
 @end lilypond
 
-This selects all note heads occurring at current staff level, and sets
-the extra-offset of those heads to (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.
 
 
-@cindex commands
+@node Staff notation
+@section Staff notation
 
-Commands are music expressions that have no duration.   
+This section deals with music notation that occurs on staff level,
+such as keys, clefs and time signatures.
 
+@cindex Staff notation
 
-@example
+@menu
+* Staff symbol::                
+* Key signature::               
+* Clef::                        
+* Time signature::              
+* Unmetered music::             
+* Bar lines::                   
+@end menu
 
-  @code{\key}@keyindex{key} @var{pitch} @var{type} @code{;}
-@end example
+@node Staff symbol
+@subsection Staff symbol
 
-Change the key signature.  @var{type} should be
-@code{\major}@keyindex{major} or @code{\minor}@keyindex{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}@keyindex{key} commands to get the corresponding major key,
-e.g., @code{\minor}@keyindex{minor} is defined as 3.  The standard
-mode names @code{\ionian}@keyindex{ionian},
-@code{\locrian}@keyindex{locrian}, @code{\aeolian}@keyindex{aeolian},
-@code{\mixolydian}@keyindex{mixolydian}, @code{\lydian}@keyindex{lydian},
-@code{\phrygian}@keyindex{phrygian}, and @code{\dorian}@keyindex{dorian}
-are also defined.
 
-@example
-  @code{\keysignature}@keyindex{keysignature} @var{pitchseq} @code{;}
-@end example
+@cindex adjusting staff symbol
+@cindex StaffSymbol, using \property
+@cindex staff lines, setting number of
 
-Specify an arbitrary key signature.  The pitches from @var{pitch} will
-be printed in the key signature in the order that they appear on the
-list.
-        
-@example
-  \mark@keyindex{mark} @var{unsigned};
-  \mark @var{string};
-@end example
 
-Prints a mark over or under the staff.  You must add
-@code{Mark_engraver}@indexcode{Mark_engraver} to the Score context for
-this to work.
+The lines of the staff symbol are formed by the
+@internalsref{StaffSymbol} object.  This object is created at the moment
+that their context is created.  You can not change the appearance of
+the staff symbol by using @code{\override} or @code{\set}.  At the
+moment that @code{\property Staff} is interpreted, a Staff context is
+made, and the StaffSymbol is created before any @code{\override} is
+effective. You can deal with this either overriding properties in a
+@code{\translator} definition, or by using @code{\outputproperty}.
 
-@node barlines, , ,  Reference Manual
 
-@example
-  \bar@keyindex{bar} @var{bartype};
-@end example
+@refbugs
 
-This is a short-cut for doing
-@example
-  \property Score.whichBar = @var{bartype} 
-@end example
+If you end a staff half way a piece, the staff symbol may not end
+exactly on the barline.
 
-You are encouraged to use @code{\repeat} for repetitions.  See 
-@ref{Repeats}, and the documentation of @code{whichBar}.
 
+@c .  {Key}
+@node Key signature
+@subsection Key signature
+@cindex Key
 
+@cindex @code{\key}
+
+Setting or changing the key signature is done with the @code{\key}
+command.
 @example
-  \time@keyindex{time} @var{numerator}@code{/}@var{denominator} @code{;}
+  @code{\key} @var{pitch} @var{type}
 @end example
 
-A short-cut for doing
+@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}
+
+Here, @var{type} should be @code{\major} or @code{\minor} to get
+@var{pitch}-major or @var{pitch}-minor, respectively.
+The standard mode names @code{\ionian},
+@code{\locrian}, @code{\aeolian}, @code{\mixolydian}, @code{\lydian},
+@code{\phrygian}, and @code{\dorian} are also defined.
+
+This command sets the context property @code{Staff.keySignature}. 
+Non-standard key signatures can be specified by setting this property
+directly.
+
+The printed signature is a @internalsref{KeySignature} object, typically
+created in @internalsref{Staff} context.
+
+@cindex @code{keySignature}
+
+@c .  {Clef}
+@node Clef
+@subsection Clef
+@cindex @code{\clef}
+
+The clef can be set or changed with the @code{\clef} command:
+@lilypond[fragment,verbatim]
+  \key f\major  c''2 \clef alto g'2
+@end lilypond
+
+Supported clef-names include 
+@c Moved standard clefs to the top /MB
+@table @code
+@item treble, violin, G, G2
+G clef on 2nd line
+@item alto, C
+ C clef on 3rd line
+@item tenor
+ C clef on 4th line
+@item bass, F
+ F clef on 4th line
+@item french
+ G clef on 1st line, so-called French violin clef
+@item soprano
+ C clef on 1st line
+@item mezzosoprano
+ C clef on 2nd line
+@item baritone
+ C clef on 5th line
+@item varbaritone
+ F clef on 3rd line
+@item subbass
+ F clef on 5th line
+@item percussion
+ percussion clef
+@end table
+
+By adding @code{_8} or @code{^8} to the clef name, the clef is
+transposed one octave down or up, respectively.  Note that you have to
+enclose @var{clefname} in quotes if you use underscores or digits in the
+name. For example,
 @example
-     \property Score.timeSignatureFraction = #'(@var{numerator} . @var{denominator})
+       \clef "G_8"
 @end example
 
-See the documentation of @code{timeSignatureFraction}
+The object for this symbol is @internalsref{Clef}. 
 
-@example
 
-  \tempo@keyindex{tempo} @var{duration} = @var{perminute} @code{;}
-@end example
+This command is equivalent to setting @code{clefGlyph},
+@code{clefPosition} (which controls the Y position of the clef),
+@code{centralCPosition} and @code{clefOctavation}. A clef is created
+when any of these properties are changed.
 
-Used to specify the tempo.  For example, `@code{\tempo 4 = 76;}'
-requests output with 76 quarter notes per minute.
 
-@example
-  \partial@keyindex{partial} @var{duration} @code{;}
-@end example
+@c .  {Time signature}
+@node Time signature
+@subsection Time signature
+@cindex Time signature
+@cindex meter
+@cindex @code{\time}
 
-Short cut for 
+The time signature is set or changed by the @code{\time}
+command.
+@lilypond[fragment,verbatim]
+ \time 2/4 c'2 \time 3/4 c'2. 
+@end lilypond
 
-@example
-  \property Score.measurePosition = @var{length of duration}
-@end example
+The actual symbol that's printed can be customized with the @code{style}
+property. Setting it to @code{#'()} uses fraction style for 4/4 and
+2/2 time.
 
-See the documentation of @code{measurePosition}.
 
-@cindex anacrusis
+The object for this symbol is @internalsref{TimeSignature}.  There are
+many more options for its layout. They are selected through the
+@code{style} object property. See @file{input/test/time.ly} for more
+examples.
 
-@cindex upstep
+This command sets the property @code{timeSignatureFraction},
+@code{beatLength} and @code{measureLength} in the @code{Timing}
+context, which is normally aliased to @internalsref{Score}.  The property
+@code{timeSignatureFraction} determine where bar lines should be
+inserted, and how automatic beams should be generated.  Changing the
+value of @code{timeSignatureFraction} also causes a time signature
+symbol to be printed.
 
-@example
+More options are available through the Scheme function
+@code{set-time-signature}. In combination with the
+@internalsref{Measure_grouping_engraver}, it will create
+@internalsref{MeasureGrouping} signs. Such signs ease reading
+rhythmically complex modern music.  In the following example, the 9/8
+measure is subdivided in 2, 2, 2 and 3. This is passed to
+@code{set-time-signature} as the third argument @code{(2 2 2 3)}.
 
-  @code{|}@indexcode{|}
-@cindex bar check
+@lilypond[verbatim]
+\score { \notes \relative c'' {
+   #(set-time-signature 9 8 '(2 2 2 3))
+   g8 g d d g g a8-[-( bes g-]-) | 
+   #(set-time-signature 5 8 '(3 2))
+   a4. g4
+   }
+   \paper {
+       linewidth = -1.0
+       \translator { \StaffContext
+         \consists "Measure_grouping_engraver"
+   }}}
+@end lilypond 
+
+@c .   {Partial}
+@subsection Partial
+@cindex Partial
+@cindex anacrusis
+@cindex upbeat
+@cindex partial measure
+@cindex measure, partial
+@cindex shorten measures
+@cindex @code{\partial}
+
+Partial measures, for example in upbeats, are entered using the
+@code{\partial} command:
+@lilypond[fragment,verbatim]
+\partial 4* 5/16  c'16 c4 f16 a'2. ~ a'8. a'16 | g'1
+@end lilypond
 
+The syntax for this command is 
+@example
+  \partial @var{duration} 
+@end example
+This is  internally translated into
+@example
+  \property Timing.measurePosition = -@var{length of duration}
 @end example
+@cindex @code{|}
+The property @code{measurePosition} contains a rational number
+indicating how much of the measure has passed at this point.
 
-@cindex shorten measures
 
-@cindex upstep
+@node Unmetered music
+@subsection Unmetered music
 
-`@code{|}' is a bar check.  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 finding errors in the input.
-Depending on the value of @code{barCheckNoSynchronize}
-@indexcode{barCheckNoSynchronize} The beginning of the measure will be
-relocated, so this can also be used to shorten measures.
+Bar lines and bar numbers are calculated automatically. For unmetered
+music (e.g. cadenzas), this is not desirable.  The commands
+@code{\cadenzaOn} and @code{\cadenzaOff} can be used to switch off the
+timing information:
 
+@lilypond[fragment,relative,singleline,verbatim]
+c'2.
+\cadenzaOn
+c2
+\cadenzaOff
+c4 c4 c4 
+@end lilypond
 
-@example
+The property @code{Score.timing} can be used to switch off this
+automatic timing
 
-  \penalty@keyindex{penalty} @var{int} @code{;}
-@end example
+@c .   {Bar lines}
+@node Bar lines
+@subsection Bar lines
+@cindex Bar lines
 
-Discourage or encourage line breaks.  See identifiers
-@code{\break}@keyindex{break} and @code{\nobreak}@keyindex{nobreak} in
-section [on identifiers] [FIXME].
+@cindex @code{\bar}
+@cindex measure lines
+@cindex repeat bars
 
-@example
-  \clef@keyindex{clef} @var{clefname} @code{;}
-@end example
+Bar lines are inserted automatically, but if you need a special type
+of barline, you can force one using the @code{\bar} command:
+@lilypond[fragment,verbatim] c4 \bar "|:" c4
+@end lilypond
 
-Short-cut for
+The following bar types are available
+@lilypond[fragment,  relative, singleline, verbatim]
+c4
+\bar "|" c
+\bar "" c
+\bar "|:" c
+\bar "||" c
+\bar ":|" c
+\bar ".|" c
+\bar ".|." c
+\bar "|." 
+@end lilypond
 
-@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 are encouraged to use @code{\repeat} for repetitions.  See
+@ref{Repeats}.
+
+In scores with many staves, the barlines are automatically placed at
+top level, and they are connected between different staves of a
+@internalsref{StaffGroup}:
+@lilypond[fragment, verbatim]
+< \context StaffGroup <
+  \context Staff = up { e'4 d'
+     \bar "||"
+     f' e' }
+  \context Staff = down { \clef bass c4 g e g } >
+\context Staff = pedal { \clef bass c2 c2 } >
+@end lilypond
 
-Supported clef-names include 
+The objects that are created at @internalsref{Staff} level. The name is
+@internalsref{BarLine}.
 
-[todo]
+The command @code{\bar @var{bartype}} is a short cut for
+doing  @code{\property Score.whichBar = @var{bartype}}
+Whenever @code{whichBar} is set to a string, a bar line of that type is
+created.  @code{whichBar} is usually set automatically: at the start of
+a measure it is set to @code{defaultBarType}. The contents of
+@code{repeatCommands} is used to override default measure bars.
 
-@example
+@code{whichBar} can also be set directly, using @code{\property} or
+@code{\bar  }.  These settings take precedence over the automatic
+@code{whichBar} settings. 
 
-  \skip@keyindex{skip} @var{duration} @code{;}
-@end example
 
-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 space rest `@code{s}'.
+@cindex Bar_line_engraver
+@cindex whichBar
+@cindex repeatCommands
+@cindex defaultBarType
 
 
-@cindex beams
 
-@node Manual beams, , ,  Reference Manual
+@c .   {Polyphony}
+@node Polyphony
+@section Polyphony
+@cindex polyphony
 
-A beam is specified by surrounding the beamed notes with brackets
-`@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'.  
+The easiest way to enter such fragments with more than one voice on a
+staff is to split chords using the separator @code{\\}.  You can use
+it for small, short-lived voices (make a chord of voices) or for
+single chords:
 
-@lilypond[fragment,verbatim,center]
-  [a'8 a'] [a'16 a' a' a']
+@lilypond[verbatim,fragment]
+\context Voice = VA \relative c'' {
+ c4 < { f d e  } \\ { b c2 } > c4 < g' \\ b, \\  f \\ d >
+}
 @end lilypond
 
-Some more elaborate constructions:
+The separator causes @internalsref{Voice} contexts to be instantiated,
+bearing the names @code{"1"}, @code{"2"}, etc.
 
-@lilypond[fragment,verbatim,center]
-  [a'16 <a' c''> c'' <a' c''>]
-  \times 2/3 { [e'8 f' g'] }
-@end lilypond
+Sometimes, it is necessary to instantiate these contexts by hand: For
+Instantiate a separate Voice context for each part, and use
+@code{\voiceOne}, up to @code{\voiceFour} to assign a stem directions
+and horizontal shift for each part.
+@c
 
-Beaming can be generated automatically; see section @ref{autobeam}.
+@lilypond[singleline, verbatim]
+\relative c''
+\context Staff < \context Voice = VA { \voiceOne cis2 b  }
+  \context Voice = VB { \voiceThree b4 ais ~ ais4 gis4 } 
+  \context Voice = VC { \voiceTwo fis4~  fis4 f ~ f  } >
+@end lilypond
 
-[OUTDATED, FIXME]
+The identifiers @code{\voiceOne} to @code{\voiceFour} set directions
+ties, slurs and stems, and set shift directions.
+
+If you want more than four voices, you can also manually set
+horizontal shifts and stem directions, as is shown  in the following example:
+@lilypond[fragment, verbatim]
+  \context Staff \notes\relative c''<
+       \context Voice=one {
+       \shiftOff \stemUp e4
+       }
+       \context Voice=two {
+          \shiftOn \stemUp cis
+       }
+       \context Voice=three {
+         \shiftOnn \stemUp ais
+       }
+       \context Voice=four {
+          \shiftOnnn \stemUp fis
+       }
+  >
+@end lilypond
 
-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.
 
-@lilypond[fragment,verbatim,center]
-  \repeat "tremolo" 8 { c16 d16 }
-  \repeat "tremolo" 4 { c16 d16 }    
+Normally, note heads with a different number of dots are not merged, but
+if you set the object property @code{merge-differently-dotted}, they are:
+@lilypond[verbatim,fragment,singleline]
+\context Voice < {
+     g'8 g'8 
+     \property Staff.NoteCollision \override
+        #'merge-differently-dotted = ##t
+     g'8 g'8
+  } \\ { [g'8. f16] [g'8. f'16] } 
+  >
 @end lilypond
 
-@lilypond[fragment,verbatim,center]
-  c'4:32
+Similarly, you can merge half note heads with eighth notes, by setting
+@code{merge-differently-headed}:
+@lilypond[fragment, relative=2,verbatim]
+\context Voice < {
+    c8 c4.
+    \property Staff.NoteCollision
+      \override #'merge-differently-headed = ##t
+    c8 c4. } \\ { c2 c2 } >
 @end lilypond
 
+LilyPond also vertically shifts rests that are opposite of a stem. 
 
-@cindex --@@@code{-}@code{-}
+@lilypond[singleline,fragment,verbatim]
+\context Voice < c''4 \\  r4 >
+@end lilypond
 
-@indexcode{__}
+See also @internalsref{NoteCollision} and @internalsref{RestCollision}
 
-@cindex extender
+@refbugs
 
-@cindex hyphen
+Resolving collisions is a very intricate subject, and LilyPond only
+handles a few situations. When it can not cope, you are advised to use
+@code{force-hshift} of the @internalsref{NoteColumn} object and pitched
+rests to override typesetting decisions.
 
-The syntax for an extender mark is `@code{__}'.  This syntax can only
-be used within lyrics mode.  The syntax for a spanning hyphen (i.e.,
-a hyphen that will be printed between two lyric syllables) is
-`@code{-}@code{-}'.
+@node Beaming
+@section Beaming
 
+Beams are used to group short notes into chunks that are aligned with
+the metrum. They are inserted automatically in most cases.
 
-@cindex ties
+@lilypond[fragment,verbatim, relative=2]
+\time 2/4 c8 c c c \time 6/8 c c c c8. c16  c8
+@end lilypond
 
-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{~}@indexcode{~}'.
-If you try to tie together chords which have no common pitches, a
-warning message will appear and no ties will be created.
+If you're not satisfied with the automatic beaming, you can enter the
+beams explicitly. If you have beaming patterns that differ from the
+defaults, you can also set the patterns for automatic beamer.
 
-@lilypond[fragment,verbatim,center]
-  e' ~ e' <c' e' g'> ~ <c' e' g'>
-@end lilypond
+See also @internalsref{Beam}.
 
+@c .    {Manual beams}
+@cindex Automatic beams
+@subsection Manual beams
+@cindex beams, manual
+@cindex @code{]}
+@cindex @code{[}
 
+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, If you want that, specify the begin and end point
+manually using a @code{[} before the first beamed note and a @code{]}
+after the last note:
 
-[TODO: explain Requests]
+@lilypond[fragment,relative,verbatim]
+  \context Staff {
+    r4 [r8 g' a r8] r8 [g | a] r8
+  }
+@end lilypond
 
+@cindex @code{stemLeftBeamCount}
 
-@cindex articulations
+Normally, beaming patterns within a beam are determined automatically.
+When this mechanism fouls up, the properties
+@code{Voice.stemLeftBeamCount} and @code{Voice.stemRightBeamCount} can
+be used to control the beam subdivision on a stem.  If you set either
+property, its value will be used only once, and then it is erased.
 
-@cindex scripts
+@lilypond[fragment,relative,verbatim]
+  \context Staff {
+    [f8 r16 f g a]
+    [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
+  }
+@end lilypond
+@cindex @code{stemRightBeamCount}
 
-@cindex ornaments
 
-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.
+The property @code{subdivideBeams} can be set in order to subdivide
+all 16th or shorter beams at beat positions.  This accomplishes the
+same effect as twiddling with @code{stemLeftBeamCount} and
+@code{stemRightBeamCount}, but it take less typing.
 
-@lilypond[]
 
-  \score {
-    < \notes {
-        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;
+@example
+[c16 c c c c c c c]
+\property Voice.subdivideBeams = ##t
+[c16 c c c c c c c]
+[c32 c c c c c c c c c c c c c c c]
+\property Score.beatLength = #(ly:make-moment 1 8)
+[c32 c c c c c c c c c c c c c c c]
+@end example
+@lilypond[noindent,noquote]
+\score {
+    \notes \relative c' {
+        [c16 c c c c c c c]
+        \property Voice.subdivideBeams = ##t
+        [c16 c c c c c c c]
+        [c32 c c c c c c c c c c c c c c c]
+        \property Score.beatLength = #(ly:make-moment 1 8)
+        [c32 c c c c c c c c c c c c c c c]
     }
-  }
-
+}
 @end lilypond
+@cindex subdivideBeams
 
-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 
-@cindex fingering
- 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.
+Kneed beams are inserted automatically, when a large gap between two
+adjacent beamed notes is detected. This behavior can be tuned through
+the object property @code{auto-knee-gap}.
 
-To save typing, fingering instructions (digits 0 to 9 are
-supported) and single characters shorthands exist for a few
-common symbols
+@cindex beams, kneed
+@cindex kneed beams
+@cindex auto-knee-gap
+@cindex hara kiri
 
-@lilypond[]
 
-  \score {
-    \notes {
-      \property Voice.textStyle = typewriter
-      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;
-    }
-  }
+@c TODO -> why this ref? Document? 
+@cindex @code{neutral-direction}
 
-@end lilypond
+@refbugs
 
-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}@keyindex{ppp},
-@code{\pp}@keyindex{pp}, @code{\p}@keyindex{p}, @code{\mp}@keyindex{mp},
-@code{\mf}@keyindex{mf}, @code{\f}@keyindex{f}, @code{\ff}@keyindex{ff},
-@code{\fff}@keyindex{fff}, @code{\fff}@keyindex{ffff},
-@code{\fp}@keyindex{fp}, @code{\sf}@keyindex{sf},
-@code{\sff}@keyindex{sff}, @code{\sp}@keyindex{sp},
-@code{\spp}@keyindex{spp}, @code{\sfz}@keyindex{sfz}, and
-@code{\rfz}@keyindex{rfz}.
+Auto knee beams can not be used together with hara kiri staves.
 
+[TODO from bugs]
 
-@example
+The Automatic beamer does not put @strong{unfinished} beams on the
+last notes of a score.
 
-  \textscript@keyindex{textscript} @var{text} @var{style}
-@end example
+Formatting of ties is a difficult subject. LilyPond often does not
+give optimal results.
+
+@menu
+* Setting automatic beam behavior ::  
+@end menu
 
-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}.
+@ignore
+@no de Beam typography
+@sub section Beam typography
 
-You can attach a general textscript request using this syntax:
+One of the strong points of LilyPond is how beams are formatted. Beams
+are quantized, meaning that the left and right endpoints beams start
+exactly on staff lines. Without quantization, small wedges of white
+space appear between the beam and staff line, and this looks untidy.
 
-@quotation
+Beams are also slope-damped: melodies that go up or down should also
+have beams that go up or down, but the slope of the beams should be
+less than the slope of the notes themselves.
 
-@example 
-c4-\textscript "6" "finger"
-c4-\textscript "foo" "normal" 
-@end example 
+Some beams should be horizontal. These are so-called concave beams. 
 
-@end quotation
+[TODO: some pictures.]
+@end ignore
 
-This is equivalent to `@code{c4-6 c4-"foo"}'.  
+@c .    {Automatic beams}
+@node Setting automatic beam behavior 
+@subsection Setting automatic beam behavior 
 
+@cindex @code{autoBeamSettings}
+@cindex @code{(end * * * *)}
+@cindex @code{(begin * * * *)}
+@cindex automatic beams, tuning
+@cindex tuning automatic beaming
 
-@cindex scripts
+In normal time signatures, automatic beams can start on any note but can
+only end in a few positions within the measure: beams can end on a beat,
+or at durations specified by the properties in
+@code{Voice.autoBeamSettings}. The defaults for @code{autoBeamSettings}
+are defined in @file{scm/auto-beam.scm}.
 
+The value of @code{autoBeamSettings} is changed using
+@code{\override} and unset using @code{\revert}:
+@example
+\property Voice.autoBeamSettings \override #'(@var{BE} @var{P} @var{Q} @var{N} @var{M}) = @var{dur}
+\property Voice.autoBeamSettings \revert #'(@var{BE} @var{P} @var{Q} @var{N} @var{M})
+@end example
+Here, @var{BE} is the symbol @code{begin} or @code{end}. It determines
+whether the rule applies to begin or end-points.  The quantity
+@var{P}/@var{Q} refers to the length of the beamed notes (and `@code{*
+*}' designates notes of any length), @var{N}/@var{M} refers to a time
+signature (wildcards, `@code{* *}' may be entered to designate all time
+signatures).
+
+For example, if you want automatic beams to end on every quarter note,
+you can use the following:
 @example
+\property Voice.autoBeamSettings \override
+    #'(end * * * *) = #(ly:make-moment 1 4)
+@end example
+Since the duration of a quarter note is 1/4 of a whole note, it is
+entered as @code{(ly:make-moment 1 4)}.
 
-  \script@keyindex{script} @var{alias}
+The same syntax can be used to specify beam starting points. In this
+example, automatic beams can only end on a dotted quarter note. 
+@example
+\property Voice.autoBeamSettings \override
+    #'(end * * * *) = #(ly:make-moment 3 8)
+@end example
+In 4/4 time signature, this means that automatic beams could end only on
+3/8 and on the fourth beat of the measure (after 3/4, that is 2 times
+3/8 has passed within the measure).
+
+You can also restrict rules to specific time signatures. A rule that
+should only be applied in @var{N}/@var{M} time signature is formed by
+replacing the second asterisks by @var{N} and @var{M}. For example, a
+rule for 6/8 time exclusively looks like
+@example
+\property Voice.autoBeamSettings \override
+    #'(begin * * 6 8) =  ... 
 @end example
 
-Prints a symbol above or below a note.  The argument is a string
-which points into the script-alias table defined in @file{script.scm}.
-The scheme definitions specify whether the symbol follows notes into
-the staff, dependence of symbol placement on staff direction, and a
-priority for placing several symbols over one note.  Usually the
-@code{\script}@keyindex{script} keyword is not used directly.  Various
-helpful identifier definitions appear in @file{script.ly}.
+If you want a rule to apply to certain types of beams, you can use the
+first pair of asterisks. Beams are classified according to the shortest
+note they contain. For a beam ending rule that only applies to beams
+with 32nd notes (and no shorter notes), you would use @code{(end 1
+32 * *)}.
 
+@c not true
+@c Automatic beams can not be put on the last note in a score.
 
-@cindex slur
+If a score ends while an automatic beam has not been ended and is still
+accepting notes, this last beam will not be typeset at all.
 
-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:
+@cindex automatic beam generation
+@cindex autobeam
+@cindex @code{Voice.autoBeaming}
+@cindex lyrics
 
-@lilypond[fragment,verbatim,center]
-  f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
-@end lilypond
+For melodies that have lyrics, you may want to switch off 
+automatic beaming. This is done by setting @code{Voice.autoBeaming} to
+@code{#f}. 
 
 
-@cindex crescendo
+@refbugs
 
-A crescendo mark is started with @code{\cr}@keyindex{cr} and terminated
-with @code{\rc}@keyindex{rc}.  A decrescendo mark is started with
-@code{\decr}@keyindex{decr} and terminated with
-@code{\rced}@keyindex{rced}.  There are also shorthands for these
-marks.  A crescendo can be started with @code{\<}@keyindex{<} and a
-decrescendo can be started with @code{\>}@keyindex{>}.  Either one can
-be terminated with @code{\!}@keyindex{"!}.  Note that @code{\!}
-must go before the last note of the dynamic mark whereas @code{\rc}
-and @code{\rced} go after the last note.  Because these marks are
-bound to notes, if you want to get several marks during one note, you
-must use spacer notes.
+It is not possible to specify beaming parameters for beams with mixed
+durations, that differ from the beaming parameters of all separate
+durations, i.e., you'll have to specify manual beams to get:
 
-@lilypond[fragment,verbatim,center]
-  c'' \< \! c''   d'' \decr e'' \rced 
-  < f''1 { s4 \< \! s2 \> \! s4 } >
+@lilypond[singleline,fragment,relative,noverbatim]
+  \property Voice.autoBeamSettings
+  \override #'(end * * * *) = #(ly:make-moment 3 8)
+  \time 12/8 c'8 c c c16 c c c c c [c c c c] c8 c c4
 @end lilypond
+It is not possible to specify beaming parameters that act differently in
+different parts of a measure. This means that it is not possible to use
+automatic beaming in irregular meters such as @code{5/8}.
 
+@node Accidentals
+@section Accidentals
+@cindex Accidentals
+This section describes how to change the way that LilyPond automatically
+inserts accidentals before the running notes.
 
-@example
+@menu
+* Using the predefined accidental macros::  
+* Defining your own accidental typesettings::  
+@end menu
 
-  \spanrequest@keyindex{spanrequest} @var{startstop} @var{type}
+@node Using the predefined accidental macros
+@subsection Using the predefined accidental macros
+The constructs for describing the accidental typesetting rules are
+quite hairy, so non-experts should stick to the macros defined in
+@file{ly/property-init.ly}.
+@cindex @file{property-init.ly}
+
+The macros operate on the ``Current'' context (see @ref{Context properties}). This
+means that the macros shuold normally be invoked right after the
+creation of the context in which the accidental typesetting described
+by the macro is to take effect. I.e. if you want to use
+piano-accidentals in a pianostaff then you issue
+@code{\pianoAccidentals} first thing after the creation of the piano
+staff:
+@example
+\score @{
+    \notes \relative c'' <
+        \context Staff = sa @{ cis4 d e2 @}
+        \context GrandStaff <
+            \pianoAccidentals
+            \context Staff = sb @{ cis4 d e2 @}
+            \context Staff = sc @{ es2 c @}
+        >
+        \context Staff = sd @{ es2 c @}
+    >
+@}
 @end example
+@lilypond[singleline]
+\score {
+    \notes \relative c'' <
+        \context Staff = sa { cis4 d e2 }
+        \context GrandStaff <
+            \pianoAccidentals
+            \context Staff = sb { cis4 d e2 }
+            \context Staff = sc { es2 c }
+        >
+        \context Staff = sd { es2 c }
+    >
+    \paper {
+        \translator {
+            \StaffContext
+            minimumVerticalExtent = #'(-4.0 . 4.0)
+        }
+    }
+}
+@end lilypond
+
+The macros are:
+@table @code
+@item \defaultAccidentals
+      @cindex @code{\defaultAccidentals}
+      This is the default typesetting behaviour. It should correspond
+      to 18th century common practice: Accidentals are
+      remembered to the end of the measure in which they occur and
+      only on their own octave.
+
+@item \voiceAccidentals
+      @cindex @code{\voiceAccidentals}
+      The normal behaviour is to remember the accidentals on
+      Staff-level.
+      This macro, however, typesets accidentals individually for each
+      voice.
+      Apart from that the rule is similar to
+      @code{\defaultAccidentals}.
+
+      Warning: This leads to some weird and often unwanted results
+      because accidentals from one voice DO NOT get cancelled in other
+      voices:
+@lilypond[singleline,relative,fragment,verbatim]
+    \context Staff <
+        \voiceAccidentals
+        \context Voice=va { \voiceOne es g }
+        \context Voice=vb { \voiceTwo c, e }
+    >
+@end lilypond
+      Hence you should only use @code{\voiceAccidentals}
+      if the voices are to be read solely by
+      individual musicians. if the staff should be readable also
+      by one musician/conductor then you should use
+      @code{\modernVoiceAccidentals} or @code{\modernVoiceCautionaries}
+      instead.
+
+@item \modernAccidentals
+      @cindex @code{\modernAccidentals}
+      This rule should correspond to the common practice in the 20th
+      century.
+      The rule is a bit more complex than @code{\defaultAccidentals}:
+      You get all the same accidentals, but temporary
+      accidentals also get cancelled in other octaves. Further more,
+      in the same octave, they also get cancelled in the following measure:
+@lilypond[singleline,fragment,verbatim]
+      \modernAccidentals
+      cis' c'' cis'2 | c'' c'
+@end lilypond
 
-Define a spanning request. The @var{startstop} parameter is either -1
-(@code{\start}@keyindex{start}) or 1 (@code{\stop}@keyindex{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}.
+@item \modernCautionaries
+      @cindex @code{\modernCautionaries}
+     This rule is similar to @code{\modernAccidentals}, but the
+     ``extra'' accidentals (the ones not typeset by
+     @code{\defaultAccidentals}) are typeset as cautionary accidentals
+     (i.e. in reduced size):
+@lilypond[singleline,fragment,verbatim]
+      \modernCautionaries
+      cis' c'' cis'2 | c'' c'
+@end lilypond
 
-You can attach a (general) span request to a note using
+@item \modernVoiceAccidentals
+      @cindex @code{\modernVoiceAccidentals}
+      Multivoice accidentals to be read both by musicians playing one voice
+      and musicians playing all voices.
+
+      Accidentals are typeset for each voice, but they ARE cancelled
+      across voices in the same @internalsref{Staff}.
+
+@item \modernVoiceCautionaries
+      @cindex @code{\modernVoiceCautionaries}
+      The same as @code{\modernVoiceAccidentals}, but with the
+      extra accidentals (the ones not typeset by
+      @code{\voiceAccidentals}) typeset as cautionaries.
+      Notice that even though all accidentals typeset by
+      @code{\defaultAccidentals} ARE typeset by this macro then some
+      of them are typeset as cautionaries.
+
+@item \pianoAccidentals
+      @cindex @code{\pianoAccidentals}
+      20th century practice for piano notation. Very similar to
+      @code{\modernAccidentals} but accidentals also get cancelled
+      across the staves in the same @internalsref{GrandStaff} or
+      @internalsref{PianoStaff}.
+
+@item \pianoCautionaries
+      @cindex @code{\pianoCautionaries}
+      As @code{\pianoAccidentals} but with the extra accidentals
+      typeset as cationaries.
+
+@item \noResetKey
+      @cindex @code{\noResetKey}
+      Same as @code{\defaultAccidentals} but with accidentals lasting
+      ``forever'' and not only until the next measure:
+@lilypond[singleline,fragment,verbatim,relative]
+      \noResetKey
+      c1 cis cis c
+@end lilypond
 
-@lilypond[fragment,verbatim,center]
-  c'4-\spanrequest \start "slur"
-  c'4-\spanrequest \stop "slur"
+@item \forgetAccidentals
+      @cindex @code{\forgetAccidentals}
+      This is sort of the opposite of @code{\noResetKey}: Accidentals
+      are not remembered at all - and hence all accidentals are
+      typeset relative to the key signature, regardless of what was
+      before in the music:
+@lilypond[singleline,fragment,verbatim,relative]
+      \forgetAccidentals
+      \key d\major c4 c cis cis d d dis dis
 @end lilypond
+@end table
 
-The slur syntax with parentheses is a shorthand for this.
+@node Defining your own accidental typesettings
+@subsection Defining your own accidental typesettings
+
+This section must be considered gurus-only, and hence it must be
+sufficient with a short description of the system and a reference to
+the internal documentation.
+
+The idea of the algorithm is to try several different rules and then
+use the rule that gives the highest number of accidentals.
+Each rule cosists of
+@table @asis
+@item Context:
+      In which context is the rule applied. I.e. if context is
+      @internalsref{Score} then all staves share accidentals, and if
+      context is @internalsref{Staff} then all voices in the same
+      staff share accidentals, but staves don't - like normally.
+@item Octavation:
+      Whether the accidental changes all octaves or only the current
+      octave.
+@item Lazyness:
+      Over how many barlines the accidental lasts.
+      If lazyness is @code{-1} then the accidental is forget
+      immidiately, and if lazyness is @code{#t} then the accidental
+      lasts forever.
+@end table
 
+As described in the internal documentation of
+@reng{Accidental_engraver}, the properties @code{autoAccidentals} and
+@code{autoCautionaries} contain lists of rule descriptions. Notice
+that the contexts must be listed from in to out - that is
+@internalsref{Thread} before @internalsref{Voice},
+@internalsref{Voice} before @internalsref{Staff}, etc. 
+see the macros in @file{ly/property-init.ly} for examples of how the
+properties are set.
+
+@refbugs
+
+Currently the simultaneous notes are considered to be entered in
+sequential mode. This means that in a chord the accidentals are
+typeset as if the notes in the chord happened one at a time - in the
+order in which they appear in the input file.
+
+Of course this is only a problem when you have simultainous notes
+which accidentals should depend on each other.
+Notice that the problem only occurs when using non-default accidentals
+- as the default accidentals only depend on other accidentals on the
+same staff and same pitch and hence cannot depend on other
+simultainous notes.
+
+This example shows two examples of the same music giving different
+accidentals depending on the order in which the notes occur in the
+input file:
+
+@lilypond[singleline,fragment,verbatim]
+\property Staff.autoAccidentals = #'( Staff (any-octave . 0) )
+cis'4 <<c'' c'>> r2 | cis'4 <<c' c''>> r2 | <<cis' c''>> r | <<c'' cis'>> r | 
+@end lilypond
 
+The only solution is to manually insert the problematic
+accidentals using @code{!} and @code{?}.
 
-@cindex tremolo marks
+@node Expressive marks
+@section Expressive marks
 
-@node stem tremolo, , ,  Reference Manual
+@c .   {Slurs}
+@menu
+* Slurs ::                      
+* Phrasing slurs::              
+* Breath marks::                
+* Tempo::                       
+* Text spanners::               
+* Analysis brackets::           
+@end menu
 
-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}@indexcode{tremoloFlags} property if there was
-no last value.
+@node Slurs 
+@subsection Slurs
+@cindex Slurs
 
-@lilypond[verbatim,fragment,center]
-  c'2:8 c':32
+A slur indicates that notes are to be played bound or @emph{legato}.
+They are entered using parentheses:
+@lilypond[fragment,verbatim,center]
+  f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
 @end lilypond
 
+See also @seeinternals{Slur}.
+
+Slurs avoid crossing stems, and are generally attached to note heads.
+However, in some situations with beams, slurs may be attached to stem
+ends.  If you want to override this layout you can do this through the
+object property @code{attachment} of @internalsref{Slur} in
+@internalsref{Voice} context It's value is a pair of symbols, specifying
+the attachment type of the left and right end points.
+
+@lilypond[fragment,relative,verbatim]
+  \slurUp
+  \property Voice.Stem \set #'length = #5.5
+  g'8(g)g4
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  g8(g)g4
+@end lilypond
 
+If a slur would strike through a stem or beam, the slur will be moved
+away upward or downward. If this happens, attaching the slur to the
+stems might look better:
 
-@node Compound music expressions, , ,  Reference Manual
-@section Compound music expressions
+@lilypond[fragment,relative,verbatim]
+  \stemUp \slurUp
+  d32( d'4 )d8..
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  d,32( d'4 )d8..
+@end lilypond
 
-@cindex compound music expressions
+@ignore
+Similarly, the curvature of a slur is adjusted to stay clear of note
+heads and stems.  When that would increase the curvature too much, the
+slur is reverted to its default shape.  The threshold for this
+decision is in @internalsref{Slur}'s object property @code{beautiful}.
+It is loosely related to the enclosed area between the slur and the
+notes.  Usually, the default setting works well, but in some cases you
+may prefer a curved slur when LilyPond decides for a vertically moved
+one.  You can indicate this preference by increasing the
+@code{beautiful} value:
+
+@lilyp ond[verbatim,singleline,relative]
+  \stemDown \slurUp
+  c16( a' f' a a f a, )c,
+  c( a' f' a a f d, )c
+  \property Voice.Slur \override #'beautiful = #5.0
+  c( a' f' a a f d, )c
+@end lilypond
+@end ignore
 
-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:
+@refbugs
 
-@lilypond[fragment,verbatim,center]
-  \notes \context Staff {
-    \cadenzaOn
-    <a c'> <b  d' > <c' e'>
-    < { a b  c' } { c' d' e' } >
-  }
-@end lilypond
+Producing nice slurs is a difficult problem, and LilyPond currently
+uses a simple, empiric method to produce slurs. In some cases, the
+results of this method are ugly.
 
-@cindex context selection
-@c @keyindex{context}
+@ignore
+This is reflected by the
+@code{beautiful} property, which it is an arbitrary parameter in the
+slur formatter.  Useful values can only be determined by trial and
+error.
+@end ignore
 
-@example
-  \context @var{contexttype} [= @var{contextname}] @var{musicexpr}
-@end example
+@cindex Adjusting slurs
 
-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.  
+@node Phrasing slurs
+@subsection Phrasing slurs
 
-@cindex input modes
+@cindex phrasing slurs
+@cindex phrasing marks
 
-@cindex mode switch
+A phrasing slur (or phrasing mark) connects chords and is used to
+indicate a musical sentence. It is started using @code{\(} and @code{\)}
+respectively.
 
-Mode switching keywords form compound music expressions: @code{\notes}
-@keyindex{notes} @var{musicexpr}, @code{\chords} @keyindex{chords}
-@var{musicexpr}, and @code{\lyrics} @keyindex{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.
+@lilypond[fragment,verbatim,center,relative]
+  \time 6/4 c' \(  d () e f () e  \) d
+@end lilypond
 
-@cindex sequential music
+Typographically, the phrasing slur behaves almost exactly like a normal
+slur.  See also @seeinternals{PhrasingSlur}.  But although they behave
+similarily to normal slurs, phrasing slurs count as different objects.
+A @code{\slurUp} will have no effect on a phrasing slur; instead, you
+should use @code{\phrasingSlurUp}, @code{\phrasingSlurDown}, and
+@code{\phrasingSlurBoth}.
 
+Note that the commands
+@code{\slurUp}, @code{\slurDown}, and @code{\slurBoth} will only affect
+normal slurs and not phrasing slurs.
 
+@node Breath marks
+@subsection Breath marks
 
-@example
+Breath marks are entered using @code{\breathe}.  See also
+@seeinternals{BreathingSign}.
 
-  \sequential@keyindex{sequential}
-    @code{@{} @var{musicexprlist} @code{@}}
-@end example
+@lilypond[fragment,relative]
+c'4 \breathe d4
+@end lilypond
 
-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
+@c .  {Tempo}
+@node Tempo
+@subsection Tempo
+@cindex Tempo
+@cindex beats per minute
+@cindex metronome marking
 
-  @code{@{} @var{musicexprlist} @code{@}}
-@end example
+Metronome settings can be entered as follows:
 
+@cindex @code{\tempo}
+@example
+  \tempo @var{duration} = @var{perminute} 
+@end example
 
+For example, @code{\tempo 4 = 76} requests output with 76 quarter notes
+per minute.
+  
+@refbugs
+  
+The tempo setting is not printed, but is only used in the MIDI
+output. You can trick lily into producing a metronome mark,
+though. Details are in @ref{Text markup}.
+  
 
-@cindex simultaneous music
 
-@indexcode{<}
-@indexcode{>}
+@node Text spanners
+@subsection Text spanners
+@cindex Text spanners
 
+Some textual indications, e.g. rallentando or accelerando, often extend
+over many measures. This is indicated by following the text with a
+dotted line.  You can create such texts using text spanners. The syntax
+is as follows:
 @example
-
-  \simultaneous@keyindex{simultaneous}
-    @code{@{} @var{musicexprlist} @code{@}}
+ \startTextSpan
+ \stopTextSpan
 @end example
+LilyPond will respond by creating a @internalsref{TextSpanner} object (typically
+in @internalsref{Voice} context).  The string to be printed, as well as the
+style is set through object properties.
+
+An application---or rather, a hack---is to fake octavation indications.
+@lilypond[fragment,relative,verbatim]
+ \relative c' {  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\startTextSpan b c a \stopTextSpan }
+@end lilypond
 
-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:
 
-@example
+@node Analysis brackets
+@subsection Analysis brackets
+@cindex brackets
+@cindex phrasing brackets
+@cindex musicological analysis
+@cindex note grouping bracket
+
+Brackets are used in musical analysis to indicate structure in musical
+pieces. LilyPond supports a simple form of nested horizontal brackets.
+To use this, add the @internalsref{Horizontal_bracket_engraver} to
+@internalsref{Staff} context.  A bracket is started with
+@code{\groupOpen} and closed with @code{\groupClose}. This produces
+@internalsref{HorizontalBracket} objects.
+
+@lilypond[singleline,verbatim]
+\score { \notes \relative c'' {  
+       c4-\groupOpen-\groupOpen
+       c4-\groupClose
+       c4-\groupOpen
+        c4-\groupClose-\groupClose
+  }
+  \paper { \translator {
+           \StaffContext \consists "Horizontal_bracket_engraver"
+       }}}
+@end lilypond
 
-  @code{<} @var{musicexprlist} @code{>}
-@end example
+@c .  {Ornaments}
+@node Ornaments
+@section Ornaments
+@cindex Ornaments
+@menu
+* Articulations::               
+* Text scripts::                
+* Grace notes::                 
+* Glissando ::                  
+* Dynamics::                    
+@end menu
+
+@c .   {Articulation}
+@node Articulations
+@subsection Articulations
+@cindex Articulations
 
-If you try to use a chord as the first thing in your score, you might
-get multiple staffs instead of a chord.
+@cindex articulations
+@cindex scripts
+@cindex ornaments
 
-@lilypond[verbatim,center]
+A variety of symbols can appear above and below notes to indicate
+different characteristics of the performance. They are added to a note
+by adding a dash and the the character signifying the
+articulation. They are demonstrated here.
+@lilypond[singleline]
   \score {
-    \notes <c''4 e''>
-    \paper {
-      linewidth = -1.;
+    \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-__"c-\_" s4      
     }
   }
 @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 script is automatically placed, but if you need to force
+directions, you can use @code{_} to force them down, or @code{^} to
+put them up:
+@lilypond[fragment, verbatim]
+  c''4^^ c''4_^
+@end lilypond
+
+
+Other symbols can be added using the syntax
+@var{note}@code{-\}@var{name}. Again, they can be forced up or down
+using @code{^} and @code{_}.
+
+@cindex accent      
+@cindex marcato      
+@cindex staccatissimo
+@cindex fermata 
+@cindex stopped     
+@cindex staccato
+@cindex portato
+@cindex tenuto        
+@cindex upbow
+@cindex downbow
+@cindex foot marks
+@cindex organ pedal marks
+@cindex turn         
+@cindex open          
+@cindex flageolet
+@cindex reverseturn 
+@cindex trill        
+@cindex prall         
+@cindex mordent
+@cindex prallprall  
+@cindex prallmordent 
+@cindex prall, up
+@cindex prall, down
+@cindex mordent
+@cindex thumb marking
+@cindex segno         
+@cindex coda
 
-@lilypond[verbatim,center]
+@lilypond[]
   \score {
-    \notes\context Voice <c''4 e''>
+    <
+      \property Score.LyricText \override #'font-family =#'typewriter
+      \property Score.LyricText \override #'font-shape = #'upright
+      \context Staff \notes {
+        c''-\accent      c''-\marcato      c''-\staccatissimo c''^\fermata 
+        c''-\stopped     c''-\staccato     c''-\tenuto         c''-\portato
+        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''-\upmordent   c''-\downmordent  c''-\pralldown     c''-\prallup
+        c''-\lineprall   c''-\thumb        c''-\segno         c''-\coda
+      }
+      \context Lyrics \lyrics {
+        accent__      marcato__      staccatissimo__ fermata
+        stopped__     staccato__     tenuto__        portato
+        upbow
+        downbow__     lheel__        rheel__         ltoe
+        rtoe__        turn__         open__          flageolet
+        reverseturn__ trill__        prall__         mordent
+        prallprall__  prallmordent__ uprall__        downprall
+        upmordent__   downmordent__  pralldown__  prallup__
+        lineprall__   thumb__       segno__        coda
+      }
+    >
     \paper {
-      linewidth = -1.;
+      linewidth = 5.1\in
+      indent    = 0.0\mm
     }
   }
 @end lilypond
 
 
+@cindex fingering
 
-@cindex relative pitch specification
+Fingering instructions can also be entered in this shorthand. For
+finger changes, use markup texts:
+@c
+@lilypond[verbatim, singleline, fragment]
+      c'4-1 c'4-2 c'4-3 c'4-4
+      c^#'(finger "2-3")
+@end lilypond
 
-@node relative, , , Reference Manual
 
-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.
+@cindex scripts
+@cindex superscript
+@cindex subscript
 
-@example
+See also @seeinternals{Script} and @seeinternals{Fingering}.
 
-  \relative@keyindex{relative} @var{startpitch} @var{musicexpr}
-@end example
+@refbugs
 
-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}.
+All of these note ornaments appear in the printed output but have no
+effect on the MIDI rendering of the music.
 
-Entering scales is straightforward in relative mode.
+Unfortunately, there is no support for adding fingering instructions or 
+ornaments to individual note heads. Some hacks exist, though. See
+@file{input/test/script-horizontal.ly}.
 
-@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 .  {Text scripts}
+@node Text scripts
+@subsection Text scripts
+@cindex Text scripts
 
-@lilypond[fragment,verbatim,center]
-  \relative c'' {
-    c g c f, c' a, e'' }
-@end lilypond
+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:
+@code{c^"text"}. 
 
-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.
+By default, these indications do not influence the note spacing, but
+by using the command @code{\fatText}, the widths will be taken into
+account.
+@c
+@lilypond[fragment,singleline,verbatim] \relative c' {
+c4^"longtext" \fatText c4_"longlongtext" c4 }
+@end lilypond
 
-@lilypond[fragment,verbatim,center]
-  \relative c' {
-    c <c e g> 
-    <c' e g>
-    <c, e' g>
-  }
-@end lilypond 
+It is possible to use @TeX{} commands in the strings, but this should be
+avoided because it makes it impossible for LilyPond to compute the
+exact length of the string, which may lead to collisions.  Also, @TeX{}
+commands won't work with direct PostScript output.
+@c (see @ref{PostScript output}).
 
-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}@keyindex{notes} keyword (which is not
-shown here).
+Text scripts are created in form of @internalsref{TextScript} objects, in
+@internalsref{Voice} context. 
 
-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}.
+@ref{Text markup} describes how to change the font or access
+special symbols in text scripts.
 
-It is strongly recommended to use relative pitch mode: less work,
-less error-prone, and more readable.
 
+@c .   {Grace notes}
+@node Grace notes
+@subsection Grace notes
 
 
-Chord names are a way to generate simultaneous music expressions that
-correspond with traditional chord names.  It can only be used in
-Chord mode (see section @ref{Lexical modes}).
 
-@example
+@cindex @code{\grace}
+@cindex ornaments
+@cindex grace notes
 
-  @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
-@end example
+Grace notes are ornaments that are written out
+@lilypond[relative=2,verbatim,ifragment] c4 \grace c16 c4 \grace {
+[c16 d16] } c4
+@end lilypond
 
-@var{tonic} should be the tonic note of the chord, and @var{duration}
-is the chord duration in the usual notation.  There are two kinds of
-modifiers.  One type is @emph{chord additions}, which are obtained by
-listing intervals separated by dots.  An interval is written by its
-number with an optional `@code{+}' or `@code{-}' to indicate raising or
-lowering by half a step.  Chord additions has two effects: It adds
-the specified interval and all lower odd numbered intervals to the
-chord, and it may lower or raise the specified interval.  Intervals
-must be separated by a dot (`@code{.}').
+In normal notation, grace notes are supposed to take up no logical
+time in a measure. Such an idea is practical for normal notation, but
+is not strict enough to put it into a program. The model that LilyPond
+uses for grace notes internally is that all timing is done in two
+steps:
 
-@quotation
+Every point in musical time consists of two rational numbers: one
+denotes the logical time, one denotes the grace timing. The above
+example is shown here with timing tuples.
 
-@lilypond[fragment,verbatim]
-\transpose c'' {
-  \chords {
-    c1  c:3-       c:7     c:8
-    c:9 c:9-.5+.7+ c:3-.5- c:4.6.8
+@lilypond[]
+\score { \notes \relative c''{ 
+  c4^"(0,0)"  \grace c16_" "_"(1/4,-1/16)"  c4^"(1/4,0)"  \grace {
+  [c16_"(2/4,-1/8)"  d16^"(2/4,-1/16)" ] } c4_" "_"(2/4,0)"
   }
+\paper {  linewidth = 8.\cm }
 }
-
 @end lilypond
-@end quotation
 
-The second type of modifier that may appear after the `@code{:}' is a
-named modifier.  Named modifiers are listed in the file
-@file{chord-modifiers.ly}.  The available modifiers are `@code{m}' and
-`@code{min}' which lower the 3rd half a step, `@code{aug}@indexcode{aug}' which
-raises the 5th, `@code{dim}@indexcode{dim}' which lowers the 5th,
-`@code{maj}@indexcode{maj}' which adds a raised 7th, and `@code{sus}@indexcode{sus}'
-which replaces the 5th with a 4th.
+The advantage of this approach is that you can use almost any lilypond
+construction together with grace notes, for example slurs and clef
+changes may appear halfway in between grace notes:
+
+@lilypond[relative=2,verbatim,fragment] 
+  c4  \grace { [ c16 c, \clef bass c, b(] }  )c4 
+@end lilypond
+
+The placement of these grace notes is synchronized between different
+staves, using this grace timing.
+
+@lilypond[relative=2,verbatim,fragment] 
+< \context Staff = SA { e4 \grace { c16 d e f } e4 }
+  \context Staff = SB { c4 \grace { g8 b } c4 } >
+@end lilypond
 
-@quotation
+
+Unbeamed eighth notes and shorter by default have a slash through the
+stem. This can be controlled with object property @code{stroke-style} of
+@internalsref{Stem}. The change in formatting is accomplished by
+inserting @code{\startGraceMusic} before handling the grace notes, and
+@code{\stopGraceMusic} after finishing the grace notes.
+You can add to these definitions to globally change grace note
+formatting. The standard definitions are in @file{ly/grace-init.ly}.
+
+[TODO discuss Scheme functionality.]
+
+
+Notice how the @code{\override} is carefully matched with a @code{\revert}.
+
+@cindex slash
+@cindex grace slash
 
 @lilypond[fragment,verbatim]
-\transpose c'' {
-  \chords {
-    c1:m c:min7 c:maj c:aug c:dim c:sus
-  }
+\relative c'' \context Voice {
+  \grace c8 c4 \grace { [c16 c16] } c4
+  \grace { 
+    \property Voice.Stem \override #'stroke-style = #'() 
+    c16 
+    \property Voice.Stem \revert #'stroke-style
+  } c4
 }
+@end lilypond
+
 
+
+If you want to end a note with a grace note, then the standard trick
+is to put the grace notes before a phantom ``space note'', e.g.
+@lilypond[fragment,verbatim, relative=2]
+\context Voice {
+    < { d1^\trill ( }
+     { s2 \grace { [c16 d] } } >
+   )c4
+}
 @end lilypond
-@end quotation
 
-Chord subtractions are used to eliminate notes from a chord.  The
-notes to be subtracted are listed after a `@code{^}' character,
-separated by dots.
+A @code{\grace} section has some default values, and LilyPond will
+use those default values unless you specify otherwise inside the
+@code{\grace} section.  For example, if you specify \slurUp
+@emph{before} your @code{\grace} section, a slur which starts inside
+the @code{\grace} won't be forced up, even if the slur ends outside
+of the @code{\grace}.  Note the difference between the first and
+second bars in this example:
 
-@lilypond[fragment,verbatim,center]
-  \transpose c'' {
-    \chords {
-      c1^3 c:7^5.3 c:8^7
-    }
-  }
-@end lilypond 
+@lilypond[fragment,verbatim]
+\relative c'' \context Voice {
+    \slurUp
+    \grace {
+        a4 ( }
+    ) a4 a4 () a2
+    \slurBoth
+
+    \grace {
+        \slurUp
+        a4 ( }
+    ) a4 a4 () a2
+    \slurBoth
 
-Chord inversions can be specified by appending `@code{/}@indexcode{/}' and
-the name of a single note to a chord.  This has the effect of
-lowering the specified note by an octave so it becomes the lowest
-note in the chord.  If the specified note is not in the chord, a
-warning will be printed.
+}
+@end lilypond
 
-@lilypond[fragment,verbatim,center]
-  \transpose c''' {
-    \chords {
-      c1 c/e c/g c:7/e
-    }
-  }
 
-@end lilypond 
+@refbugs
 
-Bass notes can be added by `@code{/+}@indexcode{/+}' and
-the name of a single note to a chord.  This has the effect of
-adding the specified note to the chord, lowered by an octave,
-so it becomes the lowest note in the chord.
+Grace notes can not be used in the smallest size (@file{paper11.ly}).
 
-@lilypond[fragment,verbatim,center]
-  \transpose c''' {
-    \chords {
-      c1 c/+c c/+g c:7/+b
-    }
-  }
+Grace note synchronization can also lead to surprises. Staff notation,
+such as key signatures, barlines, etc. are also synchronized. Take
+care when you mix staves with grace notes and staves without.
 
-@end lilypond 
+@lilypond[relative=2,verbatim,fragment]
+< \context Staff = SA { e4 \bar "|:" \grace c16 d4 }
+  \context Staff = SB { c4 \bar "|:"  d4 } >
+@end lilypond
 
-Throughout these examples, chords have been shifted around the staff
-using @code{\transpose}.
+Grace sections should only be used within sequential music
+expressions.  Nesting, juxtaposing, or ending sequential music with a
+grace section is not supported, and might produce crashes or other
+errors.
 
-You should not combine @code{\relative} with named chords. 
 
+@node Glissando 
+@subsection Glissando
+@cindex Glissando 
 
+@cindex @code{\glissando}
 
-@cindex tuplets
+A glissando line can be requested by attaching a @code{\glissando} to
+a note:
 
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
+@lilypond[fragment,relative,verbatim]
+  c'-\glissando c'
+@end lilypond
 
-@example
+@refbugs
 
-  \times@keyindex{times} @var{fraction} @var{musicexpr}
-@end example
+Printing of an additional text (such as @emph{gliss.}) must be done
+manually. See also @seeinternals{Glissando}.
 
-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
 
+@c .   {Dynamics}
+@node Dynamics
+@subsection Dynamics
+@cindex Dynamics
 
 
-@cindex grace notes
 
-@example
+@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}
 
-  \grace@keyindex{grace} @var{musicexpr}
-@end example
 
-A grace note expression has duration 0; the next real note is
-assumed to be the main note.
+Absolute dynamic marks are specified 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}.
 
-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}@indexcode{graceAlignPosition}.
+@lilypond[verbatim,singleline,fragment,relative]
+  c'\ppp c\pp c \p c\mp c\mf c\f c\ff c\fff
+  c2\sf c\rfz
+@end lilypond
 
-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}@indexcode{flagStyle} property.
+@cindex @code{\cr}
+@cindex @code{\rc}
+@cindex @code{\decr}
+@cindex @code{\rced}
+@cindex @code{\<}
+@cindex @code{\>}
+@cindex @code{\"!}
+
+
+A crescendo mark is started with @code{\cr} and terminated with
+@code{\rc} (the textual reverse of @code{cr}).  A decrescendo mark is
+started with @code{\decr} and terminated with @code{\rced}.  There are
+also shorthands for these marks.  A crescendo can be started with
+@code{\<} and a decrescendo can be started with @code{\>}.  Either one
+can be terminated with @code{\!}.  Note that @code{\!}  must go before
+the last note of the dynamic mark whereas @code{\rc} and @code{\rced} go
+after the last note.  Because these marks are bound to notes, if you
+want several marks during one note, you have to use spacer notes.
 
-@quotation
+@lilypond[fragment,verbatim,center]
+  c'' \< \! c''   d'' \decr e'' \rced 
+  < f''1 { s4 s4 \< \! s4 \> \! s4 } >
+@end lilypond
 
-@lilypond[fragment,verbatim]
-\relative c'' {
-  \grace c8 c4 \grace { [c16 c16] } c4
-  \grace { \property Grace.flagStyle = "" c16 } c4
-}
+You can also use a text saying @emph{cresc.} instead of hairpins. Here
+is an example how to do it:
 
+@lilypond[fragment,relative=2,verbatim]
+  c4 \cresc c4 \endcresc c4
 @end lilypond
-@end quotation
 
-At present, nesting @code{\grace}@keyindex{grace} notes, e.g.
 
-@example
+@cindex crescendo
+@cindex decrescendo
+
+You can also supply your own texts:
+@lilypond[fragment,relative,verbatim]
+  \context Voice {
+    \property Voice.crescendoText = "cresc. poco"
+    \property Voice.crescendoSpanner = #'dashed-line
+    a'2\mf\< a a \!a 
+  }
+@end lilypond
 
-  @code{\grace @{ \grace c32 c16 @} c4}
-@end example
+@cindex diminuendo
 
-may result in run-time errors of LilyPond.  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.
+Dynamics are objects of @internalsref{DynamicText} and
+@internalsref{Hairpin}. Vertical positioning of these symbols is
+handled by the @internalsref{DynamicLineSpanner} object.  If you want to
+adjust padding or vertical direction of the dynamics, you must set
+properties for the @internalsref{DynamicLineSpanner} object. Predefined
+identifiers to set the vertical direction are \dynamicUp and
+\dynamicDown.
 
-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.
+@cindex direction, of dynamics
+@cindex @code{\dynamicDown}
+@cindex @code{\dynamicUp}
 
+@c .  {Repeats}
+@node Repeats
+@section Repeats
 
 
 @cindex repeats
+@cindex @code{\repeat}
+
+To specify repeats, use the @code{\repeat} keyword.  Since repeats
+should work differently when played or printed, there are a few
+different variants of repeats.
+
+@table @code
+@item unfold
+Repeated music is fully written (played) out.  Useful for MIDI
+output, and entering repetitive music.
 
-@node Repeats, , , Reference Manual
+@item volta
+This is the normal notation: Repeats are not written out, but
+alternative endings (voltas) are printed, left to right.
 
-In order to specify repeats, use the @code{\repeat}@keyindex{repeat}
-keyword.  Since repeats look and sound differently when played or
-printed, there are a few different variants of repeats.
+@item fold
+Alternative endings are written stacked. This has limited use but may be
+used to typeset two lines of lyrics in songs with repeats, see
+@file{input/star-spangled-banner.ly}.
 
-@table @samp
-  @item unfolded  
-    Repeated music is fully written (played) out.  Useful for MIDI
-    output.
+@item tremolo
+Make tremolo beams.
 
-  @item volta  
-    This is the normal notation: Repeats are not written out, but
-    alternative endings (voltas) are printed, left to right.
+@item percent
+Make beat or measure repeats. These look like percent signs.
 
-  @item folded  
-    Alternative endings are written stacked, which is useful for
-    lyrics.
 @end table  
 
+@menu
+* Repeat syntax::               
+* Repeats and MIDI::            
+* Manual repeat commands::      
+* Tremolo repeats::             
+* Tremolo subdivisions::        
+* Measure repeats::             
+@end menu
+
+@node Repeat syntax
+@subsection Repeat syntax
+
 The syntax for repeats is
 
 @example
-
   \repeat @var{variant} @var{repeatcount} @var{repeatbody}
 @end example
 
 If you have alternative endings, you may add
-
+@cindex @code{\alternative}
 @example
-
-  \alternative@keyindex{alternative}
-    @code{@{} @var{alternative1}
+ \alternative @code{@{} @var{alternative1}
             @var{alternative2}
             @var{alternative3} @dots{} @code{@}}
 @end example
-
-where each @var{alternative} is a Music expression.
+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.}
+Folded repeats look like this:
 
-@quotation
 
 @lilypond[fragment,verbatim]
   c'1
@@ -1619,1272 +2348,2783 @@ implemented.}
   \alternative { {d'2 d'} {f' f} }
 
 @end lilypond
-@end quotation
 
-@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.
 
 @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 } }
+    \partial 4
+    \repeat volta 4 { e | c2 d2 | e2 f2 | }
+    \alternative { { g4 g g } { a | a a a a | b2. } }
   }
 }
+@end lilypond
+
+@node Repeats and MIDI
+@subsection Repeats and MIDI
+
+@cindex expanding repeats
+
+For instructions on how to unfoldi repeats for MIDI output, see
+the example file @file{input/test/unfold-all-repeats.ly}.
 
+
+@refbugs
+
+Notice that timing information is not remembered at the start of an
+alternative, so you have to reset timing information after a repeat,
+e.g. using a bar-check (See @ref{Bar check}), setting
+@code{Score.measurePosition} or entering @code{\partial}.  Slurs or ties
+are also not repeated.
+
+It is possible to nest @code{\repeat}s, although this probably is only
+meaningful for unfolded repeats.
+
+Folded repeats offer little more over simultaneous music.
+
+@node Manual repeat commands
+@subsection Manual repeat commands
+
+@cindex @code{repeatCommands}
+
+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 'end-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)
+ c''4 c''4
+    \property Score.repeatCommands = #'((volta #f))
+ c''4 c''4
 @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
+Repeats brackets are @internalsref{VoltaBracket} objects.
 
-@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 } }
+@node Tremolo repeats
+@subsection Tremolo repeats
+@cindex tremolo beams
+
+To place tremolo marks between notes, use @code{\repeat} with tremolo
+style.  
+@lilypond[verbatim,center,singleline]
+\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
   }
 }
+@end lilypond
+
+Tremolo beams are @internalsref{Beam} objects. Single stem tremolos are
+@internalsref{StemTremolo}. The single stem tremolo @emph{must} be
+entered without @code{@{} and @code{@}}.  
 
+@refbugs
+
+Only powers of two and undotted notes are supported repeat counts.
+
+@node Tremolo subdivisions
+@subsection Tremolo subdivisions
+@cindex tremolo marks
+@cindex @code{tremoloFlags}
+
+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 then the last value (stored in
+@code{Voice.tremoloFlags}) is used.
+
+@lilypond[verbatim,fragment,center]
+  c'2:8 c':32 | c': c': |
 @end lilypond
-@end quotation
 
-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.
+@refbugs
 
 
+Tremolos in this style do not carry over into the MIDI output.
 
-@cindex transposition of pitches
 
-@node transpose, , , Reference Manual
+@node Measure repeats
+@subsection Measure repeats
 
-A music expression can be transposed with
-@code{\transpose}@keyindex{transpose}.  The syntax is
+@cindex percent repeats
+@cindex measure repeats
 
-@example
+In the @code{percent} style, a note pattern can be repeated. It is
+printed once, and then the pattern is replaced with a special sign.
+Patterns of a one and two measures are replaced by percent-like signs,
+patterns that divide the measure length are replaced by slashes.
 
-  \transpose @var{pitch} @var{musicexpr}
-@end example
+@lilypond[verbatim,singleline]
+ \context Voice { \repeat  "percent" 4  { c'4 }
+    \repeat "percent" 2 { c'2 es'2 f'4 fis'4 g'4 c''4 }
+}
+@end lilypond   
 
-This means that middle C in @var{musicexpr} is transposed to
-@var{pitch}.
+The signs are represented by these objects: @internalsref{RepeatSlash} and
+@internalsref{PercentRepeat} and @internalsref{DoublePercentRepeat}.
 
-@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.
+@refbugs
 
-@quotation
+You can not nest percent repeats, e.g. by filling in the first measure
+with slashes, and repeating that measure with percents.
 
-@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 }
+@node Rhythmic music
+@section Rhythmic music
+
+Sometimes you might want to show only the rhythm of a melody.  This can
+be done with the rhythmic staff. All pitches of notes on such a staff
+are squashed, and the  staff itself  looks has  a single staff line:
+
+@lilypond[fragment,relative,verbatim]
+  \context RhythmicStaff {
+      \time 4/4
+      c4 e8 f  g2 | r4 g r2 | g1:32 | r1 |
+  }
+@end lilypond
+
+@menu
+* Percussion staves::           
+@end menu
+
+@node Percussion staves
+@subsection Percussion staves
+@cindex percussion
+@cindex drums
+To typeset more than one piece of percussion to be played by the same
+musician one typically uses a multiline staff where each staff
+position refers to a specific piece of percussion.
+
+LilyPond is shipped with a bunch of scheme functions which allows you
+to do this fairly easily.
+
+The system is based on the general midi drum-pitches.
+In order to use the drum pitches you include
+@file{ly/drumpitch-init.ly}. This file defines the pitches from the scheme
+variable @code{drum-pitch-names} - which definition can be read in
+@file{scm/drums.scm}. You see that each piece of percussion has a full
+name and an abbreviated name - and you may freely select whether to
+refer to the full name or the abbreviation in your music definition.
+
+To typeset the music on a staff you apply the scheme function
+@code{drums->paper} to the percussion music. This function takes a
+list of percussion instrument names, notehead scripts and staff
+positions (that is: pitches relative to the C-clef) and uses this to
+transform the input music by moving the pitch, changing the notehead
+and (optionally) adding a script:
+@lilypond[singleline,verbatim]
+\include "drumpitch-init.ly"
+up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
+down = \notes { bassdrum4 snare8 bd r bd sn4 }
+\score {
+    \apply #(drums->paper 'drums) \context Staff <
+        \clef percussion
+        \context Voice = up { \voiceOne \up }
+        \context Voice = down { \voiceTwo \down }
+    >
 }
 
 @end lilypond
-@end quotation
+In the above example the music was transformed using the list @code{'drums}.
+Currently the following lists are defined in @file{scm/drums.scm}:
+@table @code
+@item 'drums
+To typeset a typical drum kit on a five-line staff.
+
+@lilypond[noindent]
+\include "drumpitch-init.ly"
+nam = \lyrics { cymc cyms cymr hh hhc hho hhho hhp cb hc
+    bd sn ss tomh tommh tomml toml tomfh tomfl }
+mus = \notes  { cymc cyms cymr hh hhc hho hhho hhp cb hc
+    bd sn ss tomh tommh tomml toml tomfh tomfl s16 }
+\score {
+    <
+        \apply #(drums->paper 'drums) \context Staff <
+            \clef percussion
+            \mus
+        >
+        \context Lyrics \nam 
+    >
+    \paper {
+        linewidth = 100.0\mm
+        \translator {
+            \StaffContext
+            \remove Bar_engraver
+            \remove Time_signature_engraver
+            minimumVerticalExtent = #'(-4.0 . 5.0)
+        }
+        \translator {
+            \VoiceContext
+            \remove Stem_engraver
+        }
+   }   
+}
+@end lilypond
 
-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}.
+Notice that the scheme supports six different toms.
+If you are using fewer toms then you simply select the toms that produce
+the desired result - i.e. to get toms on the three middle lines you
+use @code{tommh}, @code{tomml} and @code{tomfh}.
+
+Because the general midi contain no rimshots we use the sidestick for
+this purpose instead.
+@item 'timbales
+To typeset timbales on a two line staff.
+@lilypond[singleline]
+\include "drumpitch-init.ly"
+nam = \lyrics { timh ssh timl ssl cb }
+mus = \notes  { timh ssh timl ssl cb s16 }
+\score {
+    <
+        \apply #(drums->paper 'timbales) \context Staff <
+            \clef percussion
+            \mus
+        >
+        \context Lyrics \nam 
+    >
+    \paper {
+        \translator {
+            \StaffContext
+            \remove Bar_engraver
+            \remove Time_signature_engraver
+            StaffSymbol \override #'line-count = #2
+            StaffSymbol \override #'staff-space = #2
+            minimumVerticalExtent = #'(-3.0 . 4.0)
+        }
+        \translator {
+            \VoiceContext
+            \remove Stem_engraver
+        }
+
+    }   
+}
+@end lilypond
+@item 'congas
+To typeset congas on a two line staff.
+@lilypond[singleline]
+\include "drumpitch-init.ly"
+nam = \lyrics { cgh cgho cghm ssh cgl cglo cglm ssl }
+mus = \notes  { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
+\score {
+    <
+        \apply #(drums->paper 'congas) \context Staff <
+            \clef percussion
+            \mus
+        >
+        \context Lyrics \nam 
+    >
+    \paper {
+        \translator {
+            \StaffContext
+            \remove Bar_engraver
+            \remove Time_signature_engraver
+            StaffSymbol \override #'line-count = #2
+            StaffSymbol \override #'staff-space = #2
+            minimumVerticalExtent = #'(-3.0 . 4.0)
+        }
+        \translator {
+            \VoiceContext
+            \remove Stem_engraver
+        }
+    }   
+}
+@end lilypond
+@item 'bongos
+To typeset bongos on a two line staff.
+@lilypond[singleline]
+\include "drumpitch-init.ly"
+nam = \lyrics { boh boho bohm ssh bol bolo bolm ssl }
+mus = \notes  { boh boho bohm ssh bol bolo bolm ssl s16 }
+\score {
+    <
+        \apply #(drums->paper 'bongos) \context Staff <
+            \clef percussion
+            \mus
+        >
+        \context Lyrics \nam 
+    >
+    \paper {
+        \translator {
+            \StaffContext
+            \remove Bar_engraver
+            \remove Time_signature_engraver
+            StaffSymbol \override #'line-count = #2
+            StaffSymbol \override #'staff-space = #2
+            minimumVerticalExtent = #'(-3.0 . 4.0)
+        }
+        \translator {
+            \VoiceContext
+            \remove Stem_engraver
+        }
+    }   
+}
+@end lilypond
+@item 'percussion
+To typeset all kinds of simple percussion on one line staves.
+@lilypond[singleline]
+\include "drumpitch-init.ly"
+nam = \lyrics { tri trio trim gui guis guil cb cl tamb cab mar hc }
+mus = \notes  { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
+\score {
+    <
+        \apply #(drums->paper 'percussion) \context Staff <
+            \clef percussion
+            \mus
+        >
+        \context Lyrics \nam 
+    >
+    \paper {
+        \translator {
+            \StaffContext
+            \remove Bar_engraver
+            \remove Time_signature_engraver
+            StaffSymbol \override #'line-count = #1
+            minimumVerticalExtent = #'(-2.0 . 3.0)
+        }
+        \translator {
+            \VoiceContext
+            \remove Stem_engraver
+        }
+    }   
+}
+@end lilypond
+@end table
+
+If you don't like any of the predefined lists you can define your own
+list at the top of your file:
+
+@lilypond[singleline, verbatim]
+#(define mydrums `(
+        (bassdrum     default   #f        ,(ly:make-pitch -1 2 0))
+        (snare        default   #f        ,(ly:make-pitch 0 1 0))
+        (hihat        cross     #f        ,(ly:make-pitch 0 5 0))
+        (pedalhihat   xcircle   "stopped" ,(ly:make-pitch 0 5 0))
+        (lowtom              diamond   #f        ,(ly:make-pitch -1 6 0))
+))
+\include "drumpitch-init.ly"
+up = \notes { hh8 hh hh hh hhp4 hhp }
+down = \notes { bd4 sn bd toml8 toml }
+\score {    
+    \apply #(drums->paper 'mydrums) \context Staff <
+        \clef percussion
+        \context Voice = up { \voiceOne \up }
+        \context Voice = down { \voiceTwo \down }
+    >
+}
+@end lilypond
+
+To use a modified existing list instead of building your own from
+scratch you can append your modifications to the start of the existing
+list:
+
+@example
+#(define mydrums (append `(
+   (bassdrum default #f ,(ly:make-pitch -1 2 0))
+   (lowtom   diamond #f ,(ly:make-pitch -1 6 0))
+) drums ))
+@end example
+
+@c FIXME: Too many levels of headers when using subsubsections.
+@c Perhaps junk subsection ``Percussion staves''
+@subsubsection Percussion staves with normal staves
+When you include @file{drumpitch-init.ly} then the default pitches
+are overridden so that you after the inclusion cannot use the common
+dutch pitch names anymore. Hence you might wan't to reinclude
+@file{nederlands.ly} after the drum-pattern-definitions:
+@lilypond[singleline,verbatim]
+\include "drumpitch-init.ly"
+up = \notes { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
+down = \notes { bassdrum4 snare8 bd r bd sn4 }
+\include "nederlands.ly"
+bass = \notes \transpose c c,, { a4. e8 r e g e }
+\score {
+    <
+        \apply #(drums->paper 'drums) \context Staff = drums <
+            \clef percussion
+            \context Voice = up { \voiceOne \up }
+            \context Voice = down { \voiceTwo \down }
+        >
+        \context Staff = bass { \clef "F_8" \bass }
+    >
+}
+@end lilypond
+
+@subsubsection Percussion midi output
+In order to produce correct midi output you need to produce two score
+blocks - one for the paper and one for the midi.
+To use the percussion channel you set the property @code{instrument}
+to @code{'drums}. Because the drum-pitches themself are similar to the
+general midi pitches all you have to do is to insert the voices with
+none of the scheme functions to get the correct midi output:
+
+@example
+\score @{    
+    \apply #(drums->paper 'mydrums) \context Staff <
+        \clef percussion
+        \context Voice = up @{ \voiceOne \up @}
+        \context Voice = down @{ \voiceTwo \down @}
+    >
+    \paper@{@}
+@}
+\score @{    
+    \context Staff <
+        \property Staff.instrument = #'drums
+        \up \down
+    >
+    \midi@{@}
+@}
+@end example
+
+@refbugs
+
+This scheme is to be considered a temporary implementation. Even
+though the scheme will probably keep on working then the future might
+bring some other way of typesetting drums, and probably
+there will be made no great efforts in keeping things downwards
+compatible.
+
+@c . {Piano music}
+@node Piano music
+@section Piano music
+
+Piano music is an odd type of notation. Piano staves are two normal
+staves coupled with a brace.  The staves are largely independent, but
+sometimes voices can cross between the two staves.  The
+@internalsref{PianoStaff} is especially built to handle this cross-staffing
+behavior.  In this section we discuss the @internalsref{PianoStaff} and some
+other pianistic peculiarities.
+
+
+@menu
+* Automatic staff changes::     
+* Manual staff switches::       
+* Pedals::                      
+* Arpeggio::                    
+* Voice follower lines::        
+@end menu 
+
+@refbugs
+
+There is no support for putting chords across staves.  You can get
+this result by increasing the length of the stem in the lower stave so
+it reaches the stem in the upper stave, or vice versa. An example is
+included with the distribution as @file{input/test/stem-cross-staff.ly}.
 
+@cindex cross staff stem
+@cindex stem, cross staff
 
 
-@cindex automatic lyric durations
+@c fixme: should have hyperlinks as well.
 
-If you have lyrics that are set to a melody, you can import the
-rhythm of that melody into the lyrics using @code{\addlyrics}.
-@keyindex{addlyrics} The syntax for this is
 
+
+
+@c .   {Automatic staff changes}
+@node Automatic staff changes
+@subsection Automatic staff changes
+@cindex Automatic staff changes
+
+Voices can switch automatically between the top and the bottom
+staff. The syntax for this is
 @example
+        \autochange Staff \context Voice @{ @dots{}@var{music}@dots{} @}
+@end example        
+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. Here is a practical example:
+        
+@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
+Spacer rests are used to prevent the bottom staff from
+terminating too soon.
+
+
+@node Manual staff switches
+@subsection Manual staff switches
+
+@cindex manual staff switches
+@cindex staff switch, manual
 
-  \addlyrics @var{musicexpr1 musicexpr2}
+Voices can be switched between staves manually, using the following command:
+@example
+  \translator Staff = @var{staffname} @var{music}
 @end example
+The string @var{staffname} is the name of the staff. It switches the
+current voice from its current staff to the Staff called
+@var{staffname}. Typically @var{staffname} is @code{"up"} or
+@code{"down"}.
 
-This means that both @var{musicexpr1} and @var{musicexpr2} are
-interpreted, but that every non-command atomic music expression
-(``every syllable'') in @var{musicexpr2} is interpreted using timing
-of @var{musicexpr1}.
+@c .   {Pedals}
+@node Pedals
+@subsection Pedals
+@cindex Pedals
 
-If the property @code{automaticMelismata}@indexcode{automaticMelismata} is set in the
-context of @var{musicexpr1}, no lyrics will be put on slurred or tied
-notes.
+Piano pedal instruction can be expressed using 
+@code{\sustainDown}, @code{\sustainUp}, @code{\unaCorda},
+@code{\treCorde}, @code{\sostenutoDown} and @code{\sostenutoUp}.
 
-@quotation
+The symbols that are printed can be modified by setting
+@code{pedal@var{X}Strings}, where @var{X} is one of the pedal types:
+Sustain, Sostenuto or UnaCorda.  Refer to the generated documentation of
+@internalsref{SustainPedal}, for example, for more information.
 
-@lilypond[verbatim,fragment]
-\addlyrics
-\transpose c'' {
-  \property Voice.automaticMelismata = ##t
-  c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics {
- do4 re mi fa }
+Pedals can also be indicated by a sequence of brackets, by setting the 
+@code{pedal-type} property of SustainPedal objects: 
 
+@lilypond[fragment,verbatim]
+\property Staff.SustainPedal \override #'pedal-type = #'bracket
+c''4 \sustainDown d''4 e''4 a'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
 @end lilypond
-@end quotation
 
-You should use a single rhythm melody, and single rhythm lyrics (a
-constant duration is the obvious choice).  If you do not, you will get
-undesired effects when using multiple stanzas:
+A third style of pedal notation is a mixture of text and brackets,
+obtained by setting @code{pedal-type} to @code{mixed}:
 
-@quotation
+@lilypond[fragment,verbatim]
+\property Staff.SustainPedal \override #'pedal-type = #'mixed
+c''4 \sustainDown d''4 e''4 c'4
+\sustainUp \sustainDown
+ f'4 g'4 a'4 \sustainUp
+@end lilypond
 
-@lilypond[verbatim,fragment]
-\addlyrics
-\transpose c'' {
-  c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics
-< { do4 re mi fa }
-  { do8 re mi fa } >
+The default '*Ped' style for sustain and damper pedals corresponds to
+@code{\pedal-type = #'text}. However, @code{mixed} is the default style
+for a sostenuto pedal:
 
+@lilypond[fragment,verbatim]
+c''4 \sostenutoDown d''4 e''4 c'4 f'4 g'4 a'4 \sostenutoUp
 @end lilypond
-@end quotation
 
-It is valid (but probably not very useful) to use notes instead of
-lyrics for @var{musicexpr2}.
+For fine-tuning of the appearance of a pedal bracket, the properties
+@code{edge-width}, @code{edge-height}, and @code{shorten-pair} of
+@code{PianoPedalBracket} objects (see the detailed documentation of
+@rgrob{PianoPedalBracket}) can be modified.  For example, the bracket
+may be extended to the end of the note head.
 
+@lilypond[fragment,verbatim]
+\property Staff.PianoPedalBracket \override
+   #'shorten-pair = #'(0 . -1.0)
+c''4 \sostenutoDown d''4 e''4 c'4
+f'4 g'4 a'4 \sostenutoUp
+@end lilypond
 
+@node Arpeggio
+@subsection Arpeggio
+@cindex Arpeggio
 
+@cindex broken arpeggio
+@cindex @code{\arpeggio}
 
-@node Ambiguities, , ,  Reference Manual
-@section Ambiguities
+You can specify an arpeggio sign on a chord by attaching an
+@code{\arpeggio} to a chord.
 
-@cindex ambiguities
 
-The grammar contains a number of ambiguities.@footnote{The authors
-hope to resolve them at a later time.}
+@lilypond[fragment,relative,verbatim]
+  <<c e g c>>-\arpeggio
+@end lilypond
 
-@itemize @bullet
-  @item  The assignment
+When an arpeggio crosses staves in piano music, you attach an arpeggio
+to the chords in both staves, and set
+@code{PianoStaff.connectArpeggios}.
 
-         @example 
-foo = bar 
-@end example 
+@lilypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.connectArpeggios = ##t
+    \context Voice = one  { <<c' e g c>>-\arpeggio }
+    \context Voice = other { \clef bass  <<c,, e g>>-\arpeggio}
+  >  
+@end lilypond
 
-       can be interpreted as making a string identifier @code{\foo}
-       containing @code{"bar"}, or a music identifier @code{\foo}
-       containing the syllable `bar'.
+This command creates @internalsref{Arpeggio} objects.  Cross staff arpeggios
+are @code{PianoStaff.Arpeggio}.
 
-  @item  The assignment
+To add an arrow head to explicitly specify the direction of the
+arpeggio, you should set the arpeggio object property
+@code{arpeggio-direction}.
 
-         @example 
-foo = -6 
-@end example 
+@lilypond[fragment,relative,verbatim]
+  \context Voice {
+     \property Voice.Arpeggio \set #'arpeggio-direction = #1
+     <<c e g c>>-\arpeggio
+     \property Voice.Arpeggio \set #'arpeggio-direction = #-1
+     <<c e g c>>-\arpeggio
+  }
+@end lilypond
 
-       can be interpreted as making an integer identifier
-       containing -6, or a Request identifier containing the
-       fingering `6' (with neutral direction).
+A square bracket on the left indicates that the player should not
+arpeggiate the chord. To draw these brackets, set the
+@code{molecule-callback} property of @code{Arpeggio} or
+@code{PianoStaff.Arpeggio} objects to @code{\arpeggioBracket}, and use
+@code{\arpeggio} statements within the chords as before.
+
+@lilypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.connectArpeggios = ##t
+    \property PianoStaff.Arpeggio \override
+        #'molecule-callback = \arpeggioBracket
+    \context Voice = one  { <<c' e g c>>-\arpeggio }
+    \context Voice = other { \clef bass  <<c,, e g>>-\arpeggio }
+  >  
+@end lilypond
 
-  @item  If you do a nested repeat like
 
-       @quotation
+@refbugs
 
-@example 
-\repeat @dots{}
-\repeat @dots{}
-\alternative 
-@end example 
+It is not possible to mix connected arpeggios and unconnected
+arpeggios in one PianoStaff at the same time.
 
-       @end quotation
 
-       then it is ambiguous to which @code{\repeat} the
-       @code{\alternative} belongs.  This is the classic if-then-else
-       dilemma.  It may be solved by using braces.
 
-  @item  (an as yet unidentified ambiguity :-)
-@end itemize
+@node  Voice follower lines
+@subsection Voice follower lines
+
+@cindex follow voice
+@cindex staff switching
+@cindex cross staff
 
+@cindex @code{followVoice}
 
+Whenever a voice switches to another staff a line connecting the notes
+can be printed automatically. This is enabled if the property
+@code{PianoStaff.followVoice} is set to true:
 
-@node Notation conversion specifics, , ,  Reference Manual
-@section Notation conversion specifics
+@lilypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.followVoice = ##t
+    \context Staff \context Voice {
+      c1
+      \translator Staff=two
+      b2 a
+    }
+    \context Staff=two {\clef bass \skip 1*2 }
+  >  
+@end lilypond
 
+The associated object is @internalsref{VoiceFollower}.
 
 
-@cindex automatic beam generation
+@node Tablatures
+@section Tablatures
 
-@node autobeam, , ,  Reference Manual
+Tablature notation is used for notating music for plucked string
+instruments.  It notates pitches not by using note heads, but by
+indicating on which string and fret a note must be played.  LilyPond
+offers limited support for tablature.
 
-By default, LilyPond will generate beams automatically.  This feature
-can be disabled by setting the @code{Voice.noAutoBeaming}@indexcode{Voice.noAutoBeaming}
-property to 1.  It can be overridden for specific cases by
-specifying explicit beams.
+@menu
+* Tablatures basic::            
+* Non-guitar tablatures::       
+* Tablature in addition to normal staff::  
+@end menu
 
+@node Tablatures basic
+@subsection Tablatures basic
+@cindex Tablatures basic
 
-A large number of Voice properties are used to decide how to generate
-beams.  Their default values appear in @file{auto-beam-settings.ly}.
-In general, beams can begin anywhere, but their ending location is
-significant.  Beams can end on a beat, or at durations specified by
-the @code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} property.  To end beams every
-quarter note, for example, you could set
-@code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} equal to `@code{"1/4"}'.  To end beams
-at every three eighth notes you would set it to `@code{"3/8"}'.  The
-same syntax can be used to specify beam starting points using
-@code{Voice.beamAutoBegin}@indexcode{Voice.beamAutoBegin}.
+Tablature can be typeset with Lilypond by using the
+@internalsref{TabStaff} and @internalsref{TabVoice} contexts. As
+tablature is a recent feature in Lilypond, most of the guitar special
+effects such as bend are not yet supported.
 
-To allow different settings for different time signatures, these
-property names can start with `@code{time}@var{N}@code{_}@var{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{Voice.time6_8beamAutoEnd}.  To allow different endings
-for notes of different durations, the duration can be tacked onto the
-end of the property.  To specify beam endings for beams that contain
-32nd notes, you would use @code{Voice.beamAutoEnd_32}.
+With the @internalsref{TabStaff}, the string number associated to a note
+is given as a backslash followed by the string number, e.g. @code{c4\3} for a C
+quarter on the third string. By default, string 1 is the highest one, and the
+tuning defaults to the standard guitar tuning (with 6 strings).
 
+@lilypond[fragment,verbatim]
+  \context TabStaff <
+    \notes {
+      a,4\5 c'\2 a\3 e'\1
+      e\4 c'\2 a\3 e'\1
+    }
+  >  
+@end lilypond
 
+If you do not specify a string number then lilypond automatically selects one.
+The selection is controlled by the translator property @code{minimumFret}. -- LilyPond
+simply selects the first string that does not give a fret number less than
+@code{minimumFret}. Default is 0.
 
-@cindex chord names
+Notice that LilyPond does not handle chords in any special way, and hence
+the automatic string selector may easily select the same string to two notes in a chord.
 
-@cindex chords
+@example
+e8 fis gis a b cis' dis' e'
+\property TabStaff.minimumFret = #8
+e8 fis gis a b cis' dis' e'
+@end example
+@lilypond[noindent,noquote]
+frag = \notes {
+    \key e \major
+    e8 fis gis a b cis' dis' e'
+    \property TabStaff.minimumFret = #8
+    e8 fis gis a b cis' dis' e'
+}
+\score {
+  \context StaffGroup <
+    \context Staff { \clef "G_8" \frag }
+    \context TabStaff { \frag }
+  >
+}
+@end lilypond
 
-@cindex printing!chord names
+@node Non-guitar tablatures
+@subsection Non-guitar tablatures
+@cindex Non-guitar tablatures
 
-For displaying printed chord names, use the @code{ChordNames}@indexcode{ChordNames}
-and @code{ChordNameVoice}@indexcode{ChordNameVoice} contexts.  The chords may be entered
-either using the notation described above, or directly using
-simultaneous music.
+There are many ways to customize Lilypond tablatures.
 
-@quotation
+First you can change the number of strings, by setting the number of
+lines in the @internalsref{TabStaff} (the @code{line-count} property
+of TabStaff can only be changed using @code{\outputproperty}, for more
+information, see @ref{Tuning per object}.  You can change the strings
+tuning. A string tuning is given as a Scheme list with one integer
+number for each string, the number being the pitch of an open string.
+
+(The numbers specified for stringTuning are the numbers of semitons
+to subtract --- or add --- starting the specified pitch by default
+middle C, in string order: thus the notes are e, a, d & g)
 
 @lilypond[fragment,verbatim]
-<
-  \context ChordNames {
-    \chords{a b c} \notes{<d f g>  <e g b>}
+  \context TabStaff <
+
+    \outputproperty #(make-type-checker 'staff-symbol-interface)
+                    #'line-count = #4
+    \property TabStaff.stringTunings =  #'(-5 -10 -15 -20)
+    
+    \notes {
+      a,4 c' a e' e c' a e'
+    }
+  > 
+@end lilypond
+
+Finally, it is possible to change the Scheme function to format the
+tablature note text. The default is @var{fret-number-tablature-format},
+which uses the fret number, but for some instruments that may not use
+this notation, just create your own tablature-format function. This
+function takes three argument: the string number, the string tuning and
+the note pitch.
+
+
+@node Tablature in addition to normal staff
+@subsection Tablature in addition to normal staff
+@cindex Tablature in addition to normal staff
+
+It is possible to typeset both tablature and a "normal" staff, as
+commonly done in many parts.
+
+A common trick for that is to put the notes in a variables, and to hide
+the fingering information (which correspond to the string number) for
+the standard staff.
+
+@c FIXME
+@c @lily pond[verbatim]
+@example
+  part = \notes @{
+    a,4-2 c'-5 a-4 e'-6
+    e-3 c'-5 a-4 e'-6
+  @}
+  \score @{
+    \context StaffGroup <
+      \context Staff <
+        % Hide fingering number
+        \property Staff.Fingering \override #'transparent = ##t
+
+        \part
+      >
+      \context TabStaff <
+        \property Staff.Stem \override #'direction = #1
+
+        \part
+      >
+    >
+  @}
+@end example
+@c @end lilypond
+
+@c . {Chords}
+@node Chords
+@section Chords
+@cindex Chords
+
+LilyPond has support for both entering and printing chords. 
+@lilypond[verbatim,singleline]
+twoWays = \notes \transpose c c' {
+  \chords {
+    c1 f:sus4 bes/f
   }
-  \context Staff \notes {
-    a b c' d' e'
+  <<c e g>>
+  <<f bes c'>>
+  <<f bes d'>>
   }
->
 
+\score {
+   < \context ChordNames \twoWays
+     \context Voice \twoWays > }
 @end lilypond
-@end quotation
 
-LilyPond examines chords specified as lists of notes to determine a
-name to give the chord.  By default, LilyPond will not try to
-identify chord inversions:
+This example also shows that the chord printing routines do not try to
+be intelligent. If you enter @code{f bes d}, it does not interpret
+this as an inversion.
+
+As you can see chords really are a set of pitches. They are internally
+stored as simultaneous music expressions. This means you can enter
+chords by name and print them as notes, enter them as notes and print
+them as chord names, or (the most common case) enter them by name, and
+print them as name.
+
+@menu
+* Chords mode::                 
+* Printing named chords::       
+@end menu
+
+@c .  {Chords mode}
+@node Chords mode
+@subsection Chords mode
+@cindex Chords mode
+
+Chord mode is a mode where you can input sets of pitches using common
+names.  It is introduced by the keyword @code{\chords}.  It is similar
+to note mode, but words are also looked up in a chord modifier table
+(containing @code{maj}, @code{dim}, etc). Dashes and carets are used
+to indicate chord additions and subtractions, so articulation scripts
+can not be entered in Chord mode.
+
+Throughout these examples, chords have been shifted around the staff
+using @code{\transpose}.
+
+@lilypond[fragment,verbatim]
+\transpose c c' {
+  \chords {
+    c1  c:3-       c:7     c:8
+    c:9 c:9-.5+.7+ c:3-.5- 
+  }
+}
+@end lilypond
+
+@cindex @code{aug}
+@cindex @code{dim}
+@cindex @code{maj}
+@cindex @code{sus}
+
+The second type of modifier that may appear after the @code{:} is a
+named modifier.  Named modifiers are listed in the file
+@file{chord-modifiers.ly}.  The available modifiers are @code{m} and
+@code{min} which lower the 3rd half a step, `@code{aug}' which
+raises the 5th, `@code{dim}' which lowers the 5th,
+`@code{maj}' which adds a raised 7th, and `@code{sus}'
+which replaces the 5th with a 4th.
+
+@lilypond[fragment,verbatim]
+\transpose c c' {
+  \chords {
+    c1:m c:min7 c:maj c:aug c:dim c:sus
+  }
+}
+@end lilypond
+
+Chord subtractions are used to eliminate notes from a chord.  The
+notes to be subtracted are listed after a @code{^} character,
+separated by dots.
 
 @lilypond[fragment,verbatim,center]
-  <
-    \context ChordNameVoice \notes {
-      <e'1 g' c''>
-    }
-    \context Thread \notes {
-      <e'1 g' c''>
+  \transpose c c' {
+    \chords {
+      c1^3 c:7^5.3 c:8^7
     }
-  >
-@end lilypond
+  }
+@end lilypond 
+@cindex @code{/}
 
-If you want inversions to be recognized, you must set the property
-@code{ChordNames.chordInversion}@indexcode{ChordNames.chordInversion}:
+Chord inversions can be specified by appending `@code{/}' and the name
+of a single note to a chord.  In a chord inversion, the inverted note is
+transposed down until it is the lowest note in the chord.  If the note
+is not in the chord, a warning will be printed.
 
 @lilypond[fragment,verbatim,center]
-  <
-    \property Score.chordInversion = ##t
-    \context ChordNameVoice \notes {
-      <e'1 g' c''>
+  \transpose c c'' {
+    \chords {
+      c1 c/e c/g c:7/e
     }
-    \context Thread \notes {
-      <e'1 g' c''>
+  }
+
+@end lilypond 
+@cindex @code{/+}
+
+Bass notes can be added by `@code{/+}' and
+the name of a single note to a chord.  This has the effect of
+adding the specified note to the chord, lowered by an octave,
+so it becomes the lowest note in the chord.
+
+@lilypond[fragment,verbatim,center]
+  \transpose c c'' {
+    \chords {
+      c1 c/+c c/+g c:7/+b
     }
-  >
-@end lilypond
+  }
 
+@end lilypond 
 
+The formal syntax for named chords is as follows:
+@example
+  @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}][@code{/+}@var{bass}].
+@end example
 
-@cindex lyrics
+@var{tonic} should be the tonic note of the chord, and @var{duration} is
+the chord duration in the usual notation.  There are two kinds of
+modifiers.  One type is formed by @emph{chord additions}. Additions are
+obtained by listing intervals separated by dots.  An interval is written
+by its number with an optional @code{+} or @code{-} to indicate raising
+or lowering by half a step.  Chord additions have two effects: they adds
+the specified interval and all lower odd numbered intervals to the
+chord, and they may lower or raise the specified interval.
 
-@cindex printing!lyrics
 
-@node lyricprint, , ,  Reference Manual
+@refbugs
 
-Lyric syllables must be interpreted within a @code{Lyrics} context
+Implementation details are gory. For example @code{c:4} not only adds
+a fourth, but also removes the third.
 
-@cindex context!Lyrics
- for printing them.
 
-Here is a full example: 
+@c .  {Printing named chords}
+@node Printing named chords
+@subsection Printing named chords
 
-@quotation
+@cindex printing chord names
+@cindex chord names
+@cindex chords
+
+For displaying printed chord names, use the @internalsref{ChordNames} context.
+The chords may be entered either using the notation described above, or
+directly using simultaneous music.
+
+@lilypond[verbatim,singleline]
+scheme = \notes {
+  \chords {a1 b c} <<d f g>>  <<e g b>>
+}
+\score {
+  \notes<
+    \context ChordNames \scheme
+    \context Staff \transpose c c' \scheme
+  >
+}
+@end lilypond
+
+You can make the chord changes stand out by setting
+@code{ChordNames.chordChanges} to true.  This will only display chord
+names when there's a change in the chords scheme and at the start of a
+new line.
 
 @lilypond[verbatim]
+scheme = \chords {
+  c1:m c:m \break c:m c:m d
+}
+\score {
+  \notes <
+    \context ChordNames {
+        \property ChordNames.chordChanges = ##t
+        \scheme }
+    \context Staff \transpose c c' \scheme
+  >
+\paper{linewidth= 9.\cm}
+}
+@end lilypond
+
+LilyPond examines chords specified as lists of notes to determine a name
+to give the chord. LilyPond will not try to identify chord inversions or
+an added bass note, which may result in strange chord names when chords
+are entered as a list of pitches:
+
+@lilypond[verbatim,center,singleline]
+scheme = \notes {
+  <<c' e' g'>>1
+  <<e' g' c''>>
+  <<e e' g' c''>>
+}
+
 \score {
   <
-    \notes \transpose c'' {
-      c d e c | c d e c |
-      e f g2 | e4 f g2 \bar "|.";
-    }
-    \context Lyrics \lyrics { 
-      Va-4 der Ja- cob Va- der Ja- cob
-      Slaapt gij nog?2 Slaapt4 gij nog?2
-    }
+    \context ChordNames \scheme
+    \context Staff \scheme
   >
 }
+@end lilypond
+
+
+By default, a chord name system proposed by Harald Banter (See
+@ref{Literature}) is used. The system is very regular and predictable.
+Typical American style chord names may be selected by setting the
+@code{style} property of the @code{ChordNames.ChordName} object to
+@code{'american}. Similarly @code{'jazz} selects Jazz chordnames.
+
+Routines that determine the names to be printed are written in Scheme,
+and may be customized by the user.  The code can be found in
+@file{scm/chord-name.scm}.  Here's an example showing the differences in
+chord name styles:
+
+@c too long?
+@c maybe just junk verbatim option?
+@lilypond[verbatim,singleline,noquote]
+scheme = \chords {
+  c1 c:5^3 c:4^3 c:5+
+  c:m7+ c:m5-.7
+  c:5-.7 c:5+.7
+  c:9^7
+}
 
+\score {
+  \notes <
+    \context ChordNames = banter \scheme
+    \context ChordNames = american {
+      \property ChordNames.ChordName \override
+        #'style = #'american \scheme }
+    \context ChordNames = jazz {
+      \property ChordNames.ChordName \override
+        #'style = #'jazz \scheme }
+    \context Staff \transpose c c' \scheme
+  >
+}
 @end lilypond
-@end quotation
 
-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
-that extends over the entire duration of the lyric.  This line will
-run all the way to the start of the next lyric, so you may want to
-shorten it by using a blank lyric (using `@code{_}').
 
-@quotation
+@node Writing parts
+@section Writing parts
 
-@lilypond[verbatim]
+Orchestral music involves some special notation, both in the full score,
+as in the individual parts. This section explains how to tackle common
+problems in orchestral music.
+
+
+@c .  {Transpose}
+@menu
+* Rehearsal marks::             
+* Bar numbers::                 
+* Instrument names::            
+* Transpose::                   
+* Multi measure rests::         
+* Automatic part combining::    
+* Hara kiri staves::            
+* Sound output for transposing instruments::  
+@end menu
+
+@c .   {Rehearsal marks}
+@node Rehearsal marks
+@subsection Rehearsal marks
+@cindex Rehearsal marks
+@cindex mark
+@cindex @code{\mark}
+
+To print a  rehearsal mark, use the @code{\mark} command. 
+@lilypond[fragment,verbatim]
+\relative c'' {
+  c1 \mark "A"
+  c1 \mark \default
+  c1 \mark \default 
+  c1 \mark "12"
+  c1 \mark \default
+  c1
+}
+@end lilypond
+
+As you can see, the mark is incremented automatically if you use
+@code{\mark \default}. The value to use is stored in the property
+@code{rehearsalMark} is used and automatically incremented.  The object
+is @internalsref{RehearsalMark} in @internalsref{Score} context. See
+@code{input/test/boxed-molecule.ly} if you need boxes around the
+marks.
+
+The @code{\mark} command can also be used to put signs like coda,
+segno and fermatas on a barline.  The trick is to use the text markup
+mechanism to access the fermata symbol.
+@lilypond[fragment,verbatim,relative=1]
+  c1 \mark #'(music "scripts-ufermata") 
+  c1
+@end lilypond
+
+The problem is that marks that occur at a line break are typeset only
+at the beginning of the next line, opposite to what you want for the
+fermata. This can be corrected by the following property setting
+@example
+\property Score.RehearsalMark \override
+  #'visibility-lambda = #begin-of-line-invisible
+@end example
+
+@cindex fermatas
+@cindex coda
+@cindex segno
+@cindex barlines, putting symbols on 
+
+
+@node Bar numbers
+@subsection Bar numbers
+
+
+@cindex bar numbers
+@cindex measure numbers
+@cindex currentBarNumber
+
+Bar numbers are printed by default at the start of the line.  The
+number itself is a property that can be set by modifying the
+@code{currentBarNumber} property, although that is usually not
+necessary, i.e.
+@example
+  \property Score.currentBarNumber = #217
+@end example
+
+To typeset Bar Numbers at regular intervals instead of at the beginning of each line,
+you need to change the grob property @code{break-visibility} as well as the translator
+property @code{barNumberVisibility}, as illustrated in the following example which also
+adds a box around the bar numbers:
+@example
+\property Score.BarNumber \override #'break-visibility =
+  #end-of-line-invisible
+\property Score.barNumberVisibility = #(every-nth-bar-number-visible 5)
+\property Score.BarNumber \override #'molecule-callback =
+  #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule)
+\property Score.BarNumber \override #'font-relative-size = #0
+@end example
+@lilypond[noindent,noquote]
 \score {
-  <
-    \notes \relative c'' {
-      a4 () b () c () d | c () d () b () a | c () d () b () a
-    }
-    \context Lyrics \lyrics {
-      foo1 __ | bar2. __ _4 | baz1 __
+    \context Staff \notes \transpose c c'' {
+       \property Score.BarNumber \override #'break-visibility = #end-of-line-invisible
+       \property Score.barNumberVisibility = #(every-nth-bar-number-visible 5)
+       \property Score.BarNumber \override #'molecule-callback =
+       #(make-molecule-boxer 0.1 0.25 0.25 Text_item::brew_molecule)
+       \property Score.BarNumber \override #'font-relative-size = #0
+       
+       \repeat unfold 16 c1 \bar "|."
     }
-  >
 }
+@end lilypond
+
+See also @seeinternals{BarNumber}.
+
+@refbugs
+
+Barnumbers can collide with the StaffGroup, if there is one at the
+top. To solve this, You have to twiddle with the
+@internalsref{padding} property of @internalsref{BarNumber} if your
+score starts with a @internalsref{StaffGroup}.
+
+@node Instrument names
+@subsection Instrument names
+
+In scores, the instrument name is printed before the staff. This can
+be done 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]
+  \property Staff.instrument = "ploink " { c''4 }  
+@end lilypond
+
+You can also use markup texts to construct more complicated instrument
+names:
+
+
+@lilypond[verbatim,singleline]
+#(define text-flat
+  '((font-relative-size . -2 ) (music "accidentals--1")))
+
+\score { \notes {
+  \property Staff.instrument = #`((kern . 0.5) (lines
+    "2 Clarinetti" (columns "     (B" ,text-flat ")")))
+    c'' 4 }
+}
+@end lilypond
+
+
+@refbugs
+
+When you put a name on a grand staff or piano staff the width of the
+brace is not taken into account. You must add extra spaces to the end of
+the name to avoid a collision.
+
+@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{from} @var{to} @var{musicexpr}
+@end example
+
+This means that @var{musicexpr} is transposed to by the interval
+between @var{from} is @var{to}.
+
+@code{\transpose} distinguishes between enharmonic pitches: both
+@code{\transpose c cis} or @code{\transpose c des} will transpose up
+half a tone.  The first version will print sharps and the second
+version will print flats.
+
+@lilypond[singleline, verbatim]
+mus =\notes { \key d \major cis d fis g }
+\score { \notes \context Staff {
+  \clef "F" \mus
+  \clef "G"
+  \transpose c g' \mus
+  \transpose c f' \mus
+}}
+@end lilypond
+
+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}.
+
+@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 full bar rests and 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 4/4 r1 | R1 | R1*2
+ \property Score.skipBars = ##t R1*17  R1*4
+@end lilypond
+
+The @code{1} in @code{R1} is similar to the duration notation used for
+notes. Hence, for time signatures other than 4/4, you must enter other
+durations.  This can be done with augmentation dots, or with
+fractions:
+
+@lilypond[fragment,verbatim]
+ \property Score.skipBars = ##t
+ \time 3/4
+  R2. | R2.*2
+ \time 13/8
+ R1*13/8
+ R1*13/8*12
+@end lilypond
+Notice that a @code{R} spanning a single measure is printed as a whole
+rest centered in the measure, regardless of the time signature.
+
+[ add note about breves.]
+
+@cindex whole rests for a full measure 
+
+The object for this object is @internalsref{MultiMeasureRest}, and
+@internalsref{MultiMeasureRestNumber}.
+
+@refbugs
+
+Currently, there is no way to automatically condense multiple rests
+into a single multimeasure rest. Multi measure rests do not take part
+in rest collisions.
+
+Multi-measure rests do not accept @var{note}-@code{text} syntax for
+putting texts and scripts on the rest.  This has to be done by setting
+@code{#'text} in @internalsref{MultiMeasureRestNumber}. An identifier is
+provided for a fermata:
+
+@cindex text on multi-measure rest
+@cindex script on multi-measure rest
+@cindex fermata on multi-measure rest
+
+@lilypond[verbatim,fragment]
+  \time 3/4
+  \setMmRestFermata R2.
+@end lilypond
+
+
+@cindex condensing rests
+
+@node Automatic part combining
+@subsection Automatic part combining
+@cindex automatic part combining
+@cindex part combiner
+
+
+Automatic part combining is used to merge two parts of music onto a
+staff in an intelligent way.  It is aimed primarily at typesetting
+orchestral scores.  When the two parts are identical for a period of
+time, only one is shown.  In places where the two parts differ, they
+are typeset as separate voices, and stem directions are set
+automatically.  Also, solo and @emph{a due} parts can be identified
+and marked.
+
+The syntax for part combining is
+
+@example
+  \partcombine @var{context} @var{musicexpr1} @var{musicexpr2}
+@end example
+where the pieces of music @var{musicexpr1} and @var{musicexpr2} will be
+combined into one context of type @var{context}.  The music expressions
+must be interpreted by contexts whose names should start with @code{one}
+and @code{two}.
+
+The most useful function of the part combiner is to combine parts into
+one voice, as common for wind parts in orchestral scores:
+
+@lilypond[verbatim,singleline,fragment]
+  \context Staff <
+    \context Voice=one \partcombine Voice
+      \context Thread=one \relative c'' {
+        g a () b r
+      }
+      \context Thread=two \relative c'' {
+        g r4 r f
+      }
+  >
+@end lilypond
+
+Notice that the first @code{g} appears only once, although it was
+specified twice (once in each part).  Stem, slur and tie directions are
+set automatically, depending whether there is a solo or unisono. The
+first part (with context called @code{one}) always gets up stems, and
+`solo', while the second (called @code{two}) always gets down stems and
+`Solo II'.
+
+If you just want the merging parts, and not the textual markings, you
+may set the property @var{soloADue} to false.
+
+@lilypond[verbatim,singleline,fragment]
+  \context Staff <
+    \property Staff.soloADue = ##f
+    \context Voice=one \partcombine Voice
+      \context Thread=one \relative c'' {
+        b4 a c g
+      }
+      \context Thread=two \relative c'' {
+        d,2 a4 g'
+      }
+  >
+@end lilypond
+
+There are a number of other properties that you can use to tweak the
+behavior of part combining, refer to the automatically generated
+documentation of @reng{Thread_devnull_engraver} and
+@reng{Voice_devnull_engraver}. Look at the documentation of the
+responsible engravers, @code{Thread_devnull_engraver},
+@code{Voice_devnull_engraver} and @code{A2_engraver}.
+
+@refbugs
+
+In @code{soloADue} mode, when the two voices play the same notes on and
+off, the part combiner may typeset @code{a2} more than once in a
+measure.
+
+@lilypond[fragment,singleline]
+  \context Staff <
+    \context Voice=one \partcombine Voice
+      \context Thread=one \relative c'' {
+        c b c b c a c a
+      }
+      \context Thread=two \relative c'' {
+        b b b b f a f a
+      }
+  >
+@end lilypond
+
+@cindex @code{Thread_devnull_engraver}
+@cindex @code{Voice_engraver}
+@cindex @code{A2_engraver}
 
-@end lilypond
-@end quotation
+@node Hara kiri staves
+@subsection Hara kiri staves
 
-     
-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
-will result in a hyphen which length varies depending on the space
-between syllables, and which will be centered between the syllables. 
-For example:
+In orchestral scores, staff lines that only have rests are usually removed.
+This saves some space.  LilyPond also supports this through the hara
+kiri@footnote{Hara kiri, also called Seppuku, is the ritual suicide of
+the Japanese Samourai warriors.} staff. This staff commits suicide when
+it finds itself to be empty after the line-breaking process.  It will
+not disappear when it contains normal rests, you must use multi measure
+rests.
 
-@quotation
+The hara kiri staff is specialized version of the @internalsref{Staff}
+context. It is available as the context identifier
+@code{\HaraKiriStaffContext}.  Observe how the second staff in this
+example disappears in the second line.
 
 @lilypond[verbatim]
-\score {
-  <
-    \notes \transpose c'' {
-      c d e c | c d e c |
-      e f g2 | e4 f g2 \bar "|.";
-    }
-    \context Lyrics \lyrics {
-      Va4 -- der Ja -- cob | Va -- der Ja -- cob |
-      Slaapt gij nog?2 | Slaapt4 gij nog?2
-    }
+\score  {
+  \notes \relative c' <
+    \context Staff = SA { e4 f g a \break c1 }
+    \context Staff = SB { c4 d e f \break R1 }
   >
+  \paper {
+    linewidth = 6.\cm 
+    \translator { \HaraKiriStaffContext }
+  }
 }
-
 @end lilypond
-@end quotation
 
 
+@node Sound output for transposing instruments
+@subsection Sound output for transposing instruments
 
-@node Notation Contexts, , ,  Reference Manual
-@section Notation Contexts
+When you want to make a MIDI file from a score containing transposed
+and untransposed instruments, you have to instruct LilyPond the pitch
+offset (in semitones) for the transposed instruments. This is done
+using the @code{transposing} property. It does not affect printed
+output.
 
-@cindex notation contexts
+@cindex @code{transposing}
 
-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.
+@example
+        \property Staff.instrument = #"Cl. in B-flat"
+        \property Staff.transposing = #-2
+@end example
 
-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).
+@c . {Custodes}
+@node Ancient notation 
+@section Ancient notation
 
-Contexts associated with sheet music output are called @emph{notation
-contexts}, those for sound output are called playing contexts.
+@cindex Vaticana, Editio
+@cindex Medicaea, Editio
+@cindex hufnagel
+@cindex Petrucci
+@cindex mensural
 
-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, @code{\bar}, or @code{\time} commands), a nested
-set of contexts is created that can process these atomic expressions,
-as in this example:
+@menu
+* Ancient note heads::          
+* Ancient clefs ::              
+* Custodes::                    
+* Ligatures::                   
+* Figured bass::                
+@end menu
 
-@example
 
-  @example 
-\score @{ \notes < c4 > @} 
-@end example 
+@node Ancient note heads
+@subsection Ancient note heads
 
-@end example
+To get a longa note head, you have to use mensural note heads. This
+is accomplished by setting the @code{style} property of the
+NoteHead object to @code{mensural}. There is also a note head style
+@code{baroque} which gives mensural note heads for @code{\longa} and
+@code{\breve} but standard note heads for shorter notes.
 
-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.
+@lilypond[fragment,singleline,verbatim]
+ \property Voice.NoteHead \set #'style = #'mensural
+ a'\longa
+@end lilypond
 
+@node Ancient clefs 
+@subsection Ancient clefs
 
-@cindex context
+LilyPond supports a variety of clefs, many of them ancient.
 
-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.
+For modern clefs, see section @ref{Clef}.  For the percussion clef, see
+section @ref{Percussion staves}.  For the @code{TAB} clef, see section
+@ref{Tablatures}.
 
-If a context of the specified type and name can not be found, a new
-one is created.  For example,
+The following table shows all ancient clefs that are supported via the
+@code{\clef} command.  Some of the clefs use the same glyph, but differ
+only with respect to the line they are printed on.  In such cases, a
+trailing number in the name is used to enumerate these clefs.  Still,
+you can manually force a clef glyph to be typeset on an arbitrary line,
+as described in section @ref{Clef}.  The note printed to the right side
+of each clef denotes the @code{c'} with respect to the clef.
 
-@quotation
+@table @code
 
-@lilypond[verbatim]
-\score {
-  \notes \relative c'' {
-    c4 <d4 \context Staff = "another" e4> f
-  }
-}
+@c --- This should go somewhere else: ---
+@c @item modern style G clef (glyph: @code{clefs-G})
+@c
+@c Supported clefs:
+@c @code{treble}, @code{violin}, @code{G}, @code{G2}, @code{french}
+@c
+@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "G" c'}
+@c
+@c @item modern style F clef (glyph: @code{clefs-F})
+@c
+@c Supported clefs:
+@c @code{varbaritone}, @code{bass}, @code{F}, @code{subbass}
+@c
+@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "F" c'}
+@c
+@c @item modern style C clef (glyph: @code{clefs-C})
+@c
+@c Supported clefs:
+@c @code{soprano}, @code{mezzosoprano}, @code{alto}, @code{C},
+@c @code{tenor}, @code{baritone}
+@c
+@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "C" c'}
 
-@end lilypond
-@end quotation
+@item modern style mensural C clef (glyph: @code{clefs-neo_mensural_c'})
 
-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.
+Supported clefs:
+@code{neo_mensural_c1}, @code{neo_mensural_c2},
+@code{neo_mensural_c3}, @code{neo_mensural_c4}
 
-Almost all music expressions inherit their interpretation context
-from their parent.  In other words, suppose that the syntax for a
-music expression is
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "neo_mensural_c2" c'}
 
-@example
+@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c1})
 
-  \keyword @var{musicexpr1} @var{musicexpr2} @dots{}
-@end example
+Supported clefs:
+@code{petrucci_c1}
+for 1st staffline
 
-When the interpretation of this music expression starts, the context
-for @var{musicexpr1}, @var{musicexpr2}, etc. is that of the total
-expression.
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c1" c'}
 
-Lastly, you may wonder, why this:
+@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c2})
 
-@quotation
+Supported clefs:
+@code{petrucci_c2}
+for 2nd staffline
 
-@example 
-\score @{
-  \notes \relative c'' @{
-    c4 d4 e4
-  @}
-@} 
-@end example 
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c2" c'}
 
-@end quotation
+@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c3})
 
-doesn't result in this:
+Supported clefs:
+@code{petrucci_c3}
+for 3rd staffline
 
-@lilypond[]
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c3" c'}
 
-  \score {
-    \notes \relative c'' {
-      <c4> <d4> <e4>
-    }
-  }
+@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c4})
 
-@end lilypond
+Supported clefs:
+@code{petrucci_c4}
+for 4th staffline
 
-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}.
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c4" c'}
 
+@item petrucci style mensural C clef (glyph: @code{clefs-petrucci_c5})
 
+Supported clefs:
+@code{petrucci_c5}
+for 5th staffline
 
-These are the contexts supplied with the package.  They are defined
-in the initialization file @file{ly/engraver.ly}.
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_c5" c'}
 
-@table @samp
-@end table
+@item petrucci style mensural F clef (glyph: @code{clefs-petrucci_f})
 
+Supported clefs:
+@code{petrucci_f}
 
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_f" c'}
 
-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.
+@item petrucci style mensural G clef (glyph: @code{clefs-petrucci_g})
 
-Properties can be preset within the @code{\translator} block
-corresponding to the appropriate context.  In this case, the syntax
-is
+Supported clefs:
+@code{petrucci_g}
 
-@example
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "petrucci_g" c'}
 
-  @var{propname} @code{=} @var{value}
-@end example
+@item historic style mensural C clef (glyph: @code{clefs-mensural_c'})
 
-This assignment happens before interpretation starts, so a
-@code{\property} expression will override any predefined settings.
+Supported clefs:
+@code{mensural_c1}, @code{mensural_c2}, @code{mensural_c3},
+@code{mensural_c4}
 
-The @code{\property} expression will create any property you specify.
-There is no guarantee that a property will be used.  So if you spell
-a property name wrong, there will be no error message.
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_c2" c'}
 
-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
-notation are called @emph{engravers}, and translators for sound are
-called @emph{performers}.
+@item historic style mensural F clef (glyph: @code{clefs-mensural_f})
 
-The precise result of a property is determined by the implementation
-of the translator that reads them.  Therefore, the result of a
-property can vary, since it is implementation and configuration
-dependent.
+Supported clefs:
+@code{mensural_f}
 
-In order to fully find out what properties are used, you must
-currently search the source code for calls to @code{get_property}. 
-The rest of the section is devoted to an (incomplete) overview of
-available properties.
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_f" c'}
 
-@mbinclude properties.itely
+@item historic style mensural G clef (glyph: @code{clefs-mensural_g})
 
-@node Notation output definitions, , ,  Reference Manual
-@section Notation output definitions
+Supported clefs:
+@code{mensural_g}
 
-@cindex output
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "mensural_g" c'}
 
-@cindex notation output
+@item Editio Vaticana style do clef (glyph: @code{clefs-vaticana_do})
 
-@cindex output definition
+Supported clefs:
+@code{vaticana_do1}, @code{vaticana_do2}, @code{vaticana_do3}
 
-@node paper, , ,  Reference Manual
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "vaticana_do2" c'}
 
-The most important output definition is the @code{\paper} block, for
-music notation.  The syntax is
+@item Editio Vaticana style fa clef (glyph: @code{clefs-vaticana_fa})
 
-@example
+Supported clefs:
+@code{vaticana_fa1}, @code{vaticana_fa2}
 
-  @code{\paper @{} [@var{paperidentifier}] @var{items} @code{@}}
-@end example
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "vaticana_fa2" c'}
 
-where each of the items is one of
+@item Editio Medicaea style do clef (glyph: @code{clefs-medicaea_do})
 
-@itemize @bullet
-  @item  An assignment.  The assignment must be terminated by a
-       semicolon.  
+Supported clefs:
+@code{medicaea_do1}, @code{medicaea_do2}, @code{medicaea_do3}
 
-  @item  A context definition.  See section @ref{contextdefs} for
-       more information on context definitions.
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "medicaea_do2" c'}
 
-  @item
-       FIXME now in SCM
+@item Editio Medicaea style fa clef (glyph: @code{clefs-medicaea_fa})
 
-       A margin shape declaration.  The syntax is
+Supported clefs:
+@code{medicaea_fa1}, @code{medicaea_fa2}
 
-       @example
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "medicaea_fa2" c'}
 
-         \shape @var{indent1}@code{,} @var{width1}@code{,}
-                      @var{indent2}@code{,} @var{width2} @dots{} @code{;}
-       @end example
+@item historic style hufnagel do clef (glyph: @code{clefs-hufnagel_do})
 
-       @keyindex{shape}
+Supported clefs:
+@code{hufnagel_do1}, @code{hufnagel_do2}, @code{hufnagel_do3}
 
-       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.
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_do2" c'}
 
-  @item  \stylesheet  declaration.  Its syntax is
+@item historic style hufnagel fa clef (glyph: @code{clefs-hufnagel_fa})
 
-       @example
-               \stylesheet @var{scm}
-       @end example
+Supported clefs:
+@code{hufnagel_fa1}, @code{hufnagel_fa2}
 
+@lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #4 \property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_fa2" c'}
 
-       See font.scm for details of @var{scm} 
-@end itemize
+@item historic style hufnagel combined do/fa clef (glyph: @code{clefs-hufnagel_do_fa})
 
+Supported clefs:
+@code{hufnagel_do_fa}
 
+@lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "hufnagel_do_fa" c'}
 
-@cindex changing font size and paper size
+@c --- This should go somewhere else: ---
+@c @item modern style percussion clef (glyph: @code{clefs-percussion})
+@c
+@c Supported clefs:
+@c @code{percussion}
+@c
+@c @lilypond[26pt]{\property Staff.TimeSignature \set #'transparent = ##t \clef "percussion" c'}
+@c
+@c @item modern style tab clef (glyph: @code{clefs-tab})
+@c
+@c Supported clefs:
+@c @code{tab}
+@c
+@c @lilypond[26pt]{\context Staff \outputproperty #(make-type-checker 'staff-symbol-interface) #'line-count = #6 \property Staff.TimeSignature \set #'transparent = ##t \clef "tab" c'}
 
-The Feta font provides musical symbols at six different sizes.  These
-fonts are 11 point, 13 point, 16 point, 20 point,
-23 point, and 26 point.  The point size of a font is the
-height of the five lines in a staff when displayed in the font.
+@end table
 
-Definitions for these sizes are the files @file{paperSZ.ly}, where
-@code{SZ} is one of 11, 13, 16, 20, 23 and 26.  If you include
-any of these files, the identifiers @code{paper_eleven},
-@code{paper_thirteen}, @code{paper_sixteen}, @code{paper_twenty},
-@code{paper_twentythree}, and @code{paper_twentysix} are defined
-respectively.  The default @code{\paper} block is also set.
+@emph{Modern style} means ``as is typeset in current editions of
+transcribed mensural music''.
 
-To change the paper size, you must first set the
-@code{papersize}@indexcode{papersize} variable at top level.  Set it to the strings
-@code{a4}, @code{letter}, or @code{legal}.  After this specification,
-you must set the font as described above.  If you want the default
-font, then use the 20 point font.  The new paper size will not
-take effect if the font is not loaded and selected afterwards.  Paper
-size selection works by loading a file named after the paper size you
-select.
+@emph{Petrucci style} means ``inspired by printings published by the
+famous engraver Petrucci (1466-1539)''.
+
+@emph{Historic style} means ``as was typeset or written in contemporary
+historic editions (other than those of Petrucci)''.
 
+@emph{Editio XXX style} means ``as is/was printed in Editio XXX''.
 
+Petrucci used C clefs with differently balanced left-side vertical
+beams, depending on which staffline it was printed.
 
-@cindex paper variables
+@node Custodes
+@subsection Custodes
 
-@node Paper variables, , ,  Reference Manual
+@cindex Custos
+@cindex Custodes
 
-There is a large number of paper variables that are used to control
-details of the layout.  These variables control the defaults for the
-entire score.  Usually, they do not have to be changed; they are by
-default set to values that depend on the font size in use.  The
-values are used by the graphic objects while formatting the score;
-they are therefore implementation dependent.  Most variables are
-accompanied by documentation in the initalization file
-@file{params.ly} or @file{paperSZ.ly}, where @code{SZ} is the staff
-height in points.
+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.
 
-Nevertheless, here are some variables you may want to use or change:
+@lilypond[verbatim,noquote]
+\score {
+  \notes { c'1 \break
+        \property Staff.Custos \set #'style = #'mensural
+        d' }
+  \paper {
+    \translator {
+      \StaffContext
+      \consists Custos_engraver
+    }
+  }
+}
+@end lilypond
 
-@table @samp
-  @item @code{indent}@indexcode{indent}  
-    The indentation of the first line of music.
+Custodes were frequently used in music notation until the 17th century.
+There were different appearances for different notation styles.
+Nowadays, they have survived only in special forms of musical notation
+such as via the @emph{editio vaticana} dating back to the beginning of
+the 20th century.
 
-  @item @code{staffspace}@indexcode{staffspace}
-    The distance between two staff lines, calculated from the center
-    of the lines.  You should use either this or @code{rulethickness}
-    as a unit for distances you modify.
-  
-  @item @code{linewidth}@indexcode{linewidth}  
-    Sets the width of the lines.  If set to -1.0, a single
-    unjustified line is produced.
+For typesetting custodes, just put a @code{Custos_engraver} into the
+@internalsref{Staff} context when declaring the @code{\paper} block.  In this
+block, you can also globally control the appearance of the custos symbol
+by setting the custos @code{style} property.  Currently supported styles
+are @code{vaticana}, @code{medicaea}, @code{hufnagel} and
+@code{mensural}.
 
-  @item @code{textheight}@indexcode{textheight}  
-    Sets the total height of the music on each page. Only used by
-    ly2dvi.
+@example
+\paper @{
+  \translator @{
+      \StaffContext
+      \consists Custos_engraver
+      Custos \override #'style = #'mensural
+  @}
+@}
+@end example
 
-  @item @code{interscoreline}@indexcode{interscoreline}  
-    Sets the spacing between the score lines. Defaults to 16 pt.
+The property can also be set locally, for example in a @code{\notes}
+block:
 
-  @item @code{interscorelinefill}@indexcode{interscorelinefill}  
-    If set to a positive number, the distance between the score 
-    lines will stretch in order to fill the full page. In that
-    case @code{interscoreline} specifies the minimum spacing.
-    Defaults to 0.
+@example
+\notes @{
+  \property Staff.Custos \override #'style = #'vaticana
+  c'1 d' e' d' \break c' d' e' d'
+@}
+@end example
 
-  @item @code{stafflinethickness}@indexcode{stafflinethickness}  
-    Determines the thickness of staff and bar lines. 
-@end table
+@node Ligatures
+@subsection Ligatures
+
+@cindex Ligatures
+
+@c TODO: Should double check if I recalled things correctly when I wrote
+@c down the following paragraph by heart.
+In musical terminology, a ligature is a coherent graphical symbol that
+represents at least two different notes.  Ligatures originally appeared
+in the manuscripts of Gregorian chant notation roughly since the 9th
+century as an allusion to the accent symbols of greek lyric poetry to
+denote ascending or descending sequences of notes.  Both, the shape and
+the exact meaning of ligatures changed tremendously during the following
+centuries: In early notation, ligatures where used for monophonic tunes
+(Gregorian chant) and very soon denoted also the way of performance in
+the sense of articulation.  With upcoming multiphony, the need for a
+metric system arised, since multiple voices of a piece have to be
+synchronized some way.  New notation systems were invented, that used
+the manifold shapes of ligatures to now denote rhythmical patterns
+(e.g. black mensural notation, mannered notation, ars nova).  With the
+invention of the metric system of the white mensural notation, the need
+for ligatures to denote such patterns disappeared.  Nevertheless,
+ligatures were still in use in the mensural system for a couple of
+decades until they finally disappeared during the late 16th / early 17th
+century.  Still, ligatures have survived in contemporary editions of
+Gregorian chant such as the Editio Vaticana from 1905/08.
+
+Syntactically, ligatures are simply enclosed by @code{\[} and @code{\]}.
+Some ligature styles (such as Editio Vaticana) may need additional input
+syntax specific for this particular type of ligature.  By default, the
+@internalsref{LigatureBracket} engraver just marks the start and end of
+a ligature by small square angles:
+
+@lilypond[singleline,verbatim]
+\score {
+    \notes \transpose c c' {
+       \[ g c a f d' \]
+       a g f
+       \[ e f a g \]
+    }
+}
+@end lilypond
 
+To select a specific style of ligatures, a proper ligature engraver has
+to be added to the @internalsref{Voice} context, as explained in the
+following subsections.  Currently, Lilypond only supports white mensural
+ligatures with certain limitations.  Support for Editio Vaticana will be
+added in the future.
 
-@node contextdefs, , ,  Reference Manual
+@menu
+* White mensural ligatures::    
+@end menu
 
-@cindex context definition
+@node White mensural ligatures
+@subsubsection White mensural ligatures
+
+@cindex Mensural ligatures
+@cindex White mensural ligatures
+
+Lilypond has limited support for white mensural ligatures.  The
+implementation is still experimental; it currently may output strange
+warnings or even crash in some cases or produce weird results on more
+complex ligatures.  To engrave white mensural ligatures, in the paper
+block the @internalsref{MensuralLigature} engraver has to be put into
+the @internalsref{Voice} context (and you probably want to remove the
+@internalsref{LigatureBracket} engraver).  There is no additional input
+language to describe the shape of a white mensural ligature.  The shape
+is rather determined solely from the pitch and duration of the enclosed
+notes.  While this approach may take a new user quite a while to get
+accustomed, it has a great advantage: this way, lily has full musical
+information about the ligature.  This is not only required for correct
+MIDI output, but also allows for automatic transcription of the
+ligatures.
+
+Example:
+
+@lilypond[singleline,verbatim]
+\score {
+    \notes \transpose c c' {
+       \property Score.timing = ##f
+       \property Score.defaultBarType = "empty"
+       \property Voice.NoteHead \set #'style = #'neo_mensural
+       \property Staff.TimeSignature \set #'style = #'neo_mensural
+       \clef "petrucci_g"
+       \[ g\longa c\breve a\breve f\breve d'\longa \]
+       s4
+       \[ e1 f1 a\breve g\longa \]
+    }
+    \paper {
+       \translator {
+           \VoiceContext
+           \remove Ligature_bracket_engraver
+           \consists Mensural_ligature_engraver
+       }
+    }
+}
+@end lilypond
 
-A notation contexts is defined by the following information
+Without replacing @code{Ligature_bracket_engraver} with
+@code{Mensural_ligature_engraver}, the same music transcribes to the
+following:
 
-@enumerate i
-  @item  A name.
+@lilypond[singleline,verbatim]
+\score {
+    \notes \transpose c c' {
+       \property Score.timing = ##f
+       \property Score.defaultBarType = "empty"
+       \property Voice.NoteHead \set #'style = #'neo_mensural
+       \property Staff.TimeSignature \set #'style = #'neo_mensural
+       \clef "petrucci_g"
+       \[ g\longa c\breve a\breve f\breve d'\longa \]
+       s4
+       \[ e1 f1 a\breve g\longa \]
+    }
+}
+@end lilypond
 
-  @item  The LilyPond modules that do the actual conversion of music to
-       notation.  Each module is a so-called
-       @emph{engraver}
-@cindex engraver
-.
+@node Figured bass
+@subsection Figured bass
 
-  @item  How these modules should cooperate, i.e. which ``cooperation
-       module'' should be used.  This cooperation module is a special
-       type of engraver.
+@cindex Basso continuo
 
-  @item  What other contexts the context can contain,
+LilyPond has limited support for figured bass:
 
-  @item  What properties are defined.
-@end enumerate
+@lilypond[verbatim,fragment]
+<
+ \context FiguredBass
+   \figures {
+       <_! 3+ 5- >4
+       < [4 6] 8 >
+   }
+ \context Voice { c4 g8 }
+>
+@end lilypond
 
-A context definition has this syntax:
+The support for figured bass consists of two parts: there is an input
+mode, introduced by @code{\figures}, where you can enter bass figures
+as numbers, and there is a context called @internalsref{FiguredBass}
+that takes care of making @internalsref{BassFigure} objects.
 
+In figures input mode, a group of bass figures is delimited by
+@code{<} and @code{>}. The duration is entered after the @code{>}.
 @example
-
-  \translator @code{@{}
-                      @var{translatorinit} @var{translatormodifierlist}
-                    @code{@}}
+       <4 6>
 @end example
+@lilypond[fragment]
+\context FiguredBass
+\figures { <4 6> }
+@end lilypond
 
-@var{translatorinit} can be an identifier or of the form
+Accidentals are added to the numbers if you alterate them by
+appending @code{-}, @code{!}  and @code{+}.
 
 @example
-
-  \type @var{typename} @code{;}
+  <4- 6+ 7!>
 @end example
+@lilypond[fragment]
+  \context FiguredBass
+\figures { <4- 6+ 7!> }
+@end lilypond
 
-@var{typename} is one of
+Spaces or dashes may be inserted by using @code{_}. Brackets are
+introduced with @code{[} and @code{]}.
 
-@table @samp
-  @item @code{Engraver_group_engraver}@indexcode{Engraver_group_engraver}  
-    The standard cooperation engraver.
+@example
+       < [4 6] 8 [_ 12]>
+@end example
+@lilypond[fragment]
+ \context FiguredBass
+\figures { < [4 6] 8 [_ 12]> }
+@end lilypond
 
-  @item @code{Score_engraver}@indexcode{Score_engraver}  
-    This is cooperation module that should be in the top level context.
+Although the support for figured bass may superficially resemble chord
+support, it works much simpler: in figured bass simply stores the
+numbers, and then prints the numbers you entered. There is no
+conversion to pitches, and no realizations of the bass are played in
+the MIDI file.
 
-  @item @code{Grace_engraver_group}@indexcode{Grace_engraver_group}  
-    This is a special cooperation module (resembling
-    @code{Score_engraver}) that is used to created an embedded
-    `miniscore'.
-@end table 
 
-@var{translatormodifierlist} is a list of items where each item is
-one of
+@c . {Tuning output}
+@node Tuning output
+@section Tuning output
 
-@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 the context to create by
-    default.
-  
-  @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.
+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. In this section we discuss
+ways to do just that.
 
-  @item  @var{propname} @code{=} @var{value} @code{;}  
-    A property assignment.  It is allowed to use reals for
-    @var{value}.
-@end itemize
+Formatting is internally done by manipulating so called objects (graphic
+objects). Each object carries with it a set of properties (object
+properties) specific to that object.  For example, a stem object has
+properties that specify its direction, length and thickness.
 
-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
+The most direct way of tuning the output is by altering the values of
+these properties. There are two ways of doing that: first, you can
+temporarily change the definition of a certain type of object, thus
+affecting a whole set of objects.  Second, you can select one specific
+object, and set a object property in that object.
 
-@quotation
+@menu
+* Tuning groups of objects ::   
+* Tuning per object ::          
+* Font selection::              
+* Text markup::                 
+@end menu
 
-@example 
-\paper @{
-  foo = \translator @{ @dots{} @}
-@}
-\score @{
-  \notes @{
-    @dots{}
-  @}
-  \paper @{
-    \translator @{ \foo @dots{} @}
-  @}
-@} 
-@end example 
+@node Tuning groups of objects 
+@subsection Tuning groups of objects 
 
-@end quotation
+@cindex object description
+
+A object definition is a Scheme association list, that is stored in a
+context property.  By assigning to that property (using plain
+@code{\property}), you can change the resulting objects.
 
+@lilypond[verbatim, fragment]
+c'4 \property Voice.Stem  = #'()
+@end lilypond
 
-@cindex paper types, engravers, and pre-defined translators
+The @code{\property} assignment effectively empties the definition of
+the Stem object. One of the effects is that the recipe of how it should be
+printed is erased, with the effect of rendering it invisible.  The above
+assignment is available as a standard identifier, for the case that you
+find this useful:
 
-Some pre-defined identifiers can simplify modification of
-translators.  The pre-defined identifiers are:
+@example
+  \property Voice.Stem = \turnOff
+@end example
 
-@table @samp
-  @item @code{StaffContext}@indexcode{StaffContext}  
-    Default Staff context. 
+@cindex \override
+@cindex \revert
+@cindex \set
 
-  @item @code{RhythmicStaffContext}@indexcode{RhythmicStaffContext}  
-    Default RhythmicStaff context. 
+This mechanism is fairly crude, since you can only set, but not modify,
+the definition of a object. For this reason, there is a more advanced
+mechanism.
 
-  @item @code{VoiceContext}@indexcode{VoiceContext}  
-    Default Voice context.  
+The definition of a object is actually a list of default object
+properties. For example, the definition of the Stem object (available in
+@file{scm/grob-description.scm}), defines the following values for
+@internalsref{Stem}
 
-  @item @code{ScoreContext}@indexcode{ScoreContext}  
-    Default Score context. 
+@example
+        (thickness . 0.8)
+        (beamed-lengths . (0.0 2.5 2.0 1.5))
+        (Y-extent-callback . ,Stem::height)
+        @var{...}
+@end example
 
-  @item @code{ScoreWithNumbers}@indexcode{ScoreWithNumbers}  
-    Score context with numbering at the Score level.
+You can add a property on top of the existing definition, or remove a
+property, thus overriding the system defaults:
+@lilypond[verbatim]
+c'4 \property Voice.Stem \override #'thickness = #4.0
+c'4 \property Voice.Stem \revert #'thickness
+c'4
+@end lilypond
+You should balance @code{\override} and @code{\revert}. If that's too
+much work, you can use the @code{\set} shorthand. It performs a revert
+followed by an override. The following example gives exactly the same
+result as the previous one. 
+@lilypond[verbatim]
+c'4 \property Voice.Stem \set #'thickness = #4.0
+c'4 \property Voice.Stem \set #'thickness = #0.8
+c'4
+@end lilypond
+If you use @code{\set}, you must explicitly restore the default.
 
-  @item @code{BarNumberingStaffContext}@indexcode{BarNumberingStaffContext}  
-    Staff context with numbering at the Staff level.
 
-  @item @code{HaraKiriStaffContext}@indexcode{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 Samourai.}
+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.
 
-  @item @code{OrchestralPartStaffContext}@indexcode{OrchestralPartStaffContext}
 
-  @item @code{OrchestralScoreContext}@indexcode{OrchestralScoreContext}
-@end table
+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, @code{\override} and @code{\revert},
+must be carefully balanced.
 
-Using these pre-defined values, you can remove or add items to the
-translator:
+These are examples of correct nesting of @code{\override}, @code{\set},
+@code{\revert}. 
 
-@quotation
+A clumsy but correct form:
+@example
+  \override \revert \override \revert \override \revert
+@end example
 
+Shorter version of the same:
 @example 
-\paper @{
-  \translator @{
-    \StaffContext
-    \remove Some_engraver;
-    \consists Different_engraver;
-  @}
-@} 
-@end example 
+  \override \set \set  \revert
+@end example
 
-@end quotation
+A short form, using only @code{\set}. This requires you to know the
+default value:
+@example
+  \set \set \set \set @var{to default value}
+@end example
+
+If there is no default (i.e. by default, the object property is unset),
+then you can use
+@example
+  \set \set \set \revert
+@end example
 
-      
-@node Sound output, , ,  Reference Manual
-@section Sound output
+For the digirati, the object description is an Scheme association
+list. Since a Scheme list is a singly linked list, 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 for overriding
+automatic beaming settings.
 
+@refbugs
 
+LilyPond will hang or crash if @var{value} contains cyclic references.
+The backend is not very strict in type-checking object properties. If you
+@code{\revert} properties that are expected to be set by default,
+LilyPond may crash.
 
-The MIDI block is analogous to the paper block, but it is simpler.
-The @code{\midi} block can contain:
-@cindex MIDI block
 
-@itemize @bullet
-  @item  a @code{\tempo} definition
-  @item  context definitions
-@end itemize
 
-Assignments in the @code{\midi} block are not allowed.
 
+@node Tuning per object 
+@subsection Tuning per object 
 
+@cindex \once
+Tuning a single object is most often done with @code{\property}. The
+form,
+@example
+        \once \property @dots{}
+@end example
+@c
+applies a setting only during one moment in the score: notice how the
+original setting for stem thickness is restored automatically in the
+following example
+@c
+@lilypond[verbatim, fragment, relative=1]
+  c4 
+  \once \property Voice.Stem \set #'thickness = #4
+  c4
+  c4
+@end lilypond
 
-@cindex context definition
+@cindex \once
+@cindex \outputproperty
 
-Context definitions follow precisely the same syntax as within the
-\paper block.  Translation modules for sound are called performers.
-The contexts for MIDI output are defined in @file{ly/performer.ly}.
+A second way of tuning objects is the more arcane @code{\outputproperty}
+feature.  The syntax is as follows:
+@example
+\outputproperty @var{predicate} @var{symbol} = @var{value}
+@end example
+Here @code{predicate} is a Scheme function taking a object argument, and
+returning a boolean.  This statement is processed by the
+@code{Output_property_engraver}.  It instructs the engraver to feed all
+objects that it sees to @var{predicate}. Whenever the predicate returns
+true, the object property @var{symbol} will be set to @var{value}.
 
+This command is only single shot, in contrast to @code{\override} and
+@code{\set}.
 
+You will need to combine this statement with @code{\context} to select
+the appropriate context to apply this to.
 
-@cindex MIDI instrument names
+In the following example, all note heads occurring at current staff
+level, are shifted up and right by setting their @code{extra-offset}
+property.
 
-@node midilist, , , Reference Manual
+@lilypond[fragment,verbatim,singleline]
+\relative c'' { c4
+  \context Staff \outputproperty
+  #(make-type-checker 'note-head-interface)
+  #'extra-offset = #'(0.5 . 0.75)
+  <<c e g>>8 }
+@end lilypond
 
-The MIDI instrument name is set by the
-@code{Staff.midiInstrument}@indexcode{Staff.midiInstrument} property or,
-if that property is not set, the
-@code{Staff.instrument}@indexcode{Staff.instrument} property.  The
-instrument name should be chosen from the following list.  If the
-selected string does not exactly match, then LilyPond uses the default
-piano.
+@cindex @code{extra-offset}
 
-@c @quotation
+In this example, the predicate checks the @code{text} object property, to
+shift only the `m.d.' text,  but not the fingering instruction "2".
+@lilypond[verbatim,singleline]
+#(define (make-text-checker text)
+   (lambda (grob) (equal? text (ly:get-grob-property grob 'text))))
 
-@example 
-"acoustic grand"            "contrabass"           "lead 7 (fifths)"
-"bright acoustic"           "tremolo strings"      "lead 8 (bass+lead)"
-"electric grand"            "pizzicato strings"    "pad 1 (new age)"
-"honky-tonk"                "orchestral strings"   "pad 2 (warm)"
-"electric piano 1"          "timpani"              "pad 3 (polysynth)"
-"electric piano 2"          "string ensemble 1"    "pad 4 (choir)"
-"harpsichord"               "string ensemble 2"    "pad 5 (bowed)"
-"clav"                      "synthstrings 1"       "pad 6 (metallic)"
-"celesta"                   "synthstrings 2"       "pad 7 (halo)"
-"glockenspiel"              "choir aahs"           "pad 8 (sweep)"
-"music box"                 "voice oohs"           "fx 1 (rain)"
-"vibraphone"                "synth voice"          "fx 2 (soundtrack)"
-"marimba"                   "orchestra hit"        "fx 3 (crystal)"
-"xylophone"                 "trumpet"              "fx 4 (atmosphere)"
-"tubular bells"             "trombone"             "fx 5 (brightness)"
-"dulcimer"                  "tuba"                 "fx 6 (goblins)"
-"drawbar organ"             "muted trumpet"        "fx 7 (echoes)"
-"percussive organ"          "french horn"          "fx 8 (sci-fi)"
-"rock organ"                "brass section"        "sitar"
-"church organ"              "synthbrass 1"         "banjo"
-"reed organ"                "synthbrass 2"         "shamisen"
-"accordion"                 "soprano sax"          "koto"
-"harmonica"                 "alto sax"             "kalimba"
-"concertina"                "tenor sax"            "bagpipe"
-"acoustic guitar (nylon)"   "baritone sax"         "fiddle"
-"acoustic guitar (steel)"   "oboe"                 "shanai"
-"electric guitar (jazz)"    "english horn"         "tinkle bell"
-"electric guitar (clean)"   "bassoon"              "agogo"
-"electric guitar (muted)"   "clarinet"             "steel drums"
-"overdriven guitar"         "piccolo"              "woodblock"
-"distorted guitar"          "flute"                "taiko drum"
-"guitar harmonics"          "recorder"             "melodic tom"
-"acoustic bass"             "pan flute"            "synth drum"
-"electric bass (finger)"    "blown bottle"         "reverse cymbal"
-"electric bass (pick)"      "skakuhachi"           "guitar fret noise"
-"fretless bass"             "whistle"              "breath noise"
-"slap bass 1"               "ocarina"              "seashore"
-"slap bass 2"               "lead 1 (square)"      "bird tweet"
-"synth bass 1"              "lead 2 (sawtooth)"    "telephone ring"
-"synth bass 2"              "lead 3 (calliope)"    "helicopter"
-"violin"                    "lead 4 (chiff)"       "applause"
-"viola"                     "lead 5 (charang)"     "gunshot"
-"cello"                     "lead 6 (voice)" 
-@end example 
+\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
+
+@refbugs
 
-@c @end quotation
+If possible, avoid this feature: the semantics are not very clean, and
+the syntax and semantics are up for rewrite.
 
 
 
-@node Pre-defined Identifiers, , ,  Reference Manual
 
-@section Pre-defined Identifiers
+@node Font selection
+@subsection Font selection
 
-@cindex pre-defined identifiers
+The most common thing to change about the appearance of fonts is
+their size. The font size of a @internalsref{Voice},
+@internalsref{Staff} or @internalsref{Thread} context, can be easily
+changed by setting the @code{fontSize} property for that context:
+@lilypond[fragment,relative=1]
+  c4 c4 \property Voice.fontSize = #-1
+  f4 g4
+@end lilypond
+ This command will not change the size of variable symbols, such as
+beams or slurs.  You can use this command to get smaller symbol for
+cue notes, but that involves some more subtleties. An elaborate
+example of those is in @file{input/test/cue-notes.ly}.
+
+@cindex cue notes
+@cindex font size
+@cindex size
+@cindex symbol size
+@cindex glyph size
+
+The font used for printing a object can be selected by setting
+@code{font-name}, e.g.
+@example
+  \property Staff.TimeSignature
+    \set #'font-name = #"cmr17"
+@end example
+You may use any font which is available to @TeX{}, such as foreign
+fonts or fonts that do not belong to the Computer Modern font family.
+Font selection for the standard fonts, @TeX{}'s Computer Modern fonts,
+can also be adjusted with a more fine-grained mechanism.  By setting
+the object properties described below, you can select a different font.
+All three mechanisms work for every object that supports
+@code{font-interface}.
+
+@table @code
+@item font-family
+ A symbol indicating the general class of the typeface.  Supported are
+@code{roman} (Computer Modern), @code{braces} (for piano staff
+braces), @code{music} (the standard music font), @code{ancient} (the
+ancient notation font) @code{dynamic} (font for dynamic signs) and
+@code{typewriter}. 
+  
+@item font-shape
+  A symbol indicating the shape of the font, there are typically several
+  font shapes available for each font family. Choices are @code{italic},
+  @code{caps} and @code{upright} 
+
+@item font-series
+A  symbol indicating the series of the font. There are typically several
+font series for each font family and shape. Choices are @code{medium}
+and @code{bold}. 
+
+@item font-relative-size
+  A number indicating the size relative the standard size.  For example,
+  with 20pt staff height, relative size -1  corresponds to 16pt staff
+  height, and relative size +1 corresponds to 23 pt staff height.
+
+@item font-design-size
+A number indicating  the design size of the font. 
+
+This is a feature of the Computer Modern Font: each point size has a
+slightly different design. Smaller design sizes are relatively wider,
+which enhances readability.
+@end table
+
+For any of these properties, the value @code{*} (i.e. the @emph{symbol},
+@code{*}, entered as @code{#'*}), acts as a wildcard. This can be used
+to override default setting, which are always present. For example:
+@example
+  \property Lyrics.LyricText \override #'font-series = #'bold
+  \property Lyrics.LyricText \override #'font-family = #'typewriter
+  \property Lyrics.LyricText \override #'font-shape  = #'*
+@end example
 
+@cindex @code{font-style}
 
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings.  Most of them are in
-@file{ly/declarations.ly}.
+There are also pre-cooked font selection qualifiers. These are
+selected through the object property @code{font-style}.  For example,
+the style @code{finger} selects family @code{number} and relative size
+@code{-3}.  Styles available include @code{volta}, @code{finger},
+@code{tuplet}, @code{timesig}, @code{mmrest}, @code{script},
+@code{large}, @code{Large} and @code{dynamic}. The style sheets and
+tables for selecting fonts are located in @file{scm/font.scm}. Refer
+to this file for more information.
 
-@table @samp
-  @item @code{\break}@keyindex{break}  
-    Force a line break in music by using a large argument for the
-    keyword @code{\penalty}.
+@cindex magnification
 
-  @item @code{\nobreak}@keyindex{nobreak}  
-    Prevent a line break in music by using a large negative argument
-    for the keyword @code{\penalty}.
+The size of the font may be scaled with the object property
+@code{font-magnification}.  For example, @code{2.0} blows up all
+letters by a factor 2 in both directions.
 
-  @item @code{\normalkey}@keyindex{normalkey}  
-    Select normal key signatures where each octave has the same key
-    signature.  This sets the @code{Staff.keyoctaviation} property.
+@refbugs
 
-  @item @code{\shiftoff}@keyindex{shiftOff}  
-    Disable horizontal shifting of note heads that collide. 
+Relative size is not linked to any real size.
 
-  @item @code{\shiftOn}@keyindex{shiftOn}  
-    Enable note heads that collide with other note heads to be
-    shifted horiztonally.
+There is no style sheet provided for other fonts besides the @TeX{}
+family, and the style sheet can not be modified easiyl.
 
-  @item @code{\slurBoth}@keyindex{slurBoth}  
-    Allow slurs to be above or below notes.
+@cindex font selection
+@cindex font magnification
+@cindex @code{font-interface}
 
-  @item @code{\slurDown}@keyindex{slurDown}  
-    Force slurs to be below notes.
 
-  @item @code{\slurUp}@keyindex{slurUp}  
-    Force slurs to be above notes.
+@node Text markup
+@subsection Text markup
+@cindex text markup
+@cindex markup text
 
-  @item @code{\specialkey}@keyindex{specialkey}  
-    Allow key signatures do differ in different octaves.  This sets
-    the @code{Staff.keyoctaviation} property.
+LilyPond has an internal mechanism to typeset texts. You can
+form text markup expressions by composing scheme expressions
+in the following way.
 
-  @item @code{\stemBoth}@keyindex{stemBoth}  
-    Allow stems, beams, and slurs to point either upwards or
-    downwards, decided automatically by LilyPond.
+@lilypond[verbatim, singleline]
+ \relative c' {
+    \fatText
+    a^#"upright"
+    b_#'(bold "bold")
+    c^#'(italic "italic")
+    d_#'((bold italic) "ff")
+    e^#'(dynamic "ff")
+    f_#'(lines "one" (bold "two"))
+    g^#'(music "noteheads-2" ((raise . 2.4) "flags-u3"))
+  }
+@end lilypond
 
-  @item @code{\stemdown}@keyindex{stemdown}  
-    Force stems, beams, and slurs to point down.
+Normally, the Scheme markup text is stored in the @code{text} property
+of a object.  Formally, it is defined as follows:
 
-  @item @code{\stemUp}@keyindex{stemUp}  
-    Force stems, beams and slurs to point up.
+@example
+text: string | (head? text+)
+head: markup | (markup+)
+markup-item: property | abbrev
+property: (@var{key} . @var{value})
+abbrev: @code{columns lines roman music bold italic named super sub}
+        @code{overstrike text finger volta timesig mmrest mark script}
+        @code{large Large dynamic}
+@end example
 
+The markup is broken down and converted into a list of object properties,
+which are prepended to the property list.  The @var{key}-@var{value}
+pair is a object property. A list of properties available is included in
+the generated documentation for @internalsref{text-interface}.
+
+The following abbreviations are defined:
+@table @code
+@item columns
+ horizontal mode: set all text on one line (default)
+@item lines
+ vertical mode: set every text on a new line
+@item roman
+ select roman font
+@item music
+ selects the Feta font (the standard font for music notation glyphs),
+and uses named lookup
+
+@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
+@item overstrike
+ the next text or character overstrikes this one
+@item finger
+ select fingering number fontstyle
+@item volta
+ select volta number fontstyle
+@item timesig
+ select time signature number fontstyle
+@item mmrest
+ select multi measure rest number fontstyle
+@item mark
+ select mark number fontstyle
+@item script
+ select scriptsize roman fontstyle
+@item large
+ select large roman fontstyle
+@item Large
+ select Large roman fontstyle
+@item dynamic
+ select dynamics fontstyle
 @end table
 
-@node  Grobs, , , Reference Manual
-@section Grobs
 
-This section is about Grobs (short for Graphical Objects), which are
-formatting objects used to create  the final output. This material is
-normally the domain of LilyPond gurus, but occasionally,  a normal user
-also has to deal with grobs.
+@cindex metronome mark
 
-The most simple interaction with Grobs are when you use
-@code{\override}:
+One practical application of complicated markup is to fake a metronome
+marking:
 
-@example
-        \property Voice.Stem \override #'direction = #1
-@end example
+@lilypond[verbatim]
+#(define note '(columns
+  (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
+#(define eight-note `(columns ,note ((kern . -0.1)
+  (music ((raise . 3.5) "flags-u3")))))
+#(define dotted-eight-note
+  `(columns ,eight-note (music "dots-dot")))
+
+\score {
+  \notes\relative c'' {
+    a1^#`((columns (font-relative-size . -1))
+           ,dotted-eight-note " = 64")
+  }
+  \paper {
+    linewidth = -1.
+    \translator{
+      \ScoreContext
+      TextScript \override #'font-shape = #'upright
+    }
+  }
+}
+@end lilypond
+
+@refbugs
 
-This piece of lily input causes all stem objects to be stem-up
-henceforth.  In effect, you are telling lilypond to extend the defintion
-of the "Stem" grob with the setting @code{direction := 1}.  Of course
-there are many more ways of customizing Lily output, and since most of
-them involve Grobs in some form, this section explains some details of
-how grobs work.
+The syntax and semantics of markup texts are not clean, and both
+syntax and semantics are slated for a rewrite.
+
+LilyPond does not do kerning, and there generally spaces texts
+slightly too wide.
+
+
+
+@node Global layout
+@section Global layout
+
+The global layout determined by three factors: the page layout, the
+line breaks and the spacing. These all influence each other: The
+choice of spacing determines how densely each system of music is set,
+where line breaks breaks are chosen, and thus ultimately how many
+pages a piece of music takes. In this section we will explain how the
+lilypond spacing engine works, and how you can tune its results.
+
+Globally spoken, this procedure happens in three steps: first,
+flexible distances (``springs'') are chosen, based on durations. All
+possible line breaking combination are tried, and the one with the
+best results---a layout that has uniform density and requires as
+little stretching or cramping as possible---is chosen. When the score
+is processed by @TeX{}, page are filled with systems, and page breaks
+are chosen whenever the page gets full.
 
 @menu
-* What is a grob?::
-* Callbacks::
-* Setting grob properties::
-* Items and Spanners::
-* Pointer substitution::
+* Vertical spacing::            
+* Horizontal spacing::          
+* Font Size::                   
+* Line breaking::               
+* Page layout::                 
 @end menu
 
-@node What is a grob?, , , Grobs
-
-All grobs have an X and Y-position on the page.  These X and Y positions
-are stored in a relative format, so they can easily be combined by
-stacking them, hanging one grob to the side of another, and coupling
-them into a grouping-grob.
-
-Each grob has a reference point, or parent: the position of a grob is
-stored relative to that reference point. For example the X-reference
-point of a staccato dot usually is the note head that it applies
-to. Whenever the note head is moved, the staccato dot moves along
-automatically.
-
-If you keep following offset reference points, you will always end up at
-the root-object. This root object is called @code{Line_of_score}
-@ref{(lilypond-internals)Element Line_of_score}, and it represents a
-system (ie. a line of music).
-
-All grobs carry a set of grob-properties.  In the Stem example above,
-the property @code{direction} is set to value @code{1}.  The function
-that draws the symbol (@code{Stem::brew_molecule}) uses the value of
-@code{direction} to determine how to print the stem and the flag.  The
-appearance of a grob is determined solely by the values of its
-properties.
-
-Often, a grob also is associated with a symbol. On the other hand, Some
-grobs do not print any symbols, but take care of grouping objects. For
-example, there is a separate grob that stacks staffs vertically, so they
-are not printed in overstrike. The NoteCollision @ref{(lilypond-internals)Element
-NoteCollision} is another example of an abstract grob.  It only moves
-around chords, but doesn't print anything.
-
-A complete list of grob types is found in @ref{(lilypond-internals)Elements}
-
-Grobs are created in the "Interpreting music" phase, by things in
-LilyPond called engravers.  In this phase of the translation, a load of
-grobs are created, and they are linked into a giant network of objects.
-This network of grobs forms the "specification" of the print
-problem. This problem is then solved: configurations, directions,
-dimensions, line breaks, etc.  are calculated. Finally,   the printing
-description in the form of Molecules (@ref{Molecule})  is extracted from
-the network. These are then dumped into the output file
-
-@node Callbacks, , , Grobs
-
-Offsets of grobs are relative to a parent reference point. Most
-positions are not known when an object is created, so these are
-calculated as needed. This is done by adding a callback for a specific
-direction.
-
-Suppose you have the following code in a .ly file.
-@example
-        #(define (my-callback gr axis)
-                (*  2.0 (get-gr-property grob 'direction))
-        )
 
-....
+@node Vertical spacing
+@subsection Vertical spacing
+
+@cindex vertical spacing
+@cindex distance between staves
+@cindex staff distance
+@cindex between staves, distance
+@cindex staffs per page
 
-        \property Voice.Stem \override #'Y-offset-callbacks = #(list
-                        my-callback)
+
+The height of each system is determined automatically by lilypond, to
+keep systems from bumping into each other, some minimum distances are
+set.  By changing these, you can put staves closer together, and thus
+put more  systems onto one page.
+
+Normally staves are stacked vertically. To make
+staves maintain a distance, their vertical size is padded. This is
+done with the property @code{minimumVerticalExtent}. It takes a pair
+of numbers, so if you want to make it smaller from its, then you could
+set
+@example
+  \property Staff.minimumVerticalExtent = #'(-4 . 4)
+@end example
+This sets the vertical size of the current staff to 4 staff-space on
+either side of the center staff line.  The argument of
+@code{minimumVerticalExtent} is interpreted as an interval, where the
+center line is the 0, so the first number is generally negative.  you
+could also make the staff larger at the bottom by setting it to
+@code{(-6 . 4)}. The default value is @code{(-6 . 6)}.
+
+Vertical aligment of staves is handled by the
+@internalsref{VerticalAlignment} object, which lives at
+@internalsref{Score} level.
+
+The piano staves are handled a little differently: to make cross-staff
+beaming work correctly, it necessary that the distance between staves
+is fixed.  This is also done with a @internalsref{VerticalAlignment}
+object, created in @internalsref{PianoStaff}, but a forced distance is
+set. This is done with the object property #'forced-distance. If you
+want to override this, use a @code{\translator} block as follows:
+@example
+  \translator @{
+    \PianoStaffContext
+    VerticalAlignment \override #'forced-distance = #9
+  @}
 @end example
+This would bring the staves together at a distance of 9 staff spaces,
+and again this is measured from the center line of each staff.
 
-When the Y-offset of a Stem object is needed, LilyPond will
-automatically execute all callbacks for that object. In this case, it
-will find @code{my-callback}, and execute that. The result is that the
-stem is translated by two staff spaces in its direction.
 
-(note: Y-offset-callbacks is also a property) 
 
+@node Horizontal spacing
+@subsection Horizontal Spacing
 
-Offset callbacks can be stacked, ie.
+The spacing engine translates differences in durations into
+stretchable distances (``springs'') of differing lengths. Longer
+durations get more space, shorter durations get less.  The basis for
+assigning spaces to durations, is that the shortest durations get a
+fixed amount of space, and the longer durations get more: doubling a
+duration adds a fixed amount of space to the note.
 
-@example
-        \property .... \override #'Y-offset-callbacks = #(list
-                callback1 callback2 callback3)
+For example, the following piece contains lots of half, quarter and
+8th notes, the eighth note is followed by 1 note head width. The The
+quarter note is followed by 2 NHW, the half by 3 NHW, etc.
+@lilypond[fragment, verbatim, relative=1]
+ c2 c4. c8 c4. c8 c4. c8 c8 c8 c4 c4 c4
+@end lilypond
 
-@end example
+These two amounts of space are @code{shortest-duration-space}
+@code{spacing-increment}, object properties of
+@internalsref{SpacingSpanner}. Normally @code{spacing-increment} is
+set to 1.2, which is the width of a note head, and
+@code{shortest-duration-space} is set to 2.0, meaning that the
+shortest note gets 2 noteheads of space. For normal notes, this space
+is always counted from the left edge of the symbol, so the short notes
+in a score is generally followed by one note head width of space.
+
+If one would follow the above procedure exactly, then adding a single
+32th note to a score that uses 8th and 16th notes, would widen up the
+entire score a lot. The shortest note is no longer a 16th, but a 64th,
+thus adding 2 noteheads of space to every note. To prevent this, the
+shortest duration for spacing is not the shortest note in the score,
+but the most commonly found shortest note.  Notes that are even
+shorter this are followed by a space that is proportonial to their
+duration relative to the common shortest note.  So if we were to add
+only a few 16th notes to the example above, they would be followed by
+half a NHW:
+
+@lilypond[fragment, verbatim, relative=1]
+ c2 c4. c8 c4. [c16 c] c4. c8 c8 c8 c4 c4 c4
+@end lilypond
 
-The callbacks will be executed in the order callback3 callback2
-callback1. This is used for quantized positioning: the staccato dot is
-above or below a note head, and it must not be on a staff-line.
+The most common shortest duration is determined as follows: in every
+measure, the shortest duration is determined. The most common short
+duration, is taken as the basis for the spacing, with the stipulation
+that this shortest duration should always be equal to or shorter than
+1/8th note. The shortest duration is printed when you run lilypond
+with @code{--verbose}.  These durations may also be customized. If you
+set the @code{common-shortest-duration} in
+@internalsref{SpacingSpanner}, then this sets the base duration for
+spacing. The maximum duration for this base (normally 1/8th), is set
+through @code{base-shortest-duration}.
+
+@cindex @code{common-shortest-duration}
+@cindex @code{base-shortest-duration}
+@cindex @code{stem-spacing-correction}
+@cindex @code{spacing}
+
+In the introduction it was explained that stem directions influence
+spacing. This is controlled with @code{stem-spacing-correction} in
+@internalsref{NoteSpacing}. The @code{StaffSpacing} object contains the
+same property for controlling the stem/barline spacing. In the
+following example shows these corrections, once with default settings,
+and once with exaggerated corrections.  
+
+@lilypond
+    \score { \notes {
+      c'4 e''4 e'4 b'4 |
+      b'4 e''4 b'4 e''4|
+      \property Staff.NoteSpacing \override #'stem-spacing-correction
+      = #1.5
+      \property Staff.StaffSpacing \override #'stem-spacing-correction
+      = #1.5
+      c'4 e''4 e'4 b'4 |
+      b'4 e''4 b'4 e''4|      
+    }
+    \paper { linewidth = -1. } }
+@end lilypond
 
-To achieve this, for the staccato there are two callbacks: one callback
-that positions the grob above or below the note head, and one callback
-that rounds the Y-position of the grob to the nearest open space.
 
-Similarly, the size of a grob are determined through callbacks, settable
-with grob properties @code{X-extent-callback} and @code{Y-extent-callback}.
-There can be only one extent-callback for each axis. No callback (value #f)
-means: "empty in this direction". If you fill in a pair, that pair
-hard-codes the extent in that coordinate.
 
+@refbugs
 
-@node Setting grob properties, , , Grobs
+Spacing is determined on a score wide basis. If you have a score that
+changes its character (measured in durations) half way during the
+score, the part containing the longer durations will be spaced too
+widely.
 
-Grob properties are stored as GUILE association lists, with symbols as
-keys.   From C++, element properties can be accessed using the functions
+Generating optically pleasing spacing is black magic. LilyPond tries
+to deal with a number of frequent cases. Here is an example that is
+not handled correctly, due to the combination of chord collisions and
+kneed stems.
 
-@example
-  SCM  get_grob_property (SCM) const;
-  void set_grob_property (const char * , SCM val);
-  void set_immutable_grob_property (const char * , SCM val);
-  void set_immutable_grob_property (SCM key, SCM val);  
-  void set_grob_property (SCM , SCM val);  
-  void set_grob_pointer (const char*, SCM val);
-  SCM  remove_grob_property (const char* nm);
-@end example
+@lilypond
+\score {
+     \context PianoStaff \notes \transpose c c'' <
+     \context Staff = up { s1 }
+     \context Staff = down { [c8 c \translator Staff=up <<c d>> c 
+\translator Staff=down c c c] }
+     >
+     \paper { linewidth = -1 }
+}
+@end lilypond
+
+
+@c .  {Font size}
+@node Font Size
+@subsection Font size
+@cindex font size, setting
+@cindex staff size, setting
+@cindex @code{paper} file
 
-In GUILE, LilyPond provides
+The Feta font provides musical symbols at seven different sizes.
+These fonts are 11 point, 13 point, 16 point, 19 pt, 20 point, 23
+point, and 26 point.  The point size of a font is the height of the
+five lines in a staff when displayed in the font.
 
+Definitions for these sizes are the files @file{paperSZ.ly}, where
+@code{SZ} is one of 11, 13, 16, 19, 20, 23 and 26.  If you include any
+of these files, the identifiers @code{paperEleven},
+@code{paperThirteen}, @code{paperSixteen}, @code{paperNineteen},
+@code{paperTwenty}, @code{paperTwentythree}, and @code{paperTwentysix}
+are defined respectively.  The default @code{\paper} block is also
+set. These files should be imported at toplevel, i.e.
 @example
-        ly-get-grob-property GROB SYMBOL
-        ly-set-grob-property GROB SYMBOL VALUE
+       \include "paper26.ly"
+       \score @{  ... @}
 @end example
 
-All lookup functions identify undefined properties with 
-end-of-list (ie. @code{'()} in Scheme or @code{SCM_EOL} in C)
+The font definitions are generated using a Scheme function. For more
+details, see the file @file{scm/font.scm}.
 
-Properties are stored in two ways:
-@itemize @bullet
-@item mutable properties:
-element properties that change from object to object. The storage of
-these are private to a grob. Typically this is used to store lists of
-pointers to other grobs
-
-@item immutable properties:
-element properties that are shared across different grobs of the same
-type. The storage is shared, and hence it is read-only. Typically, this
-is used to store function callbacks, and values for shared element
-properties are read from @file{scm/element-description.scm}.
-@end itemize
 
-There are two ways to manually set grob properties.
+@c .  {Line break}
+@node Line breaking
+@subsection Line breaking
 
-You can change immutable grob properties. This is done with the
-\override syntax:
+@cindex line breaks
+@cindex breaking lines
 
-@example
-        \property Voice.Stem \override #'direction = #1
-@end example
+Line breaks are normally computed automatically. They are chosen such
+that it looks neither cramped nor loose, and that consecutive lines have
+similar density.
+
+Occasionally you might want to override the automatic breaks; you can
+do this by specifying @code{\break}. This will force a line break at
+this point.  Line breaks can only occur at places where there are bar
+lines.  If you want to have a line break where there is no bar line,
+you can force an invisible bar line by entering @code{\bar
+""}. Similarly, @code{\noBreak} forbids a line break at a certain
+point.
 
-This will push the entry @code{'(direction . 1)} on the immutable
-property list for stems, in effect overriding the setting from
-@file{scm/element-description.scm}. This can be undone by 
 
+@cindex regular line breaks
+@cindex four bar music. 
+
+If you want linebreaks at regular intervals, you can use the following:
 @example
-        \property Voice.stem \revert #'direction
-@end example
+<  \repeat 7 unfold @{ s1 * 4 \break  @}
+   @emph{real music}
+> 
+@end  example
+This makes the following 28 measures (assuming 4/4 time) be broken every
+4 measures.
+
+@node Page layout
+@subsection Page layout
+
+@cindex page breaks
+@cindex breaking pages
+
+@cindex @code{indent}
+@cindex @code{linewidth}
+
+The most basic settings influencing the spacing are @code{indent} and
+@code{linewidth}. They are set in the @code{\paper} block. They
+control the indentation of the first line of music, and the lengths of
+the lines.  If @code{linewidth} set to a negative value, a single
+unjustified line is produced.  A similar effect for scores that are
+longer than one line, can be produced by setting @code{raggedright} to
+true in the @code{\paper} block.
+
+@cindex page layout
+
+The page layout process happens outside lilypond. Ly2dvi sets page
+layout instructions. Ly2dvi responds to the following variables in the
+@code{\paper} block.  The variable @code{textheight} sets the total
+height of the music on each page.  The spacing between systems is
+controlled with @code{interscoreline}, its default is 16pt.
+The distance between the score lines will stretch in order to fill the
+full page @code{interscorelinefill} is set to a positive number.  In
+that case @code{interscoreline} specifies the minimum spacing.
+
+@cindex @code{textheight}
+@cindex @code{interscoreline}
+@cindex @code{interscorelinefill}
+
+If the variable @code{lastpagefill} is defined (that is, it gets any
+value assigned in the @code{\paper} block), systems are evenly
+distributed vertically on the last page.  This might produce ugly
+results in case there are not enough systems on the last page.  Note
+that @command{lilypond-book} ignores @code{lastpagefill}.  See
+@ref{Integrating text and music with lilypond-book} for
+more information.
+
+@cindex @code{lastpagefill}
+
+Page breaks are normally computed by @TeX{}, so they are not under
+direct control of LilyPond.  However, you can insert a commands into
+the @file{.tex} output to instruct @TeX{} where to break pages. You
+can insert a @code{\newpage} from within lilypond. This is done by
+setting the @code{between-systems-strings} on the
+@internalsref{NonMusicalPaperColumn} where the system is broken.
+
+@cindex paper size
+@cindex page size
+@cindex @code{papersize}
 
-If you use this a lot, this gets old quickly. So we also have a
-shorthand,
+To change the paper size, you must first set the
+@code{papersize} paper variable variable.  Set it to
+the strings @code{a4}, @code{letter}, or @code{legal}.  After this
+specification, you must set the font as described above.  If you want
+the default font, then use the 20 point font.
 
 @example
-        \property Context.GrobType \set #'prop = #VAL
+        \paper@{ papersize = "a4" @}
+        \include "paper16.ly"
 @end example
 
-this does a @code{\revert} followed by a @code{\override}
+The file @code{paper16.ly}  will now include a file named @file{a4.ly}, which
+will set the paper variables @code{hsize} and @code{vsize} (used by
+Lilypond and @code{ly2dvi})
 
-The second way is \outputproperty. This construct looks like
 
-@example
-        \context ContextName \outputproperty @var{pred} #@var{sym} = #@var{val}
-@end example
 
-In this case, in every grob that satisfies @var{pred}, the property
-assignment @var{sym} = @var{val} is done.  For example
 
-@example
-        \outputproperty
-                #(lambda (gr) (string? (ly-get-grob-property gr
-                        'text)))
-                #'extra-offset = #'(-1.0 . 0.0)
-@end example
+@c . {Sound}
+@node Sound
+@section Sound
+@cindex Sound
+
+LilyPond can produce MIDI output.  The performance lacks lots of
+interesting effects, such as swing, articulation, slurring, etc., but it
+is good enough for proof-hearing the music you have entered.  Ties,
+dynamics and tempo changes are interpreted.
+
+Dynamic marks, crescendi and decrescendi translate into MIDI volume
+levels.  Dynamic marks translate to a fixed fraction of the available
+MIDI volume range, crescendi and decrescendi make the the volume vary
+linearly between their two extremities.  The fractions be adjusted by
+overriding the @code{absolute-volume-alist} defined in
+@file{scm/midi.scm}.
+
+For each type of musical instrument (that MIDI supports), a volume range
+can be defined.  This gives you basic equalizer control, which can
+enhance the quality of the MIDI output remarkably.  You can add
+instruments and ranges or change the default settings by overriding the
+@code{instrument-equalizer-alist} defined in @file{scm/midi.scm}.
+
+Both loudness controls are combined to produce the final  MIDI volume. 
+
+@menu
+* MIDI block::                  
+* MIDI instrument names::       
+@end menu
 
-This shifts all elements that have a @code{text} property one staff
-space to the left.
+@c .  {MIDI block}
+@node MIDI block
+@subsection MIDI block
+@cindex MIDI block
+
+
+The MIDI block is analogous to the paper block, but it is somewhat
+simpler.  The @code{\midi} block can contain:
+@cindex MIDI block
 
-@node Items and Spanners, , , Grobs
+@itemize @bullet
+  @item  a @code{\tempo} definition
+  @item  context definitions
+@end itemize
 
-Grobs can also be distinguished in their role in the horizontal spacing.
-A lot of grobs define constraints on the spacing by their sizes. For
-example, note heads, clefs, stems, and all other symbols with a fixed
-shape.  These grobs form a subtype called @code{Item}.
+Assignments in the @code{\midi} block are not allowed.
 
-Other grobs have a shape that depends on the horizontal spacing. For
-example, slur, beam, tie, etc. These grobs form a subtype called
-@code{Spanner}. All spanners have two span-points (these must be
-@code{Item}s), one on the left and one on the right. The left bound is
-also the X-reference point.
 
-Some items need special treatment for line breaking. For example, a
-clef is normally only printed at the start of a line (ie. after a line
-break).  To model this, `breakable' items (clef, key signature, bar lines,
-etc.) are copied twice. Then we have three versions of each breakable
-item: one version if there is no line break, one version that is printed
-before the line break (at the end of a system), one version that is
-printed after the line break.
 
-Whether these versions are visible and take up space, is determined by
-the outcome of the visibility-lambda. This is a function taking a
-direction (-1, 0 or 1) and returns a cons of booleans, signifying wether
-this grob should be transparent and invisible.
+@cindex context definition
 
-@node Pointer substitution, , , Grobs
+Context definitions follow precisely the same syntax as within the
+\paper block.  Translation modules for sound are called performers.
+The contexts for MIDI output are defined in @file{ly/performer-init.ly}.
 
 
-@node Molecule, , , Reference Manual
+@node MIDI instrument names
+@subsection MIDI instrument names
 
-The objective of any typesetting system is to put ink on paper in the
-right places. For LilyPond, this final stage is left to the TeX and the
-printer subsystem. For lily, the last stage in processing a score is
-outputting a description of what to put where.  This description roughly
-looks like
+@cindex instrument names
+@cindex @code{Staff.midiInstrument}
+@cindex @code{Staff.instrument}
 
-@example
-        PUT glyph AT (x,y)
-        PUT glyph AT (x,y)
-        PUT glyph AT (x,y) 
-@end example
+The MIDI instrument name is set by the @code{Staff.midiInstrument}
+property or, if that property is not set, the @code{Staff.instrument}
+property.  The instrument name should be chosen from the list in
+@ref{MIDI instruments}.
 
-you merely have to look at the tex output of lily to see this.
-Internally these instructions are encoded in Molecules:@footnote{At some
-point LilyPond also contained Atom-objects, but they have been replaced
-by Scheme expressions.}.  A molecule is an object that combines
-dimension information (how large is this glyph ?) with
-what-to-print-where.
+@refbugs
 
-Conceptually, Molecules can be constructed from Scheme code, by
-translating a Molecule and by combining two molecules. In BNF notation:
+If the selected string does not exactly match, then LilyPond uses the
+default (Grand Piano). It is not possible to select an instrument by
+number.
 
-@example
- Molecule = COMBINE Molecule Molecule
-           | TRANSLATE Offset Molecule
-          | GLYPH-DESCRIPTION
-          ;
-@end example
 
-(refer to the C++ code for more details). All visible,
-ie. non-transparent, grobs have a callback to create a Molecule. The
-name of the property is @code{molecule-callback}, and its value should
-be a Scheme function taking one argument (the grob) and returning a
-Molecule.