]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/user/changing-defaults.itely
* scm/page-layout.scm (plain-header): add printpagenumber boolean
[lilypond.git] / Documentation / user / changing-defaults.itely
index 87dbecafb67831c5d879fbdeb2d06740165b457a..38813a3e320cc0e24fa1b8c6c852af2bfcc7dc4b 100644 (file)
@@ -5,19 +5,20 @@
 
 The purpose of LilyPond's design is to provide the finest output
 quality as a default. Nevertheless, it may happen that you need to
-change that default layout.  The layout is controlled through a large
+change this default layout.  The layout is controlled through a large
 number of proverbial ``knobs and switches.''  This chapter does not
 list each and every knob. Rather, it outlines what groups of controls
-are available, and how to tune them.
+are available and explains how to lookup which knob to use for a
+certain effect.
 
-Which controls are available for tuning is described in a separate
-document, the @internalsref{Program reference} manual. This manual
+The controls available for tuning are described in a separate
+document, the @internalsref{Program reference} manual. That manual
 lists all different variables, functions and options available in
-LilyPond. It is available as a HTML document, which is available
+LilyPond. It is written as a HTML document, which is available
 @uref{http://lilypond.org/doc/Documentation/user/out-www/lilypond-internals/,on-line},
 but is also included with the LilyPond documentation package.
 
-There are X areas where the default settings may be changed:
+There are three areas where the default settings may be changed:
 
 @itemize @bullet
 @item Output: changing the appearance of individual
@@ -44,13 +45,12 @@ entering numbers, lists, strings and symbols in Scheme.
 
 @menu
 * Scheme tutorial::             
-* Context ::                    
-* Fine tuning layout::          
+* File structure::              
+* Interpretation contexts::     
 * Tuning output::               
+* Fonts::                       
 * Text markup::                 
 * Global layout::               
-* Interpretation context::      
-* Output details::              
 @end menu
 
 @node Scheme tutorial
@@ -106,11 +106,11 @@ respectively.
 
 
 In a music file, snippets of Scheme code are introduced with the hash
-mark @code{#}. So, the previous examples translated in LilyPondese are
+mark @code{#}. So, the previous examples translated in LilyPond are
 
 @example
   ##t ##f 
-  #1 #1.5
+  #1 #-1.5
   #"this is a string"
   #"this
   is
@@ -130,7 +130,7 @@ traditional 1+2.
 @end lisp
 
 The arrow @result{} shows that the result of evaluating @code{(+ 1 2)}
-is @code{3}.  Calculations may be nested: the result of a function may
+is @code{3}.  Calculations may be nested; the result of a function may
 be used for another calculation.
 
 @lisp
@@ -139,7 +139,7 @@ be used for another calculation.
    @result{} #13
 @end lisp
 
-These calculations are examples of evaluations: an expression (like
+These calculations are examples of evaluations; an expression like
 @code{(* 3 4)} is replaced by its value @code{12}. A similar thing
 happens with variables. After defining a variable  
 
@@ -186,7 +186,7 @@ Two-dimensional offsets (X and Y coordinates) as well as object sizes
 (intervals with a left and right point) are entered as @code{pairs}. A
 pair@footnote{In Scheme terminology, the pair is called @code{cons},
 and its two elements are called car and cdr respectively.}  is entered
-as @code{(first . second)}, and like symbols, they must be quoted,
+as @code{(first . second)} and, like symbols, they must be quoted,
 
 @example
   \override TextScript #'extra-offset = #'(1 . 2)  
@@ -213,8 +213,10 @@ a quote. For example,
 
 We have been using lists all along.  A calculation, like @code{(+ 1
 2)} is also a list (containing the symbol @code{+} and the numbers 1
-and 2). For entering lists, use a quote @code{'} and for
-calculations, do not use a quote. 
+and 2). Normally lists are interpreted as calculations, and the Scheme
+interpreter substitutes the outcome of the calculation. To enter a
+list, we stop evaluation. This is done by quoting the list with a
+quote @code{'} symbol.  For calculations, do not use a quote.
 
 Inside a quoted list or pair, there is no need to quote anymore.  The
 following is a pair of symbols, a list of symbols and a list of lists
@@ -226,59 +228,157 @@ respectively,
   #'((1) (2))
 @end example
 
+@node File structure
+@section File structure
 
-@node Context 
-@section Context
+The following items may be present in a @file{.ly} file at toplevel
 
-When music is printed, a lot of things notation elements must be added
-to the input, which is often bare bones.  For example, compare the
-input and output of the following example
+@itemize @bullet
+@item An output definition, such as @code{\bookpaper}, @code{\midi}
+and @code{\paper}. Such a definition at toplevel changes the default
+settings for the block entered.
+
+@item An @code{\header} block. This sets the global header block. This
+is the block containing the definitions for book-wide settings, like
+composer, title, etc. 
+
+@item An @code{\addquote} statement. See @ref{Quoting other voices}
+for more information.
+
+@item A @code{\score} block. This score will be collected with other
+toplevel scores, and combined as a single @code{\book}.
+
+This behavior can be changed by setting the variable
+@code{toplevel-score-handler} at toplevel.  The default handler is
+defined in the init file @file{scm/lily.scm}.
+
+@item A @code{\book} block formats the block
+
+This behavior can be changed by setting the variable
+@code{toplevel-book-handler} at toplevel.  The default handler is
+defined in the init file @file{scm/lily.scm}.
+
+
+@item A compound music expression, such as
+@example
+  @{ c'4 d' e'2 @}
+@end example
+
+This will add the piece in a @code{\score}, and formats it into a
+single book together with all other toplevel @code{\score}s and music
+expressions.
+This behavior can be changed by setting the variable
+@code{toplevel-music-handler} at toplevel. The default handler is
+defined in the init file @file{scm/lily.scm}.
+@end itemize
+
+The following example shows three things which may be entered at
+toplevel
+@verbatim
+   \paper  {
+     % movements are non-justified by default    
+     raggedright = ##t
+   }
+
+   \header {
+      title = "Do-re-mi"
+   }
+   
+   { c'4 d' e2 }
+@end verbatim
+
+
+At any point in a file, any of the following lexical instructions can
+be entered:
+
+@itemize @bullet
+@item @code{\version}
+@item @code{\include}
+@item @code{\encoding}
+@item @code{\renameinput}
+@end itemize 
+
+
+@node Interpretation contexts
+@section Interpretation contexts
+
+When music is printed, a lot of notation elements must be added to the
+input, which is often bare bones.  For example, compare the input and
+output of the following example:
 
-@lilypond[verbatim,relative=2]
+@lilypond[verbatim,relative=2,fragment]
   cis4 cis2. g4
 @end lilypond
 
 The input is rather sparse, but in the output, bar lines, accidentals,
-clef and time signature are added. LilyPond @emph{interprets} the
+clef, and time signature are added. LilyPond @emph{interprets} the
 input. During this step, the musical information is inspected in time
 order, similar to reading a score from left to right. While reading,
 the program remembers where measure boundaries are, and what pitches
-need explicit accidentals.
+need explicit accidentals.  This information can be presented on
+several levels.  For example, the effect of an accidental is limited
+to a single stave, while a bar line must be synchronized across the
+entire score.
+
+Within LilyPond, these rules and bits of information are grouped in
+so-called Contexts. Examples of context are @context{Voice},
+@context{Staff}, and @context{Score}.  They are hierarchical, for
+example, a @context{Staff} can contain many @context{Voice}s, and a
+@context{Score} can contain many @context{Staff} contexts.
+
+Each context has the responsibility for enforcing some notation rules,
+creating some notation objects and maintaining the associated
+properties.  So, the synchronization of bar lines is handled at
+@context{Score} context.  The @context{Voice} may introduce an
+accidentals and then the @context{Staff} context maintains the rule to
+show or suppress the accidental for the remainder of the measure.
+
+For simple scores, contexts are created implicitly, and you need not
+be aware of them. For larger pieces, such as piano music, they must be
+created explicitly to make sure that you get as many staves as you
+need, and that they are in the correct order.  For typesetting pieces
+with specialized notation, it can be useful to modify existing or
+define new contexts.
 
-This is contextual information. and it can be present on several
-levels.  For example, the effect of an accidental is limited to a
-single stave, while a bar line must be synchronized across the entire
-score.  To match this hierarchy, LilyPond's interpretation step is
-hierarchical.  There are interpretation contexts, like
-@context{Voice}, Staff and Score, and each level can maintain its own
-properties.
 
 Full description of all available contexts is in the program
 reference, see
 @ifhtml
-@internalsref{Contexts}
+@internalsref{Contexts}.
 @end ifhtml
 @ifnothtml 
 Translation @arrow{} Context.
 @end ifnothtml
 
+@c [TODO: describe propagation]
+
+
 @menu
 * Creating contexts::           
-* Changing context properties on the fly ::  
+* Changing context properties on the fly::  
 * Modifying context plug-ins::  
-* Defining context defaults ::  
-* which properties to change::  
+* Layout tunings within contexts::  
+* Changing context default settings::  
+* Defining new  contexts::      
+* Which properties to change::  
 @end menu
 
 @node Creating contexts
 @subsection Creating contexts
 
-For simple scores, the correct contexts are created automatically. For
-more complex scores, it is necessary to instantiate them by hand.
-There are three commands to do this.
+For scores with only one voice and one staff, correct contexts are
+created automatically. For more complex scores, it is necessary to
+create them by hand.  There are three commands which do this.
 
 The easiest command is @code{\new}, and it also the quickest to type.
-It is prepended to a  music expression, for example
+It is prepended to a music expression, for example
+
+@cindex @code{\new}
+@cindex new contexts
+@cindex Context, creating
 
 @example
   \new @var{type} @var{music expression}
@@ -290,18 +390,20 @@ where @var{type} is a context name (like @code{Staff} or
 interpreting @var{music expression} with that.
 
 A practical application of @code{\new} is a score with many
-staves. Each part that should be on its own staff, gets a @code{\new
-Staff}.
+staves. Each part that should be on its own staff, is preceded with 
+@code{\new Staff}.
 
-@lilypond[verbatim,relative=2,raggedright]
+@lilypond[verbatim,relative=2,raggedright,fragment]
   << \new Staff { c4 c }
      \new Staff { d4 d }
   >>
 @end lilypond
 
+@cindex @code{\context}
 
-The @code{\context} command also directs a music expression to a
-context object, but gives the context an extra name. The syntax is
+Like @code{\new}, the @code{\context} command also directs a music
+expression to a context object, but gives the context an extra name. The
+syntax is
 
 @example
   \context @var{type} = @var{id} @var{music}
@@ -309,7 +411,7 @@ context object, but gives the context an extra name. The syntax is
 
 This form will search for an existing context of type @var{type}
 called @var{id}. If that context does not exist yet, it is created.
-This is useful if the context referred to later on. For example, when
+This is useful if the context is referred to later on. For example, when
 setting lyrics the melody is in a named context
 
 @example
@@ -331,7 +433,7 @@ entered separately,
 
 @verbatim
 music = \notes { c4 c4 }
-arts = \notes  { s4-. s4-> }
+arts = \notes { s4-. s4-> }
 @end verbatim
 
 They are combined by sending both to the same @context{Voice} context,
@@ -342,16 +444,17 @@ They are combined by sending both to the same @context{Voice} context,
   >>
 @end verbatim
 @lilypond[raggedright]
-music = \notes { c4 c4 }
+music = \notes { c4   c4 }
 arts = \notes  { s4-. s4-> }
 \score {
-       \notes \relative c''  << \new Staff \context Voice = "A" \music
+  \notes \relative c''  << \new Staff \context Voice = "A" \music
      \context Voice = "A" \arts
   >>
 } 
 @end lilypond
 
-
+@cindex @code{\context}
+@cindex creating contexts
 
 The third command for creating contexts is
 @example
@@ -372,7 +475,7 @@ several levels. For example, the @code{\applyoutput} command (see
   \applyoutput #@var{function}   % apply to Voice
 @end example
 
-To have it interpreted at @context{Score} or @context{Staff} level use
+To have it interpreted at the @context{Score} or @context{Staff} level use
 these forms
 
 @example
@@ -381,19 +484,23 @@ these forms
 @end example
 
 
-@node Changing context properties on the fly 
-@subsection Changing context properties  on the fly
+@node Changing context properties on the fly
+@subsection Changing context properties on the fly
+
+@cindex properties
+@cindex @code{\set}
+@cindex changing properties
 
 Each context can have different @emph{properties}, variables contained
 in that context. They can be changed during the interpretation step.
 This is achieved by inserting the @code{\set} command in the music,
 
 @quotation
-  @code{\set }[@var{context}]@code{.}@var{prop}@code{ = #}@var{value} 
+  @code{\set } @var{context}@code{.}@var{prop}@code{ = #}@var{value} 
 @end quotation
 
 For example,
-@lilypond[verbatim,relative=2]
+@lilypond[verbatim,relative=2,fragment]
   R1*2 
   \set Score.skipBars = ##t
   R1*2
@@ -403,11 +510,11 @@ This command skips measures that have no notes. The result is that
 multi rests are condensed.  The value assigned is a Scheme object. In
 this case, it is @code{#t}, the boolean True value.
 
-If the @var{context} argument is left out, then the current
-bottom-most context (typically ChordNames, @context{Voice} or Lyrics)
-is used.  In this example,
+If the @var{context} argument is left out, then the current bottom-most
+context (typically @context{ChordNames}, @context{Voice}, or
+@context{Lyrics}) is used.  In this example,
 
-@lilypond[verbatim,relative=2]
+@lilypond[verbatim,relative=2,fragment]
   c8 c c c
   \set autoBeaming = ##f
   c8 c c c
@@ -418,19 +525,21 @@ the @var{context} argument to @code{\set} is left out, and the current
 @internalsref{Voice} is used.
 
 Contexts are hierarchical, so if a bigger context was specified, for
-example @code{Staff}, then the change would also apply to all
+example @context{Staff}, then the change would also apply to all
 @context{Voice}s in the current stave. The change is applied
 `on-the-fly', during the music, so that the setting only affects the
 second group of eighth notes.
 
+@cindex @code{\unset} 
+
 There is also an @code{\unset} command,
 @quotation
-  @code{\set }[@var{context}]@code{.}@var{prop}
+  @code{\set }@var{context}@code{.}@var{prop}
 @end quotation
 
 @noindent
-which removes the definition of @var{prop}. This command only removes
-the definition if it is set in @var{context}. In
+which removes the definition of @var{prop}. This command removes
+the definition only if it is set in @var{context}. In
 
 @example
   \set Staff.autoBeaming = ##f
@@ -439,12 +548,14 @@ the definition if it is set in @var{context}. In
 
 @noindent
 the current @context{Voice} does not have the property, and the
-definition at @context{Staff} level remains intact.
+definition at @context{Staff} level remains intact. Like @code{\set},
+the @var{context} argument does not have to be specified for a bottom
+context.
 
 Settings that should only apply to a single time-step can be entered
 easily with @code{\once}, for example in
 
-@lilypond[verbatim,relative=2]
+@lilypond[verbatim,relative=2,fragment]
   c4
   \once \set fontSize = #4.7
   c4
@@ -475,7 +586,7 @@ elements. For example, the Voice context contains a
 
 For a full a description of each plug-in, see 
 @ifhtml
-@internalsref{Engravers}
+@internalsref{Engravers}.
 @end ifhtml
 @ifnothtml
 Program reference @arrow Translation @arrow{} Engravers.
@@ -492,7 +603,7 @@ lists the engravers used for that context.
 
 It can be useful to shuffle around these plug-ins. This is done by
 starting a new context, with @code{\new} or @code{\context}, and
-modifying them like this, 
+modifying it like this, 
 
 @example
  \new @var{context} \with @{
@@ -509,7 +620,7 @@ where the @dots{} should be the name of an engraver. Here is a simple
 example which removes @code{Time_signature_engraver} and
 @code{Clef_engraver} from a @code{Staff} context,
 
-@lilypond[relative=1, verbatim]
+@lilypond[relative=1, verbatim,fragment]
 << \new Staff {
     f2 g
   }
@@ -523,20 +634,22 @@ example which removes @code{Time_signature_engraver} and
 @end lilypond
 
 In the second stave there are no time signature or clef symbols.  This
-is a rather crude method of making objects disappear, it will affect
-the entire staff. More sophisticated methods are shown in (TODO).
+is a rather crude method of making objects disappear since it will affect
+the entire staff. The spacing will be adversely influenced too. A more
+sophisticated methods of blanking objects is shown in @ref{Common
+tweaks}.
 
 The next example shows a practical application.  Bar lines and time
 signatures are normally synchronized across the score.  This is done
 by the @code{Timing_engraver}. This plug-in keeps an administration of
 time signature, location within the measure, etc. By moving the
 @code{Timing_engraver} engraver from Score to Staff context, we can
-have score where each staff has its own time signature.
+have score where each staff has its own time signature.
 
 @cindex polymetric scores
 
 
-@lilypond[relative=1,raggedright,verbatim]
+@lilypond[relative=1,raggedright,verbatim,fragment]
 \new Score \with {
   \remove "Timing_engraver"
 } <<
@@ -552,41 +665,339 @@ have score where each staff has its own time signature.
        \time 2/4
        c4 c c c c c
   }
-  >>
+>>
+@end lilypond
+
+
+@node Layout tunings within contexts
+@subsection Layout tunings within contexts
+
+Each context is responsible for creating certain types of graphical
+objects. The settings used for printing these objects are also stored by
+context. By changing these settings, the appearance of objects can be
+altered.
+The syntax for this is
+
+@example
+  \override @var{context}.@var{name}@code{ #'}@var{property} = #@var{value}
+@end example
+
+Here @var{name} is the name of a graphical object, like @code{Stem} or
+@code{NoteHead}, and @var{property} is an internal variable of the
+formatting system (`grob property' or `layout property'). The latter is a
+symbol, so it must be quoted. The subsection @ref{Constructing a
+tweak} explains what to fill in for @var{name}, @var{property}, and
+@var{value}. Here we only discuss functionality of this command.
+
+The command
+
+@verbatim
+  \override Staff.Stem #'thickness = #4.0 
+@end verbatim
+
+@noindent
+makes stems thicker (the default is 1.3, with staff line thickness as a
+unit). Since the command specifies @context{Staff} as context, it only
+applies to the current staff. Other staves will keep their normal
+appearance.  Here we see the command in action:
+
+@lilypond[verbatim,relative=2,fragment]
+  c4
+  \override Staff.Stem #'thickness = #4.0 
+  c4
+  c4
+  c4
+@end lilypond
+
+The @code{\override} command is executed during the interpreting phase,
+and changes the definition of the @code{Stem} within
+@context{Staff}. After the command all stems are thickened.
+
+Analogous to @code{\set}, the @var{context} argument may be left out,
+causing it to default to @context{Voice}, and adding @code{\once} applies
+the change during one timestep only 
+
+@lilypond[fragment,verbatim,relative=2]
+  c4
+  \once \override Stem #'thickness = #4.0 
+  c4
+  c4 
+@end lilypond
+
+The @code{\override} must be done before the object is
+started. Therefore, when altering @emph{Spanner} objects, like slurs or
+beams, the @code{\override} command must be executed at the moment when
+the object is created. In this example,
+
+
+@lilypond[fragment,verbatim,relative=2]
+  \override Slur #'thickness = #3.0
+  c8[( c
+  \override Beam #'thickness = #0.6
+  c8 c]) 
+@end lilypond
+
+@noindent
+the slur is fatter and the beam is not. This is because the command for
+@code{Beam} comes after the Beam is started. Therefore it has no effect.
+
+Analogous to @code{\unset}, the @code{\revert} command for a context
+undoes a @code{\override} command; like with @code{\unset}, it only
+affects settings that were made in the same context. In other words, the
+@code{\revert} in the next example does not do anything.
+
+@verbatim
+  \override Voice.Stem #'thickness = #4.0
+  \revert Staff.Stem #'thickness
+@end verbatim
+
+
+
+
+@seealso
+
+Internals: @internalsref{OverrideProperty}, @internalsref{RevertProperty},
+@internalsref{PropertySet}, @internalsref{All-backend-properties}, and
+@internalsref{All-layout-objects}.
+
+
+@refbugs
+
+The back-end is not very strict in type-checking object properties.
+Cyclic references in Scheme values for properties can cause hangs
+or crashes, or both.
+
+
+@node Changing context default settings
+@subsection Changing context default settings
+
+The adjustments of the previous chapters can also be entered separate
+from the music, in the @code{\paper} block,
+
+@example
+  \paper @{
+     @dots{}
+     \context @{
+        \Staff
+
+        \set fontSize = #-2
+        \override Stem #'thickness
+        \remove "Time_signature_engraver"
+      @}
+   @}
+@end example
+
+Here
+@example
+  \Staff
+@end example
+
+@noindent
+takes the existing definition @context{Staff} from the identifier
+@code{Staff}. This works analogously to other contexts.
+
+The statements
+@example
+        \set fontSize = #-2
+        \override Stem #'thickness
+        \remove "Time_signature_engraver"
+@end example
+
+@noindent
+affect all staves in the score.
+
+The @code{\set} keyword is optional within the @code{\paper} block, so
+
+@example
+  fontSize = #-2
+@end example
+
+@noindent
+will also work.
+
+
+
+@refbugs
+
+It is not possible to collect changes in a variable, and apply them to
+one @code{\context} definition by referring to that variable.
+
+
+@node Defining new  contexts
+@subsection Defining new  contexts
+
+Specific contexts, like @context{Staff} and @code{Voice}, are made of
+simple building blocks, and it is possible to compose engraver
+plug-ins in different combinations, thereby creating new types of
+contexts.
+
+The next example shows how to build a different type of
+@context{Voice} context from scratch.  It will be similar to
+@code{Voice}, but print centered slash noteheads only. It can be used
+to indicate improvisation in Jazz pieces,
+
+@lilypond[raggedright]
+  \paper { \context {
+    \name ImproVoice
+    \type "Engraver_group_engraver"
+    \consists "Note_heads_engraver"
+    \consists "Text_engraver"
+    \consists Pitch_squash_engraver
+    squashedPosition = #0
+    \override NoteHead #'style = #'slash
+    \override Stem #'transparent = ##t
+    \alias Voice
+  }
+  \context { \Staff
+    \accepts "ImproVoice"
+  }}
+  \score { \notes \relative c'' {
+    a4 d8 bes8 \new ImproVoice { c4^"ad lib" c 
+     c4 c^"undress" c_"while playing :)" c } 
+    a1 
+  }}
 @end lilypond
 
 
-@node Defining context defaults 
-@subsection Defining context defaults
+These settings are again done within a @code{\context} block inside a
+@code{\paper} block,
 
-Context properties can be set as defaults, within the
-@code{\paper} block. For example, 
+@example
+  \paper @{
+    \context @{
+      @dots{}
+    @}
+  @}
+@end example
+
+In the following discussion, the example input shown should go on the
+@dots{} in the previous fragment.
+
+First, name the context gets a name. Instead of @context{Voice} it
+will be called @context{ImproVoice},
+
+@verbatim
+  \name ImproVoice
+@end verbatim
+
+Since it is similar to the @context{Voice}, we want commands that work
+on (existing) @context{Voice}s to remain working. This is achieved by
+giving the new context an alias @context{Voice},
+
+@verbatim
+  \alias Voice
+@end verbatim
+
+The context will print notes, and instructive texts
+
+@verbatim
+  \consists Note_heads_engraver
+  \consists Text_engraver
+@end verbatim
+
+but only on the center line,
+
+@verbatim
+  \consists Pitch_squash_engraver
+  squashedPosition = #0
+@end verbatim
+
+The @internalsref{Pitch_squash_engraver} modifies note heads (created
+by @internalsref{Note_heads_engraver}) and sets their vertical
+position to the value of @code{squashedPosition}, in this case
+@code{0}, the center line.
+
+The notes look like a  slash, without a stem,
+
+@verbatim
+    \override NoteHead #'style = #'slash
+    \override Stem #'transparent = ##t
+@end verbatim
+
+
+All these plug-ins have to cooperate, and this is achieved with a
+special plug-in, which must be marked with the keyword @code{\type}.
+This should always be @internalsref{Engraver_group_engraver},
+
+@example
+ \type "Engraver_group_engraver"
+@end example
+
+Putting together, we get
 
 @verbatim
-\paper {
   \context {
-    \ScoreContext
-    skipBars = ##t
+    \name ImproVoice
+    \type "Engraver_group_engraver"
+    \consists "Note_heads_engraver"
+    \consists "Text_script_engraver"
+    \consists Pitch_squash_engraver
+    squashedPosition = #0
+    \override NoteHead #'style = #'slash
+    \override Stem #'transparent = ##t
+    \alias Voice
   }
-}
 @end verbatim
 
-@noindent
-will set skipBars default 
+Contexts form hierarchies. We want to hang the @context{ImproVoice}
+under @context{Staff}, just like normal @code{Voice}s. Therefore, we
+modify the @code{Staff} definition with the @code{\accepts}
+command,@footnote{The opposite of @code{\accepts} is @code{\denies},
+which is sometimes when reusing existing context definitions. }
+
+
+
+@verbatim
+  \context {
+    \Staff
+    \accepts ImproVoice    
+  }
+@end verbatim 
+
+Putting both into a @code{\paper} block, like
+
+@example
+  \paper @{
+    \context @{
+      \name ImproVoice
+      @dots{}
+    @}
+  \context @{
+    \Staff
+    \accepts "ImproVoice"
+  @}
+@}
+@end example
 
-When This    score-wide
+Then the output at the start of this subsection can be entered as
 
+@verbatim
+\score {
+  \notes \relative c'' {
+     a4 d8 bes8
+     \new ImproVoice {
+       c4^"ad lib" c 
+       c4 c^"undress"
+       c c_"while playing :)"
+     }
+     a1 
+  }
+}
+@end verbatim
+  
 
-@node which properties to change
-@subsection which properties to change
+    
+@node Which properties to change
+@subsection Which properties to change
 
 
 There are many different properties.  Not all of them are listed in
 this manual. However, the program reference lists them all in the
-section @internalsref{Context-properties}, and most properties are
-demonstrated in one of the
+section @internalsref{Tunable-context-properties}, and most properties
+are demonstrated in one of the
 @ifhtml
-@uref{../../../input/test/out-www/collated-files.html,tips-and-tricks}
+@uref{../../../../input/test/out-www/collated-files.html,tips-and-tricks}
 @end ifhtml
 @ifnothtml
 tips-and-tricks
@@ -594,47 +1005,65 @@ tips-and-tricks
 examples.
 
 
-@node Fine tuning layout
-@section Fine tuning layout
+@node Tuning output
+@section Tuning output
 
-Sometimes it is necessary to change music layout by hand.  When music
-is formatted, layout objects are created for each symbol.  For
-example, every clef and every note head is represented by a layout
-object.  These layout objects also carry variables, which we call
-@emph{layout properties}. By changing these variables from their
-values, we can alter the look of a formatted score:
+In the previous section, we have already touched on a command that
+changes layout details, the @code{\override} command. In this section,
+we will look at in more detail how to use the command in practice.
+First, we will give a a few versatile commands, which are sufficient
+for many situations. The next section will discuss general use of
+@code{\override}.
 
-@lilypond[verbatim,relative]
-  c4
-  \override Stem #'thickness = #3.0
-  c4 c4 c4 
-@end lilypond
+@ignore
+There are situations where default layout decisions are not
+sufficient.  In this section we discuss ways to override these
+defaults.
 
-@noindent
-In the example shown here, the layout property @code{thickness} (a
-symbol) is set to 3 in the @code{Stem} layout objects of the current
-As a result, the notes following @code{\override} have thicker
-stems.
+Formatting is internally done by manipulating so called objects
+(graphic objects). Each object carries with it a set of properties
+(object or layout properties) specific to the object.  For example, a
+stem object has properties that specify its direction, length, and
+thickness.
 
-For the most part, a manual override is needed only on a case by
-case basis and not for all subsequent instances of the altered
-property. To accomplish this, simply prefix @code{\once} to the
-@code{\override} statement and the override will apply only once,
-immediately reverting to its default setting, i.e.
+The most direct way of tuning the output is to alter the values of
+these properties. There are two ways of doing that: First, you can
+temporarily change the definition of one type of object, thus
+affecting a whole set of objects.  Second, you can select one specific
+object, and set a layout property in that object.
 
+Do not confuse layout properties with translation
+properties. Translation properties always use a mixed caps style
+naming, and are manipulated using @code{\set} and @code{\unset}: 
 @example
- \once \override Stem #'thickness = #3.0
+  \set Context.propertyName = @var{value}
 @end example
 
-@lilypond[relative]
-  c4
-  \once \override Stem #'thickness = #3.0
-  c4 c4 c4 
-@end lilypond
+Layout properties are use Scheme style variable naming, i.e.  lower
+case words separated with dashes. They are symbols, and should always
+be quoted using @code{#'}.  For example, this could be an imaginary
+layout property name:
+@example
+  #'layout-property-name
+@end example
+
+@end ignore
+
+@menu
+* Common tweaks::               
+* Constructing a tweak::        
+* Navigating the program reference::  
+* Layout interfaces::           
+* Determining the grob property::  
+@end menu
+
+
+
+@node Common tweaks
+@subsection Common tweaks
 
-@noindent
 Some overrides are so common that predefined commands are provided as
-a short cut.  For example, @code{\slurUp} and @code{\stemDown}. These
+a short-cut, for example, @code{\slurUp} and @code{\stemDown}. These
 commands are described in
 @ifhtml
 the
@@ -645,7 +1074,7 @@ respectively.
 The exact tuning possibilities for each type of layout object are
 documented in the program reference of the respective
 object. However, many layout objects share properties, which can be
-used to apply generic tweaks.  We mention a couple of these:
+used to apply generic tweaks.  We mention a few of these:
 
 @itemize @bullet
 @item The @code{extra-offset} property, which
@@ -663,7 +1092,7 @@ the left, and 1.8 staff space downwards:
 
 @cindex setting object properties
 
-@lilypond[relative=1,verbatim]
+@lilypond[fragment,relative=1,verbatim]
 \stemUp
 f-5
 \once \override Fingering
@@ -679,16 +1108,27 @@ collisions, and slurs, and ties and beams can be attached to it.
 
 @cindex transparent objects
 @cindex removing objects
+@cindex hiding objects
 @cindex invisible objects
 The following example demonstrates how to connect different voices
 using ties. Normally, ties only connect two notes in the same
-voice. By introducing a tie in a different voice, and blanking a stem
-in that voice, the tie appears to cross voices:
+voice. By introducing a tie in a different voice,
 
-@lilypond[fragment,relative=1,verbatim]
-  c4 << {
+@lilypond[fragment,relative=2]
+  << {
+      b8~ b8\noBeam
+  } \\ {
+       b[ g8]
+  } >>
+@end lilypond
+
+@noindent
+and blanking a stem in that voice, the tie appears to cross voices:
+
+@lilypond[fragment,relative=2,verbatim]
+  << {
       \once \override Stem #'transparent = ##t
-      b8~ b8
+      b8~ b8\noBeam
   } \\ {
        b[ g8]
   } >>
@@ -702,7 +1142,7 @@ symbols that are printed above or below notes. We only give an
 example; a more elaborate explanation is in @ref{Constructing a
 tweak}:
 
-@lilypond[relative=1,verbatim]
+@lilypond[fragment,relative=1,verbatim]
   c2\fermata
   \override Script #'padding = #3
   b2\fermata
@@ -710,235 +1150,244 @@ tweak}:
 
 @end itemize
 
-More specific overrides are also possible.  The notation manual
-discusses in depth how to figure out these statements for yourself, in
-@ref{Tuning output}.
-
+More specific overrides are also possible.  The next section
+discusses in depth how to figure out these statements for yourself.
 
 
+@node Constructing a tweak
+@subsection Constructing a tweak
 
-@node Tuning output
-@section Tuning output
+The general procedure of changing output, that is, entering
+a command like
 
-There are situations where default layout decisions are not
-sufficient.  In this section we discuss ways to override these
-defaults.
+@example
+        \override Voice.Stem #'thickness = #3.0
+@end example
 
-Formatting is internally done by manipulating so called objects
-(graphic objects). Each object carries with it a set of properties
-(object or layout properties) specific to that object.  For example, a
-stem object has properties that specify its direction, length and
-thickness.
+@noindent
+means that we have to determine these bits of information:
 
-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 one type of object, thus
-affecting a whole set of objects.  Second, you can select one specific
-object, and set a layout property in that object.
+@itemize
+@item the context: here @context{Voice}.
+@item the layout object: here @code{Stem}.
+@item the layout property: here @code{thickness}
+@item a sensible value: here @code{3.0}
+@end itemize  
 
-Do not confuse layout properties with translation
-properties. Translation properties always use a mixed caps style
-naming, and are manipulated using @code{\set} and @code{\unset}: 
-@example
-  \set Context.propertyName = @var{value}
-@end example
-
-Layout properties are use Scheme style variable naming, i.e.  lower
-case words separated with dashes. They are symbols, and should always
-be quoted using @code{#'}.  For example, this could be an imaginary
-layout property name:
-@example
-  #'layout-property-name
-@end example
-
-
-@menu
-* Tuning objects::              
-* Constructing a tweak::        
-* Selecting font sizes::        
-* Font selection::              
-@end menu
 
+@cindex internal documentation
+@cindex finding graphical objects
+@cindex graphical object descriptions 
+@cindex tweaking
+@cindex @code{\override}
+@cindex @code{\set}
+@cindex internal documentation
 
+We demonstrate how to glean this information from the notation manual
+and the program reference.
 
-@node Tuning objects
-@subsection Tuning objects 
+The program reference is a set of HTML pages, which is part of the
+documentation package. On Unix systems, it is typically in
+@file{/usr/share/doc/lilypond}. If you have them, it is best to
+bookmark them in your webbrowser, because you will need them.  They
+are also available on the web: go to the
+@uref{http://lilypond.org,LilyPond website}, click ``Documentation'',
+select the correct version, and then click ``Program reference.''
 
-@cindex object description
+If you have them, use the local HTML files.  They will load faster,
+and they are exactly matched to LilyPond version installed.
 
-The definition of an object is a list of default object
-properties. For example, the definition of the Stem object (available
-in @file{scm/define-grobs.scm}), includes the following definitions
-for @internalsref{Stem}:
+@node Navigating the program reference
+@subsection Navigating the program reference
 
-@example
-        (thickness . 1.3)
-       (beamed-lengths . (3.5 3.5 3.5 4.5 5.0))
-        (Y-extent-callback . ,Stem::height)
-        @var{...}
-@end example
+Suppose we want to move the fingering indication in the fragment
+below:
 
+@lilypond[fragment,relative=2,verbatim]
+c-2
+\stemUp
+f
+@end lilypond
 
-Adding variables on top of this existing definition overrides the
-system default, and alters the resulting appearance of the layout
-object.
+If you visit the documentation of @code{Fingering} (in @ref{Fingering
+instructions}), you will notice that there is written:
 
+@quotation
+@seealso
 
+Program reference: @internalsref{FingerEvent} and @internalsref{Fingering}.
 
-Changing a variable for only one object is commonly achieved with
-@code{\once}:
+@end quotation
 
-@example
-\once \override @var{context}.@var{objectname}
-    @var{symbol} = @var{value}
-@end example
-Here @var{symbol} is a Scheme expression of symbol type, @var{context}
-and @var{objectname} is a string and @var{value} is a Scheme expression.
-This command applies a setting only during one moment in the score.
+This  fragments points to two parts of the program reference: a page
+on @code{FingerEvent} and on @code{Fingering}.
 
-In the following example, only one @internalsref{Stem} object is
-changed from its original setting:
+The page on  @code{FingerEvent} describes the properties of the  music
+expression for the input @code{-2}. The page contains many links
+forward.  For example, it says
 
-@lilypond[verbatim,fragment,relative=1]
-  c4 
-  \once \override Voice.Stem #'thickness = #4
-  c4
-  c4
-@end lilypond
-@cindex @code{\once}
+@quotation
+  Accepted by: @internalsref{Fingering_engraver},
+@end quotation 
 
-For changing more objects, the same command, without @code{\once} can
-be used:
-@example
-\override @var{context}.@var{objectname}   @var{symbol} = @var{value}
-@end example
-This command adds @code{@var{symbol} = @var{value}} to the definition
-of @var{objectname} in the context @var{context}, and this definition
-stays in place until it is removed.
+@noindent
+That link brings us to the documentation for the Engraver, the
+plug-in, which says
 
-An existing definition may be removed by the following command:
-@c
-@example
-\property @var{context}.@var{objectname} \revert @var{symbol}
-@end example
-@c
+@quotation
+  This engraver creates the following layout objects: @internalsref{Fingering}.
+@end quotation
 
-Some examples: 
-@lilypond[verbatim]
-c'4 \override Stem   #'thickness = #4.0
-c'4
-c'4 \revert Stem #'thickness
-c'4
-@end lilypond
+In other words, once the @code{FingerEvent}s are interpreted, the
+@code{Fingering_engraver} plug-in will process them.
+The @code{Fingering_engraver} is also listed to create
+@internalsref{Fingering} objects,
 
 
+  Lo and behold, that is also the
+second bit of information listed under @b{See also} in the Notation
+manual. By clicking around in the program reference, we can follow the
+flow of information within the program, either forward (like we did
+here), or backwards, following links like this:
 
-Reverting a setting which was not set in the first place has no
-effect.
+@itemize @bullet
 
+@item @internalsref{Fingering}:
+  @internalsref{Fingering} objects are created by:
+  @b{@internalsref{Fingering_engraver}}
 
-@seealso
+@item @internalsref{Fingering_engraver}:
+Music types accepted: @b{@internalsref{fingering-event}}
+@item @internalsref{fingering-event}:
+Music event type @code{fingering-event} is in Music objects of type
+@b{@internalsref{FingerEvent}}
+@end itemize
 
-Internals: @internalsref{OverrideProperty}, @internalsref{RevertProperty},
-@internalsref{PropertySet}, @internalsref{All-backend-properties}, and
-@internalsref{All-layout-objects}.
+This path goes against the flow of information in the program: it
+starts from the output, and ends at the input event.
 
+The program reference can also be browsed like a normal document.  It
+contains a chapter on
+@ifhtml
+@internalsref{Music-definitions},
+@end ifhtml
+@ifnothtml
+Music definitions
+@end ifnothtml
+on @internalsref{Translation}, and the @internalsref{Backend}. Every
+chapter lists all the definitions used, and all properties that may be
+tuned.
 
-@refbugs
+@node Layout interfaces
+@subsection Layout interfaces
 
-The back-end is not very strict in type-checking object properties.
-Cyclic references in Scheme values for properties can cause hangs
-and/or crashes.
+@internalsref{Fingering} is a layout object. Such an object is a
+symbol within the score. It has properties, which store numbers (like
+thicknesses and directions), but also pointers to related objects.
+A layout object is also called @emph{grob},
+@cindex grob
+which is short for Graphical Object.
 
 
-@node Constructing a tweak
-@subsection Constructing a tweak
+The page for @code{Fingering} lists the definitions for the
+@code{Fingering} object. For example, the page says
 
+@quotation
+  @code{padding} (dimension, in staff space):
+  
+  @code{0.6}
+@end quotation
 
-@cindex internal documentation
-@cindex finding graphical objects
-@cindex graphical object descriptions 
-@cindex tweaking
-@cindex @code{\override}
-@cindex @code{\set}
-@cindex internal documentation
+which means that the number will be kept at a distance of at least 0.6
+of the note head.
 
 
+Each layout object may have several functions as a notational or
+typographical element. For example, the Fingering object
+has the following aspects
 
-Three pieces of information are required to use @code{\override} and
-@code{\set}: the name of the layout object, the context and the name
-of the property.  We demonstrate how to glean this information from
-the notation manual and the program reference.
+@itemize @bullet
+@item Its size is independent of the horizontal spacing, unlike slurs or beams
 
-The generated documentation is a set of HTML pages which should be
-included if you installed a binary distribution, typically in
-@file{/usr/share/doc/lilypond}.  They are also available on the web:
-go to the @uref{http://lilypond.org,LilyPond website}, click
-``Documentation'', select the correct version, and then click
-``Program reference.'' It is advisable to bookmark the local HTML
-files. They will load faster than the ones on the web and matches the
-version of LilyPond you are using.
+@item It is a piece of text. Granted, it's usually  a very short text.
 
+@item That piece of text is typeset with a font, unlike slurs or beams.
+@item Horizontally, the center of the symbol should be aligned to the
+center of the notehead
+@item Vertically, the symbol is placed next to the note and the staff.
 
-@c  [TODO: revise for new site.]
+@item The
+ vertical position is also coordinated with other super and subscript
+symbols
+@end itemize
 
-Suppose we want to move the fingering indication in the fragment
-below:
+Each of these aspects is captured in a so-called @emph{interface},
+which are listed on the @internalsref{Fingering} page at the bottom
 
-@lilypond[relative=2,verbatim]
-c-2
-\stemUp
-f
-@end lilypond
+@quotation
+This object supports the following interfaces:
+@internalsref{item-interface},
+@internalsref{self-alignment-interface},
+@internalsref{side-position-interface}, @internalsref{text-interface},
+@internalsref{text-script-interface}, @internalsref{font-interface},
+@internalsref{finger-interface}, and @internalsref{grob-interface}.
+@end quotation
 
-If you visit the documentation of @code{Fingering} (in @ref{Fingering
-instructions}), you will notice that there is written:
+Clicking any of the links will take you to the page of the respective
+object interface.  Each interface has a number of properties.  Some of
+them are not user-serviceable (``Internal properties''), but others
+are.
 
-@quotation
-@seealso
+We have been talking of `the' @code{Fingering} object, but actually it
+does not amount to much. The initialization file
+@file{scm/define-grobs.scm} shows the soul of the `object',
 
-Internals: @internalsref{FingerEvent} and @internalsref{Fingering}.
+@verbatim
+   (Fingering
+     . (
+       (print-function . ,Text_item::print)
+       (padding . 0.6)
+       (staff-padding . 0.6)
+       (self-alignment-X . 0)
+       (self-alignment-Y . 0)
+       (script-priority . 100)
+       (font-encoding . number)
+       (font-size . -5)
+       (meta . ((interfaces . (finger-interface font-interface
+               text-script-interface text-interface
+               side-position-interface self-alignment-interface
+               item-interface))))
+  ))
+@end verbatim
 
-@end quotation
+as you can see, @code{Fingering} is nothing more than a bunch of
+variable settings, and the webpage is directly generated from this
+definition.
 
-@separate
+@node Determining the grob property
+@subsection Determining the grob property
 
-@noindent
-In other words, the fingerings once entered, are internally stored as
-@code{FingerEvent} music objects. When printed, a @code{Fingering}
-layout object is created for every @code{FingerEvent}.
 
-The Fingering object has a number of different functions, and each of
-those is captured in an interface. The interfaces are listed under
-@internalsref{Fingering} in the program reference.
+Recall that we wanted to change the position of the @b{2} in 
 
+@lilypond[fragment,relative=2,verbatim]
+c-2
+\stemUp
+f
+@end lilypond
 
+Since the @b{2} is vertically positioned next to its note, we have to
+meddle with the interface associated with this positioning. This is
+done using @code{side-position-interface}. The page for this interface 
+says
 
-The @code{Fingering} object has a fixed size
-(@internalsref{item-interface}), the symbol is a piece of text
-(@internalsref{text-interface}), whose font can be set
-(@internalsref{font-interface}).  It is centered horizontally
-(@internalsref{self-alignment-interface}), it is placed vertically
-next to other objects (@internalsref{side-position-interface}), and
-its placement is coordinated with other scripts
-(@internalsref{text-script-interface}).  It also has the standard
-@internalsref{grob-interface} (grob stands for Graphical object)
-@cindex grob
-@cindex graphical object
-@cindex layout object
-@cindex object, layout 
-with all the variables that come with
-it.  Finally, it denotes a fingering instruction, so it has
-@internalsref{finger-interface}.
-
-For the vertical placement, we have to look under
-@code{side-position-interface}:
 @quotation
 @code{side-position-interface}
 
   Position a victim object (this one) next to other objects (the
-  support).  In this case, the property @code{direction} signifies where to put the
+  support).  The property @code{direction} signifies where to put the
   victim object relative to the support (left or right, up or down?)
 @end quotation
 
@@ -950,8 +1399,8 @@ below this description, the variable @code{padding} is described as
 @item padding
  (dimension, in staff space)
 
  add this much extra space between objects that are next to each
-other. Default value: @code{0.6}
+ add this much extra space between objects that are next to each
+  other. 
 @end table
 @end quotation
 
@@ -959,7 +1408,7 @@ By increasing the value of @code{padding}, we can move away the
 fingering.  The following command inserts 3 staff spaces of white
 between the note and the fingering:
 @example
-\once \override Fingering   #'padding = #3
+\once \override Fingering #'padding = #3
 @end example
 
 Inserting this command before the Fingering object is created,
@@ -973,35 +1422,25 @@ c-2
 f
 @end lilypond
 
-The context name @code{Voice} in the example above can be determined
-as follows. In the documentation for @internalsref{Fingering}, it says
+
+In this case, the context for this tweak is @context{Voice}, which
+does not have to be specified for @code{\override}.  This fact can
+also be deduced from the program reference, for the page for the
+@internalsref{Fingering_engraver} plug-in says
+
 @quotation
-Fingering grobs are created by: @internalsref{Fingering_engraver} @c
+  Fingering_engraver is part of contexts: @dots{} @b{@internalsref{Voice}}
 @end quotation
 
-Clicking @code{Fingering_engraver} shows the documentation of
-the module responsible for interpreting the fingering instructions and
-translating them to a @code{Fingering} object.  Such a module is called
-an @emph{engraver}.  The documentation of the @code{Fingering_engraver}
-says
-@example
-Fingering_engraver is part of contexts: Voice 
-@end example
-so tuning the settings for Fingering should be done with
-@example
-  \override Fingering @dots{}
-@end example
 
-Of course, the tweak may also done in a larger context than
-@code{Voice}, for example, @internalsref{Staff} or
-@internalsref{Score}.
+@node Fonts
+@section Fonts
 
-@seealso
+@menu
+* Selecting font sizes::        
+* Font selection::              
+@end menu
 
-Internals: the program reference also contains alphabetical lists of
-@internalsref{Contexts}, @internalsref{All-layout-objects} and
-@internalsref{Music-expressions}, so you can also find which objects
-to tweak by browsing the internals document.
 
 
 @node Selecting font sizes
@@ -1041,11 +1480,12 @@ One of the uses of @code{fontSize} is to get smaller symbols for cue
 notes. An elaborate example of those is in
 @inputfileref{input/test,cue-notes.ly}.
 
+@cindex cue notes
 @cindex @code{font-style}
 
 @refcommands
 
-The following commands set @code{fontSize} for the current voice.
+The following commands set @code{fontSize} for the current voice:
 
 @cindex @code{\tiny}
 @code{\tiny}, 
@@ -1081,12 +1521,12 @@ font.
 
 @item @code{font-family}
  is a symbol indicating the general class of the typeface.  Supported are
-@code{roman} (Computer Modern), @code{sans} and @code{typewriter}
+@code{roman} (Computer Modern), @code{sans}, and @code{typewriter}.
   
 @item @code{font-shape}
   is 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}.
+@code{italic}, @code{caps}, and @code{upright}.
 
 @item @code{font-series}
 is a  symbol indicating the series of the font. There are typically several
@@ -1155,8 +1595,8 @@ similar to lyrics: simply enter them, surrounded by spaces:
 @cindex font switching
 
 The markup in the example demonstrates font switching commands.  The
-command @code{\bold} and @code{\italic} only apply to the first
-following word; enclose a set of texts with braces to apply a command
+command @code{\bold} and @code{\italic} apply to the first following 
+word only; enclose a set of texts with braces to apply a command
 to more words:
 @example
   \markup @{ \bold @{ hi there @} @}
@@ -1173,9 +1613,9 @@ For clarity, you can also do this for single arguments, e.g.
 
 
 In markup mode you can compose expressions, similar to mathematical
-expressions, XML documents and music expressions.  The braces group
+expressions, XML documents, and music expressions.  The braces group
 notes into horizontal lines. Other types of lists also exist: you can
-stack expressions grouped with @code{<}, and @code{>} vertically with
+stack expressions grouped with @code{<} and @code{>} vertically with
 the command @code{\column}. Similarly, @code{\center-align} aligns
 texts by their center lines:
 
@@ -1246,31 +1686,125 @@ for formatting.
 @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
+line breaks, and the spacing. These all influence each other. The
 choice of spacing determines how densely each system of music is set,
-which influences where line breaks breaks are chosen, and thus
+which influences where line breaks are chosen, and thus
 ultimately how many pages a piece of music takes. This section
 explains how to tune the algorithm for spacing.
 
 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{}, each page is filled with systems, and page breaks
-are chosen whenever the page gets full.
+best results --- a layout that has uniform density and requires as
+little stretching or cramping as possible --- is chosen.
+
+After spacing and linebreaking, the systems are distributed across
+pages, taking into account the size of the page, and the size of the
+titles.
 
 
 
 @menu
+* Setting global staff size::   
 * Vertical spacing::            
 * Horizontal spacing::          
-* Font Size::                   
 * Line breaking::               
+* Line length and line breaking::  
+* Titling::                     
+* Page breaking::               
+* Paper size::                  
 * Page layout::                 
 @end menu
 
 
+@node Setting global staff size
+@subsection Setting global staff size
+
+@cindex font size, setting
+@cindex staff size, setting
+@cindex @code{paper} file
+
+The Feta font provides musical symbols at eight  different
+sizes. Each font is tuned for a different staff size: at a smaller size
+the font becomes heavier, to match the relatively heavier staff lines.
+The recommended font sizes are listed in the following table:
+
+@multitable @columnfractions  .25 .25 .25 .25
+
+@item @b{font name}
+@tab @b{staff height (pt)}
+@tab @b{staff height (mm)}
+@tab @b{use}
+
+@item feta11
+@tab 11.22
+@tab 3.9 
+@tab pocket scores
+
+@item feta13
+@tab 12.60
+@tab 4.4
+@tab
+
+@item feta14
+@tab 14.14
+@tab 5.0
+@tab 
+
+@item feta16
+@tab 15.87
+@tab 5.6
+@tab 
+
+@item feta18
+@tab 17.82
+@tab 6.3
+@tab song books
+
+@item feta20
+@tab 17.82
+@tab 7.0
+@tab standard parts 
+
+@item feta23
+@tab 22.45 
+@tab 7.9
+@tab 
+
+@item feta26
+@tab 25.2 
+@tab 8.9
+@tab
+@c modern rental material  ?
+
+@end multitable
+
+These fonts are available in any sizes. The context property
+@code{fontSize} and the layout property @code{staff-space} (in
+@internalsref{StaffSymbol}) can be used to tune size for individual
+staves. The size of individual staves are relative to the global size,
+which can be set   in the following manner:
+
+@example
+  #(set-global-staff-size 14)
+@end example
+
+This sets the global default size to 14pt staff height, and scales all
+fonts accordingly.
+
+@seealso
+
+This manual: @ref{Selecting font sizes}.
+
+
+
+@menu
+* Vertical spacing::            
+* Horizontal spacing::          
+* Line breaking::               
+* Page layout::                 
+@end menu
+
 @node Vertical spacing
 @subsection Vertical spacing
 
@@ -1311,7 +1845,7 @@ override this, use a @code{\context} block as follows:
 @example
   \paper @{
     \context @{
-      \PianoStaffContext
+      \PianoStaff
       \override VerticalAlignment #'forced-distance = #9
     @}
     @dots{}
@@ -1340,7 +1874,7 @@ The longer the duration, the more space it gets: doubling a
 duration adds a fixed amount (this amount is controlled by
 @code{spacing-increment}) of space to the note.
 
-For example, the following piece contains lots of half, quarter and
+For example, the following piece contains lots of half, quarter, and
 8th notes, the eighth note is followed by 1 note head width (NHW). 
 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
@@ -1385,7 +1919,7 @@ through @code{base-shortest-duration}.
 @cindex @code{stem-spacing-correction}
 @cindex @code{spacing}
 
-In the introduction it was explained that stem directions influence
+In the Introduction it was explained that stem directions influence
 spacing. This is controlled with @code{stem-spacing-correction}
 property in @internalsref{NoteSpacing}, which are generated for every
 @internalsref{Voice} context. The @code{StaffSpacing} object
@@ -1398,10 +1932,8 @@ exaggerated corrections:
     \score { \notes {
       c'4 e''4 e'4 b'4 |
       b'4 e''4 b'4 e''4|
-      \override Staff.NoteSpacing   #'stem-spacing-correction
-   = #1.5
-      \override Staff.StaffSpacing   #'stem-spacing-correction
-   = #1.5
+      \override Staff.NoteSpacing #'stem-spacing-correction = #1.5
+      \override Staff.StaffSpacing #'stem-spacing-correction = #1.5
       c'4 e''4 e'4 b'4 |
       b'4 e''4 b'4 e''4|      
     }
@@ -1415,8 +1947,8 @@ from the @code{\paper} block, since the @internalsref{SpacingSpanner} is
 created before any property commands are interpreted.
 @example
 \paper @{ \context  @{
-  \ScoreContext
-  SpacingSpanner \override #'spacing-increment = #3.0
+  \Score
+  \override SpacingSpanner #'spacing-increment = #3.0
 @} @}
 @end example
 
@@ -1434,89 +1966,19 @@ changes its character (measured in durations) halfway during the
 score, the part containing the longer durations will be spaced too
 widely.
 
-There is no convenient mechanism to manually override spacing.
-
-
-
-@node Font Size
-@subsection Font size
-
-@cindex font size, setting
-@cindex staff size, setting
-@cindex @code{paper} file
-
-The Feta font provides musical symbols at eight  different
-sizes. Each font is tuned for a different staff size: at smaller sizes
-the font gets heavier, to match the relatively heavier staff lines.
-The recommended font sizes are listed in the following table:
-
-@multitable @columnfractions  .25 .25 .25 .25
-
-@item @b{font name}
-@tab @b{staff height (pt)}
-@tab @b{staff height (mm)}
-@tab @b{use}
-
-@item feta11
-@tab 11.22
-@tab 3.9 
-@tab pocket scores
-
-@item feta13
-@tab 12.60
-@tab 4.4
-@tab
-
-@item feta14
-@tab 14.14
-@tab 5.0
-@tab 
-
-@item feta16
-@tab 15.87
-@tab 5.6
-@tab 
-
-@item feta18
-@tab 17.82
-@tab 6.3
-@tab song books
-
-@item feta20
-@tab 17.82
-@tab 7.0
-@tab standard parts 
-
-@item feta23
-@tab 22.45 
-@tab 7.9
-@tab 
-
-@item feta20
-@tab 25.2 
-@tab 8.9
-@tab
-@c modern rental material  ?
-
-@end multitable
-
-These fonts are available in any sizes. The context property
-@code{fontSize} and the layout property @code{staff-space} (in
-@internalsref{StaffSymbol}) can be used to tune size for individual
-staves. The size of individual staves are relative to the global size,
-which can be set   in the following manner:
-
+There is no convenient mechanism to manually override spacing.  The
+following work-around may be used to insert extra space into a score.
 @example
-  #(set-global-staff-size 14)
+ \once \override Score.SeparationItem #'padding = #1
 @end example
 
-This sets the global default size to 14pt staff height, and scales all
-fonts accordingly.
+No work-around exists for decreasing the amount of space.
 
-@seealso
-
-This manual: @ref{Selecting font sizes}.
 
+@menu
+* Line breaking::               
+* Page layout::                 
+@end menu
 
 @node Line breaking
 @subsection Line breaking
@@ -1556,7 +2018,7 @@ This makes the following 28 measures (assuming 4/4 time) be broken every
 
 @refcommands
 
-@code{\break}, @code{\noBreak}
+@code{\break}, and @code{\noBreak}.
 @cindex @code{\break}
 @cindex @code{\noBreak}
 
@@ -1564,9 +2026,8 @@ This makes the following 28 measures (assuming 4/4 time) be broken every
 
 Internals: @internalsref{BreakEvent}.
 
-
-@node Page layout
-@subsection Page layout
+@node Line length and line breaking
+@subsection Line length and line breaking
 
 @cindex page breaks
 @cindex breaking pages
@@ -1587,401 +2048,209 @@ spacing is.
 @cindex page layout
 @cindex vertical spacing
 
-The page layout process happens outside the LilyPond formatting
-engine: variables controlling page layout are passed to the output,
-and are further interpreted by @code{lilypond} wrapper program. It
-responds to the following variables in the @code{\paper} block.  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,
-@c fixme: this should only be done if lastpagefill= #t 
-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.  The @command{lilypond-book} command ignores
-@code{lastpagefill}.  See @ref{lilypond-book manual} 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.  This
-is done by setting the @code{between-systems-strings} on the
-@internalsref{NonMusicalPaperColumn} where the system is broken.
-An example is shown in @inputfileref{input/regression,between-systems.ly}.
-The predefined command @code{\newpage} also does this.
-
-@cindex paper size
-@cindex page size
-@cindex @code{papersize}
-
-To change the paper size, use the following Scheme code:
-@example
-        \paper@{
-           #(set-paper-size "a4")
-        @}
-@end example
-
-
-@refcommands
-
-@cindex @code{\newpage}
-@code{\newpage}. 
-
-
-@seealso
-
-In this manual: @ref{Invoking lilypond}.
-
-Examples: @inputfileref{input/regression,between-systems.ly}.
-
-Internals: @internalsref{NonMusicalPaperColumn}.
-
-@refbugs
-
-LilyPond has no concept of page layout, which makes it difficult to
-reliably choose page breaks in longer pieces.
-
-
-@node Interpretation context
-@section Interpretation context
-
-@menu
-* Context properties::          
-* Defining contexts::           
-* Changing contexts locally::   
-* Engravers and performers::    
-* Defining new contexts::       
-@end menu
-
-
-Interpretation contexts are objects that only exist during program
-run.  During the interpretation phase (when @code{interpreting music}
-is printed on the standard output), the music expression in a
-@code{\score} block is interpreted in time order, the same order in
-which we hear and play the music.  During this phase, the interpretation
-context holds the state for the current point within the music, for
-example:
-@itemize @bullet
-@item What notes are playing at this point?
-
-@item What symbols will be printed at this point?
-
-@item What is the current key signature, time signature, point within
-the measure, etc.?
-@end itemize
-
-Contexts are grouped hierarchically: A @internalsref{Voice} context is
-contained in a @internalsref{Staff} context (because a staff can contain
-multiple voices at any point), a @internalsref{Staff} context is contained in
-@internalsref{Score}, @internalsref{StaffGroup}, or
-@internalsref{ChoirStaff} context.
-
-Contexts associated with sheet music output are called @emph{notation
-contexts}, those for sound output are called @emph{performance
-contexts}.  The default definitions of the standard notation and
-performance contexts can be found in @file{ly/engraver-init.ly} and
-@file{ly/performer-init.ly}, respectively.
-
-
-
-@node Context properties
-@subsection Context properties
-
-Contexts have properties.  These properties are set from the @file{.ly}
-file using the following expression:
-@cindex context properties
-@cindex properties, context
-
-@example
-\set @var{contextname}.@var{propname} = @var{value}
-@end example
-
-@noindent
-Sets the @var{propname} property of the context @var{contextname} to
-the specified Scheme expression @var{value}.  Both @var{propname} and
-@var{contextname} are strings, which can often be written unquoted.
-
-@cindex inheriting
-Properties that are set in one context are inherited by all of the
-contained contexts.  This means that a property valid for the
-@internalsref{Voice} context can be set in the @internalsref{Score} context
-(for example) and thus take effect in all @internalsref{Voice} contexts.
-
-Properties can be unset using the following statement.
-@example
-\unset @var{contextname}.@var{propname} 
-@end example
-
-@cindex properties, unsetting
-@cindex @code{\unset}
-
-@noindent
-This removes the definition of @var{propname} in @var{contextname}.  If
-@var{propname} was not defined in @var{contextname} (but was inherited
-from a higher context), then this has no effect.
+The option @code{raggedlast} is similar to @code{raggedright}, but
+only affects the last line of the piece. No restrictions are put on
+that line. The result is similar to formatting paragraphs. In a
+paragraph, the last line simply takes its natural length.
 
-If @var{contextname} is left out, then it defaults to the current
-``bottom'' context: this is a context like @internalsref{Voice} that
-cannot contain any other contexts.
 
+@node Titling
+@subsection Titling
 
-@node Defining contexts
-@subsection Defining contexts
+Titles are created for each @code{\score} block, and over a
+@code{\book}.
 
-@cindex context definition
-@cindex translator definition
-
-The most common way to create a new context definition is by extending
-an existing one.  An existing context from the paper block is copied
-by referencing a context identifier:
-
-@example
-\paper @{
-  \context @{
-    @var{context-identifier}
-  @}
-@}
-@end example
-
-@noindent
-Every predefined context has a standard identifier. For example, the
-@code{Staff} context can be referred to as @code{\StaffContext}.
-
-The context can then be modified by setting or changing properties,
-e.g.
-@example
-\context @{
-  \StaffContext
-  Stem \set #'thickness = #2.0
-  defaultBarType = #"||"
-@}
-@end example
-These assignments happen before interpretation starts, so a property
-command will override any predefined settings.
-
-@cindex engraver
+The contents of the titles are taken from the @code{\header} blocks.
+The header block for a book supports the following 
+@table @code
+@item title
+    The title of the music. Centered on top of the first page.
+@item subtitle
+    Subtitle, centered below the title.
+@item poet
+    Name of the poet, left flushed below the subtitle.
+@item composer
+    Name of the composer, right flushed below the subtitle.
+@item meter
+    Meter string, left flushed below the poet.
+@item opus
+    Name of the opus, right flushed below the composer.
+@item arranger
+    Name of the arranger, right flushed below the opus.
+@item instrument
+    Name of the instrument, centered below the arranger.
+@item dedication            
+    To whom the piece is dedicated.
+@item piece
+    Name of the piece, left flushed below the instrument.
+@end table
 
-@refbugs
+This is a demonstration of the fields available, 
 
-It is not possible to collect multiple property assignments in a
-variable, and apply to one @code{\context} definition by
-referencing that variable.
+@lilypond[verbatim]
+\book {
+  \header {
+    title = "Title"
+    subtitle = "(and (the) subtitle)"
+    subsubtitle = "Sub sub title"
+    poet = "Poet"
+    composer = "Composer"
+    texttranslator = "Text Translator"
+    meter = "Meter"
+    arranger = "Arranger"
+    instrument = "Instrument"
+    piece = "Piece"
+  }
 
-@node Changing contexts locally
-@subsection Changing contexts locally
+  \score {
+    \header {
+      piece = "piece1"
+      opus = "opus1" 
+    }
+    { c'1 }
+  }
+  \score {
+    \header {
+      piece = "piece2"
+      opus = "opus2" 
+    }
+    { c'1 }
+  }
+}
+@end lilypond
 
+Different fonts may be selected for each element, by using a
+@code{\markup}, e.g.
 
-Extending an existing context can also be done locally. A piece of
-music can be interpreted in a changed context by using the following syntax
+@verbatim
+  \header {
+    title = \markup { \italic { The italic title } }
+  }
+@end verbatim
 
-@example
-  \with @{
-     @var{context modifications}
-  @}
-@end example
+A more advanced option is to change the Scheme functions
+@code{make-book-title} and @code{make-score-title} functions, defined
+in the @code{\bookpaper} of the @code{\book} block. These functions
+create a block of titling, given the information in the
+@code{\header}. The init file @file{ly/titling.scm} shows how the
+default format is created, and it may be used as a template for
+different styles.
 
-These statements comes between @code{\new} or @code{\context} and the
-music to be interpreted. The @var{context modifications} property
-settings and @code{\remove}, @code{\consists} and @code{\consistsend}
-commands. The syntax is similar to the @code{\context} block.
 
-The following example shows how a staff is created with bigger spaces,
-and without a @code{Clef_engraver}.
+@cindex header
+@cindex footer
+@cindex page layout
+@cindex titles
 
-@lilypond[relative=1,fragment,verbatim]
-<<
-  \new Staff { c4 es4 g2 }
-  \new Staff \with {
-        \override StaffSymbol #'staff-space = #(magstep 1.5)
-        fontSize = #1.5
-        \remove "Clef_engraver"
-  } {
-        c4 es4 g2
-  } >>
-@end lilypond
 
-@refbugs
 
-The command @code{\with} has no effect on contexts that already
-exist. 
 
+@node Page breaking
+@subsection Page breaking
 
-@node Engravers and performers
-@subsection  Engravers and performers
+The default page breaking may be overriden by inserting
+@code{\pageBreak} or @code{\noPageBreak} commands. These commands are
+analogous to @code{\break} and @code{\noBreak}. They should be
+inserted with a bar line. These commands force and forbid a page-break
+from happening. 
 
+Page breaks are computed by the @code{page-breaking} function in the
+@code{\bookpaper} block. 
 
-Each context is composed of a number of building blocks, or plug-ins
-called engravers.  An engraver is a specialized C++ class that is
-compiled into the executable. Typically, an engraver is responsible
-for one function: the @code{Slur_engraver} creates only @code{Slur}
-objects, and the @code{Skip_event_swallow_translator} only swallows
-(silently gobbles) @code{SkipEvent}s.
+@refcommands
 
+@cindex @code{\pageBreak}
+@code{\pageBreak}
+@cindex  @code{\noPageBreak} 
+@code{\noPageBreak} 
 
+@node Paper size
+@subsection Paper size
 
-@cindex engraver
-@cindex plug-in
+@cindex paper size
+@cindex page size
+@cindex @code{papersize}
 
-An existing context definition can be changed by adding or removing an
-engraver. The syntax for these operations is
+To change the paper size, there are two commands,
 @example
-\consists @var{engravername}
-\remove @var{engravername}
+        #(set-default-paper-size "a4")
+        \paper@{
+           #(set-paper-size "a4")
+        @}
 @end example
+The second one sets the size of the @code{\paper} block that it is in.
 
-@cindex @code{\consists}
-@cindex @code{\remove}
 
-@noindent
-Here @var{engravername} is a string, the name of an engraver in the
-system. In the following example, the @code{Clef_engraver} is removed
-from the Staff context. The result is a staff without a clef, where
-the middle C is at its default position, the center line:
-
-@lilypond[verbatim,raggedright]
-\score {
-  \notes {
-    c'4 f'4
-  }
-  \paper {
-    \context {
-      \StaffContext
-      \remove Clef_engraver
-    }
-  }
-}
-@end lilypond
-
-A list of all engravers is in the internal documentation,
-see @internalsref{Engravers}.
-
-@node Defining new contexts
-@subsection Defining new contexts
+@node Page layout
+@subsection Page layout
 
+@cindex page layout
+@cindex margins
+@cindex header, page
+@cindex footer, page
 
-It is also possible to define new contexts from scratch.  To do this,
-you must define give the new context a name.  In the following
-example, a very simple Staff context is created: one that will put
-note heads on a staff symbol.
+LilyPond will do page layout, setting margins and adding headers and
+footers to each page.
 
-@example
-\context @{
-  \type "Engraver_group_engraver"
-  \name "SimpleStaff"
-  \alias "Staff"
-  \consists "Staff_symbol_engraver"
-  \consists "Note_head_engraver"
-  \consistsend "Axis_group_engraver"
-@}
-@end example
-
-@noindent
-The argument of @code{\type} is the name for a special engraver that
-handles cooperation between simple engravers such as
-@code{Note_head_engraver} and @code{Staff_symbol_engraver}.  This
-should always be  @code{Engraver_group_engraver} (unless you are
-defining a Score context from scratch, in which case
-@code{Score_engraver}   must be used).
-
-The complete list of context  modifiers is the following:
-@itemize @bullet
-@item @code{\alias} @var{alternate-name}:
-This specifies a different name.  In the above example,
-@code{\set Staff.X = Y} will also work on @code{SimpleStaff}s.
-
-@item @code{\consistsend} @var{engravername}:
-Analogous to @code{\consists}, but makes sure that
-@var{engravername} is always added to the end of the list of
-engravers.
-
-Engravers that group context objects into axis groups or alignments
-need to be at the end of the list. @code{\consistsend} insures that
-engravers stay at the end even if a user adds or removes engravers.
-
-@item @code{\accepts} @var{contextname}:
-This context can contains @var{contextname} contexts.  The first
-@code{\accepts} is created as a default context when events (e.g. notes
-or rests) are encountered.
-
-@item @code{\denies}:
-The opposite of @code{\accepts}.
-
-@item @code{\name} @var{contextname}:
-This sets the type name of the context, e.g. @code{Staff},
-@code{Voice}.  If the name is not specified, the translator will not
-do anything.
-@end itemize
+The default layout responds to the following settings in the
+@code{\bookpaper} block
 
-@c EOF
+@table @code
+@item hsize
+ The width of the page
+@item vsize
+ The height of the page
+@item top-margin
+ Margin between header and top of the page
+@item bottom-margin
+ Margin between footer and bottom of the page
+@item head-sep
+ Distance between top-most music system and the page header
+@item foot-sep
+ Distance between bottom-most music system and the page footer
+@item raggedbottom
+ If set to true, systems will not be spread across the page.  
+@item raggedlastbottom
+ If set to true, systems will not be spread to fill the last page.
+@end table
 
+The default page header puts the page number and the @code{instrument}
+field from the @code{\header} block on a line.
 
 
 
-@node Output details
-@section Output details
 
-The default output format is La@TeX{}, which should be run
-through La@TeX{}.  Using the option @option{-f}
-(or @option{--format}) other output formats can be selected also, but
- none of them work reliably.
+@cindex copyright
+@cindex tagline
 
-Now the music is output system by system (a `system' consists of all
-staves belonging together).  From @TeX{}'s point of view, a system is an
-@code{\hbox} which contains a lowered @code{\vbox} so that it is centered
-vertically on the baseline of the text.  Between systems,
-@code{\interscoreline} is inserted vertically to have stretchable space.
-The horizontal dimension of the @code{\hbox} is given by the
-@code{linewidth} parameter from LilyPond's @code{\paper} block.
+The default footer is empty, except for the first page, where it the
+@code{copyright} field from @code{\header} is inserted, and the last
+page, where @code{tagline} from @code{\header} is added. The default
+tagline is ``Engraved by LilyPond (@var{version})''.
 
-After the last system LilyPond emits a stronger variant of
-@code{\interscoreline} only if the macro
-@code{\lilypondpaperlastpagefill} is not defined (flushing the systems
-to the top of the page).  You can avoid that by setting the variable
-@code{lastpagefill} in LilyPond's @code{\paper} block.
+The header and footer are created by the functions @code{make-footer}
+and @code{make-header}, defined in @code{\bookpaper}. The default
+implementations are in @file{scm/page-layout.scm}.
 
-It is possible to fine-tune the vertical offset further by defining the
-macro @code{\lilypondscoreshift}:
+The following settings influence the header and footer layout.
 
-@example
-\def\lilypondscoreshift@{0.25\baselineskip@}
-@end example
+@table @code
+@item printpagenumber
+  this boolean controls whether a pagenumber is printed. 
+@end table
 
-@noindent
-where @code{\baselineskip} is the distance from one text line to the next.
 
-Here an example how to embed a small LilyPond file @code{foo.ly} into
-running La@TeX{} text without using the @code{lilypond-book} script
-(@pxref{lilypond-book manual}):
 
-@example
-\documentclass@{article@}
+The page layout itself is done by two functions:
+@code{page-music-height} and @code{page-make-stencil}. The former
+tells the line-breaking algorithm how much space can be spent on a
+page, the latter creates the actual page given the system to put on it. 
 
-\def\lilypondpaperlastpagefill@{@}
-\lineskip 5pt
-\def\lilypondscoreshift@{0.25\baselineskip@}
 
-\begin@{document@}
-This is running text which includes an example music file
-\input@{foo.tex@}
-right here.
-\end@{document@}
-@end example
+@seealso
 
-The file @file{foo.tex} has been simply produced with
+Examples: @inputfileref{input/test/,page-breaks.ly}
 
-@example
-  lilypond-bin foo.ly
-@end example
 
-The call to @code{\lineskip} assures that there is enough vertical space
-between the LilyPond box and the surrounding text lines.