]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/user/spacing.itely
Merge branch 'master' into nested-bookparts
[lilypond.git] / Documentation / user / spacing.itely
index 377a74ea1392fb6d13a8cf68799b679ed76f08d5..64977b0233a29ca05a2faddfcaf232549e56368d 100644 (file)
@@ -7,9 +7,50 @@
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
-@c A menu is needed before every deeper *section nesting of @node's; run
-@c     M-x texinfo-all-menus-update
-@c to automatically fill in these menus before saving changes
+@c \version "2.11.51"
+
+@ignore
+GDP TODO list
+
+Negative numbers are allowed:
+> Are you sure? The following works well
+> \paper{
+>   first-page-number = -2
+> }
+> and prints page number -1 on the second page, for example.
+
+
+- default paper size is A4.
+
+
+In 5.2.1 the @refbugs (line 495 in spacing.itely on master) it
+states:
+
+"@code{layout-set-staff-size} does not change the distance between
+the
+staff lines."
+
+Could we add a sentence:
+"Use instead the pair               fontSize = #@var{N}
+            \override StaffSymbol #'staff-space = #(magstep
+@var{N})
+inside the Staff context to change the size of the font and the
+distance between
+staff lines accordingly."
+
+Actually I found, that the @internalsref{StaffSymbol} at line 481
+sends to an uncomplete
+documentation. The property staff-space is not explained here. I
+thought Y-extent might be of
+help, but it is in turn explained by x-space which again is
+missing from the list. Who has the
+knowledge to fix this?
+
+
+Clarify
+http://code.google.com/p/lilypond/issues/detail?id=68
+
+@end ignore
 
 @node Spacing issues
 @chapter Spacing issues
 
 @node Spacing issues
 @chapter Spacing issues
@@ -23,19 +64,28 @@ many pages a piece of music takes.
 Globally speaking, this procedure happens in four steps: first,
 flexible distances (@q{springs}) are chosen, based on durations.  All
 possible line breaking combinations are tried, and a @q{badness} score
 Globally speaking, this procedure happens in four steps: first,
 flexible distances (@q{springs}) are chosen, based on durations.  All
 possible line breaking combinations are tried, and a @q{badness} score
-is calculated for each. Then the height of each possible system is
-estimated. Finally, a page breaking and line breaking combination is chosen
+is calculated for each.  Then the height of each possible system is
+estimated.  Finally, a page breaking and line breaking combination is chosen
 so that neither the horizontal nor the vertical spacing is too cramped
 or stretched.
 
 so that neither the horizontal nor the vertical spacing is too cramped
 or stretched.
 
+Settings which influence layout may be placed in two blocks.
+The @code{\paper @{...@}} block is placed outside any
+@code{\score @{...@}} blocks and contains settings that
+relate to the entire document.  The @code{\layout @{...@}}
+block is placed within a @code{\score @{...@}} block and
+contains settings for that particular score.  If you have
+only one @code{\score @{...@}} block the two have the same
+effect.  In general the commands shown in this chapter can
+be placed in either.
+
 @menu
 * Paper and pages::             
 @menu
 * Paper and pages::             
-* Music layout::                
-* Vertical spacing::            
-* Horizontal spacing::          
-* Breaks::                      
-* Displaying spacing::          
-* Vertical collision avoidance::  
+* Music layout::
+* Breaks::
+* Vertical spacing::
+* Horizontal spacing::
+* Fitting music onto fewer pages::
 @end menu
 
 
 @end menu
 
 
@@ -43,7 +93,7 @@ or stretched.
 @section Paper and pages
 
 This section deals with the boundaries that define the area
 @section Paper and pages
 
 This section deals with the boundaries that define the area
-that music can be printed inside.
+within which music can be printed.
 
 @menu
 * Paper size::                  
 
 @menu
 * Paper size::                  
@@ -61,6 +111,8 @@ that music can be printed inside.
 To change the paper size, there are two commands,
 @example
 #(set-default-paper-size "a4")
 To change the paper size, there are two commands,
 @example
 #(set-default-paper-size "a4")
+@end example
+@example
 \paper @{
   #(set-paper-size "a4")
 @}
 \paper @{
   #(set-paper-size "a4")
 @}
@@ -77,6 +129,8 @@ Support for the following paper sizes are included by default,
 @code{a6}, @code{a5}, @code{a4}, @code{a3}, @code{legal}, @code{letter},
 @code{11x17} (also known as tabloid).
 
 @code{a6}, @code{a5}, @code{a4}, @code{a3}, @code{legal}, @code{letter},
 @code{11x17} (also known as tabloid).
 
+@c TODO Add new paper sizes -td
+
 Extra sizes may be added by editing the definition for
 @code{paper-alist} in the initialization file @file{scm/paper.scm}.
 
 Extra sizes may be added by editing the definition for
 @code{paper-alist} in the initialization file @file{scm/paper.scm}.
 
@@ -118,65 +172,65 @@ The default layout responds to the following settings in the
 @item first-page-number
 The value of the page number of the first page.  Default is@tie{}1.
 
 @item first-page-number
 The value of the page number of the first page.  Default is@tie{}1.
 
-@funindex printfirst-page-number
+@funindex print-first-page-number
 @item print-first-page-number
 If set to true, will print the page number in the first page.  Default is
 false.
 
 @funindex print-page-number
 @item print-page-number
 @item print-first-page-number
 If set to true, will print the page number in the first page.  Default is
 false.
 
 @funindex print-page-number
 @item print-page-number
-If set to false, page numbers will not be printed. Default is true.
+If set to false, page numbers will not be printed.  Default is true.
 
 @funindex paper-width
 @item paper-width
 
 @funindex paper-width
 @item paper-width
-The width of the page. The default is taken from the current paper size,
-see @ref{Paper size}. 
+The width of the page.  The default is taken from the current paper size,
+see @ref{Paper size}.
 
 @funindex paper-height
 @item paper-height
 
 @funindex paper-height
 @item paper-height
-The height of the page. The default is taken from the current paper size,
-see @ref{Paper size}. 
+The height of the page.  The default is taken from the current paper size,
+see @ref{Paper size}.
 
 @funindex top-margin
 @item top-margin
 
 @funindex top-margin
 @item top-margin
-Margin between header and top of the page. Default is@tie{}5mm.
+Margin between header and top of the page.  Default is@tie{}5mm.
 
 @funindex bottom-margin
 @item bottom-margin
 
 @funindex bottom-margin
 @item bottom-margin
-Margin between footer and bottom of the page. Default is@tie{}6mm.
+Margin between footer and bottom of the page.  Default is@tie{}6mm.
 
 @funindex left-margin
 @item left-margin
 Margin between the left side of the page and the beginning of the
 
 @funindex left-margin
 @item left-margin
 Margin between the left side of the page and the beginning of the
-music. Unset by default, which means that the margins is determined
+music.  Unset by default, which means that the margins is determined
 based on the @code{paper-width} and @code{line-width} to center the
 based on the @code{paper-width} and @code{line-width} to center the
-score on the paper. 
+score on the paper.
 
 @funindex line-width
 @item line-width
 
 @funindex line-width
 @item line-width
-The length of the systems. Default is @code{paper-width} minus @tie{}20mm.
+The length of the systems.  Default is @code{paper-width} minus @tie{}20mm.
 
 @funindex head-separation
 @item head-separation
 
 @funindex head-separation
 @item head-separation
-Distance between the top-most music system and the page header. Default
-is@tie{}4mm. 
+Distance between the top-most music system and the page header.  Default
+is@tie{}4mm.
 
 @funindex foot-separation
 @item foot-separation
 Distance between the bottom-most music system and the page
 
 @funindex foot-separation
 @item foot-separation
 Distance between the bottom-most music system and the page
-footer. Default is@tie{}4mm.
+footer.  Default is@tie{}4mm.
 
 @funindex page-top-space
 @item page-top-space
 Distance from the top of the printable area to the center of the first
 
 @funindex page-top-space
 @item page-top-space
 Distance from the top of the printable area to the center of the first
-staff. This only works for staves which are vertically small. Big staves
+staff.  This only works for staves which are vertically small.  Big staves
 are set with the top of their bounding box aligned to the top of the
 are set with the top of their bounding box aligned to the top of the
-printable area. Default is@tie{}12mm.
+printable area.  Default is@tie{}12mm.
 
 @funindex ragged-bottom
 @item ragged-bottom
 If set to true, systems will not be spread vertically across the page.  This
 
 @funindex ragged-bottom
 @item ragged-bottom
 If set to true, systems will not be spread vertically across the page.  This
-does not affect the last page. Default is false.
+does not affect the last page.  Default is false.
 
 This should be set to true for pieces that have only two or three
 systems per page, for example orchestral scores.
 
 This should be set to true for pieces that have only two or three
 systems per page, for example orchestral scores.
@@ -184,7 +238,7 @@ systems per page, for example orchestral scores.
 @funindex ragged-last-bottom
 @item ragged-last-bottom
 If set to false, systems will be spread vertically to fill the last
 @funindex ragged-last-bottom
 @item ragged-last-bottom
 If set to false, systems will be spread vertically to fill the last
-page. Default is true.
+page.  Default is true.
 
 Pieces that amply fill two pages or more should have this set to
 true.
 
 Pieces that amply fill two pages or more should have this set to
 true.
@@ -192,13 +246,13 @@ true.
 @funindex system-count
 @item system-count
 This variable, if set, specifies into how many lines a score should be
 @funindex system-count
 @item system-count
 This variable, if set, specifies into how many lines a score should be
-broken. Unset by default.
+broken.  Unset by default.
 
 @funindex between-system-space
 @item between-system-space
 This dimensions determines the distance between systems.  It is the
 ideal distance between the center of the bottom staff of one system
 
 @funindex between-system-space
 @item between-system-space
 This dimensions determines the distance between systems.  It is the
 ideal distance between the center of the bottom staff of one system
-and the center of the top staff of the next system. Default is@tie{}20mm.
+and the center of the top staff of the next system.  Default is@tie{}20mm.
 
 Increasing this will provide a more even appearance of the page at the
 cost of using more vertical space.
 
 Increasing this will provide a more even appearance of the page at the
 cost of using more vertical space.
@@ -207,32 +261,39 @@ cost of using more vertical space.
 @item between-system-padding
 This dimension is the minimum amount of white space that will always
 be present between the bottom-most symbol of one system, and the
 @item between-system-padding
 This dimension is the minimum amount of white space that will always
 be present between the bottom-most symbol of one system, and the
-top-most of the next system. Default is@tie{}4mm.
+top-most of the next system.  Default is@tie{}4mm.
 
 Increasing this will put systems whose bounding boxes almost touch
 farther apart.
 
 
 Increasing this will put systems whose bounding boxes almost touch
 farther apart.
 
+@funindex page-breaking-between-system-padding
+@item page-breaking-between-system-padding
+This variable tricks the page breaker into thinking that
+@code{between-system-padding} is set to something different than it
+really is.  For example, if this variable is set to something substantially
+larger than @code{between-system-padding}, then the page-breaker will put
+fewer systems on each page.
 
 @funindex horizontal-shift
 @item horizontal-shift
 All systems (including titles and system separators) are shifted by
 
 @funindex horizontal-shift
 @item horizontal-shift
 All systems (including titles and system separators) are shifted by
-this amount to the right. Page markup, such as headers and footers are
-not affected by this. The purpose of this variable is to make space
-for instrument names at the left. Default is@tie{}0.
+this amount to the right.  Page markup, such as headers and footers are
+not affected by this.  The purpose of this variable is to make space
+for instrument names at the left.  Default is@tie{}0.
 
 @funindex after-title-space
 @item after-title-space
 
 @funindex after-title-space
 @item after-title-space
-Amount of space between the title and the first system. Default is@tie{}5mm.
+Amount of space between the title and the first system.  Default is@tie{}5mm.
 
 @funindex before-title-space
 @item before-title-space
 Amount of space between the last system of the previous piece and the
 
 @funindex before-title-space
 @item before-title-space
 Amount of space between the last system of the previous piece and the
-title of the next. Default is@tie{}10mm.
+title of the next.  Default is@tie{}10mm.
 
 @funindex between-title-space
 @item between-title-space
 Amount of space between consecutive titles (e.g., the title of the
 
 @funindex between-title-space
 @item between-title-space
 Amount of space between consecutive titles (e.g., the title of the
-book and the title of a piece). Default is@tie{}2mm.
+book and the title of a piece).  Default is@tie{}2mm.
 
 @funindex printallheaders
 @item printallheaders
 
 @funindex printallheaders
 @item printallheaders
@@ -242,7 +303,7 @@ output.  Normally only the piece and opus \headers are printed.
 @funindex systemSeparatorMarkup
 @item systemSeparatorMarkup
 This contains a markup object, which will be inserted between
 @funindex systemSeparatorMarkup
 @item systemSeparatorMarkup
 This contains a markup object, which will be inserted between
-systems.  This is often used for orchestral scores. Unset by default.
+systems.  This is often used for orchestral scores.  Unset by default.
 
 The markup command @code{\slashSeparator} is provided as a sensible
 default,  for example
 
 The markup command @code{\slashSeparator} is provided as a sensible
 default,  for example
@@ -262,8 +323,8 @@ default,  for example
 @funindex blank-page-force
 @item blank-page-force
 The penalty for having a blank page in the middle of a
 @funindex blank-page-force
 @item blank-page-force
 The penalty for having a blank page in the middle of a
-score. This is not used by @code{ly:optimal-breaking} since it will
-never consider blank pages in the middle of a score. Default value
+score.  This is not used by @code{ly:optimal-breaking} since it will
+never consider blank pages in the middle of a score.  Default value
 is 10.
 
 @funindex blank-last-page-force
 is 10.
 
 @funindex blank-last-page-force
@@ -274,19 +335,43 @@ Default value is 0.
 @funindex page-spacing-weight
 @item page-spacing-weight
 The relative importance of page (vertical) spacing and line (horizontal)
 @funindex page-spacing-weight
 @item page-spacing-weight
 The relative importance of page (vertical) spacing and line (horizontal)
-spacing. High values will make page spacing more important. Default
+spacing.  High values will make page spacing more important.  Default
 value is 10.
 
 @funindex auto-first-page-number
 @item auto-first-page-number
 The page breaking algorithm is affected by the first page number being
 odd or even.  If this variable is set to #t, the page breaking algorithm
 value is 10.
 
 @funindex auto-first-page-number
 @item auto-first-page-number
 The page breaking algorithm is affected by the first page number being
 odd or even.  If this variable is set to #t, the page breaking algorithm
-will decide whether to start with an odd or even number.  This will 
+will decide whether to start with an odd or even number.  This will
 result in the first page number remaining as is or being increased by one.
 
 @end table
 @end quotation
 
 result in the first page number remaining as is or being increased by one.
 
 @end table
 @end quotation
 
+
+@snippets
+
+The header and footer are created by the functions make-footer and
+make-header, defined in \paper.  The default implementations are in
+ly/paper-defaults.ly and ly/titling-init.ly.
+
+The page layout itself is done by two functions in the \paper block,
+page-music-height and 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.
+
+You can define paper block values in Scheme.  In that case mm, in, pt,
+and cm are variables defined in paper-defaults.ly with values in
+millimeters.  That is why the value 2 cm must be multiplied in the
+example
+
+@example
+\paper @{
+ #(define bottom-margin (* 2 cm))
+@}
+@end example
+
+
 Example:
 
 @example
 Example:
 
 @example
@@ -298,6 +383,23 @@ Example:
 @}
 @end example
 
 @}
 @end example
 
+This second example centers page numbers at the bottom of every page.
+
+@example
+\paper @{
+  print-page-number = ##t
+  print-first-page-number = ##t
+  oddHeaderMarkup = \markup \fill-line @{ " " @}
+  evenHeaderMarkup = \markup \fill-line @{ " " @}
+  oddFooterMarkup = \markup @{ \fill-line @{
+     \bold \fontsize #3 \on-the-fly #print-page-number-check-first
+     \fromproperty #'page:page-number-string @} @}
+  evenFooterMarkup = \markup @{ \fill-line @{
+     \bold \fontsize #3 \on-the-fly #print-page-number-check-first
+     \fromproperty #'page:page-number-string @} @}
+@}
+@end example
+
 You can also define these values in Scheme.  In that case @code{mm},
 @code{in}, @code{pt}, and @code{cm} are variables defined in
 @file{paper-defaults.ly} with values in millimeters.  That is why the
 You can also define these values in Scheme.  In that case @code{mm},
 @code{in}, @code{pt}, and @code{cm} are variables defined in
 @file{paper-defaults.ly} with values in millimeters.  That is why the
@@ -321,7 +423,7 @@ how much space can be spent on a page, the latter creates the actual
 page given the system to put on it.
 
 
 page given the system to put on it.
 
 
-@refbugs
+@knownissues
 
 The option right-margin is defined but doesn't set the right margin
 yet.  The value for the right margin has to be defined adjusting the
 
 The option right-margin is defined but doesn't set the right margin
 yet.  The value for the right margin has to be defined adjusting the
@@ -339,8 +441,8 @@ add space between the titles and the first system of the score.
 @section Music layout
 
 @menu
 @section Music layout
 
 @menu
-* Setting the staff size::   
-* Score layout::                
+* Setting the staff size::
+* Score layout::
 @end menu
 
 
 @end menu
 
 
@@ -351,6 +453,9 @@ add space between the titles and the first system of the score.
 @cindex staff size, setting
 @funindex layout file
 
 @cindex staff size, setting
 @funindex layout file
 
+The default @strong{staff size} is set to 20 points.
+This may be changed in two ways:
+
 To set the staff size globally for all scores in a file (or
 in a @code{book} block, to be precise), use @code{set-global-staff-size}.
 
 To set the staff size globally for all scores in a file (or
 in a @code{book} block, to be precise), use @code{set-global-staff-size}.
 
@@ -362,7 +467,7 @@ in a @code{book} block, to be precise), use @code{set-global-staff-size}.
 This sets the global default size to 14pt staff height and scales all
 fonts accordingly.
 
 This sets the global default size to 14pt staff height and scales all
 fonts accordingly.
 
-To set the staff size individually for each score, use 
+To set the staff size individually for each score, use
 @example
 \score@{
   ...
 @example
 \score@{
   ...
@@ -431,7 +536,7 @@ The recommended font sizes are listed in the following table:
 
 These fonts are available in any sizes.  The context property
 @code{fontSize} and the layout property @code{staff-space} (in
 
 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 the size for individual
+@rinternals{StaffSymbol}) can be used to tune the size for individual
 staves.  The sizes of individual staves are relative to the global size.
 
 @example
 staves.  The sizes of individual staves are relative to the global size.
 
 @example
@@ -443,6 +548,12 @@ staves.  The sizes of individual staves are relative to the global size.
 This manual: @ref{Selecting notation font size}.
 
 
 This manual: @ref{Selecting notation font size}.
 
 
+@knownissues
+
+@code{layout-set-staff-size} does not change the distance between the
+staff lines.
+
+
 @node Score layout
 @subsection Score layout
 
 @node Score layout
 @subsection Score layout
 
@@ -468,7 +579,404 @@ layout.
 
 @seealso
 
 
 @seealso
 
-This manual: @ref{Changing context default settings}
+This manual: @ref{Changing context default settings}.
+
+
+@node Breaks
+@section Breaks
+
+@menu
+* Line breaking::
+* Page breaking::
+* Optimal page breaking::
+* Optimal page turning::
+* Minimal page breaking::
+* Explicit breaks::
+* Using an extra voice for breaks::
+@end menu
+
+@node Line breaking
+@subsection Line breaking
+
+@cindex line breaks
+@cindex breaking lines
+
+Line breaks are normally determined automatically. They are chosen
+so that lines look neither cramped nor loose, and 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.  However,
+line breaks can only occur at the end of @q{complete} bars, i.e.,
+where there are no notes or tuplets left @q{hanging} over the bar
+line.  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 ""},
+although again there must be no notes left hanging over in any of
+the staves at this point, or it will be ignored.
+
+The opposite command, @code{\noBreak}, forbids a line break at the
+bar line where it is inserted.
+
+The most basic settings influencing line spacing are @code{indent}
+and @code{line-width}. They are set in the @code{\layout} block.
+They control the indentation of the first line of music, and the
+lengths of the lines.
+
+If @code{ragged-right} is set to true in the @code{\layout} block,
+then systems end at their natural horizontal length, instead of
+being spread horizontally to fill the whole line. This is useful
+for short fragments, and for checking how tight the natural
+spacing is.
+
+@c TODO Check and add para on default for ragged-right
+
+The option @code{ragged-last} is similar to @code{ragged-right},
+but affects only the last line of the piece.
+
+@example
+\layout @{
+indent = #0
+line-width = #150
+ragged-last = ##t
+@}
+@end example
+
+
+
+@cindex regular line breaks
+@cindex four bar music.
+
+For line breaks at regular intervals use @code{\break} separated by
+skips and repeated with @code{\repeat}.  For example, this would
+cause the following 28 measures (assuming 4/4 time) to be broken
+every 4 measures, and only there:
+
+@example
+<< \repeat unfold 7 @{
+         s1 \noBreak s1 \noBreak
+         s1 \noBreak s1 \break @}
+   @emph{the real music}
+>>
+@end example
+
+@predefined
+
+@code{\break}, and @code{\noBreak}.
+@funindex \break
+@funindex \noBreak
+
+@seealso
+
+Internals: @rinternals{LineBreakEvent}.
+
+@c TODO Check this
+A linebreaking configuration can be saved as a @code{.ly} file
+automatically.  This allows vertical alignments to be stretched to
+fit pages in a second formatting run.  This is fairly new and
+complicated.  More details are available in
+@rlsr{Spacing}.
+
+@knownissues
+
+Line breaks can only occur if there is a @q{proper} bar line.  A note
+which is hanging over a bar line is not proper, such as
+
+@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
+c4 c2 << c2 {s4 \break } >>  % this does nothing
+c2 c4 |           % a break here would work
+c4 c2 c4 ~ \break % as does this break
+c4 c2 c4
+@end lilypond
+
+This can be avoided by removing the @code{Forbid_line_break_engraver}.
+Note that manually forced line breaks have to be added in parallel
+with the music.
+
+@lilypond[quote,ragged-right,verbatim]
+\new Voice \with {
+  \remove Forbid_line_break_engraver
+} {
+  c4 c2 << c2 {s4 \break } >>  % now the break is allowed
+  c2 c4
+}
+@end lilypond
+
+Similarly, line breaks are normally forbidden when beams cross bar
+lines.  This behavior can be changed by setting
+@code{\override Beam #'breakable = ##t}.
+
+
+@node Page breaking
+@subsection Page breaking
+
+The default page breaking may be overridden by inserting
+@code{\pageBreak} or @code{\noPageBreak} commands.  These commands are
+analogous to @code{\break} and @code{\noBreak}.  They should be
+inserted at a bar line.  These commands force and forbid a page-break
+from happening.  Of course, the @code{\pageBreak} command also forces
+a line break.
+
+The @code{\pageBreak} and @code{\noPageBreak} commands may also be
+inserted at top-level, between scores and top-level markups.
+
+There are also analogous settings to @code{ragged-right} and
+@code{ragged-last} which have the same effect on vertical spacing:
+@code{ragged-bottom} and @code{ragged-last-bottom}.  If set to
+@code{##t} the systems on all pages or just the last page
+respectively will not be justified vertically.
+
+For more details see @ref{Vertical spacing}.
+
+Page breaks are computed by the @code{page-breaking} function.  LilyPond
+provides three algorithms for computing page breaks,
+@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and
+@code{ly:minimal-breaking}.  The default is @code{ly:optimal-breaking},
+but the value can be changed in the @code{\paper} block:
+
+@example
+\paper@{
+  #(define page-breaking ly:page-turn-breaking)
+@}
+@end example
+
+@c TODO Check this -td
+The old page breaking algorithm is called
+@code{optimal-page-breaks}.  If you are having trouble with the new page
+breakers, you can enable the old one as a workaround.
+
+@predefined
+
+@funindex \pageBreak
+@code{\pageBreak}
+@funindex \noPageBreak
+@code{\noPageBreak}
+
+
+@node Optimal page breaking
+@subsection Optimal page breaking
+
+@funindex ly:optimal-breaking
+
+The @code{ly:optimal-breaking} function is LilyPond's default method of
+determining page breaks.  It attempts to find a page breaking that minimizes
+cramping and stretching, both horizontally and vertically.  Unlike
+@code{ly:page-turn-breaking}, it has no concept of page turns.
+
+
+@node Optimal page turning
+@subsection Optimal page turning
+
+@funindex ly:page-turn-breaking
+
+Often it is necessary to find a page breaking configuration so that there is
+a rest at the end of every second page.  This way, the musician can turn the
+page without having to miss notes.  The @code{ly:page-turn-breaking} function
+attempts to find a page breaking minimizing cramping and stretching, but with
+the additional restriction that it is only allowed to introduce page turns
+in specified places.
+
+There are two steps to using this page breaking function.  First, you
+must enable it in the @code{\paper} block, as explained in @ref{Page
+breaking}.  Then you must tell the function where you would like to allow
+page breaks.
+
+There are two ways to achieve the second step.  First, you can specify each
+potential page turn manually, by inserting @code{\allowPageTurn} into your
+input file at the appropriate places.
+
+If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or
+Voice context.  The @code{Page_turn_engraver} will scan the context for
+sections without notes (note that it does not scan for rests; it scans for
+the absence of notes.  This is so that single-staff polyphony with rests in one
+of the parts does not throw off the @code{Page_turn_engraver}).  When it finds
+a sufficiently long section without notes, the @code{Page_turn_engraver} will
+insert an @code{\allowPageTurn} at the final bar line in that section, unless
+there is a @q{special} bar line (such as a double bar), in which case the
+@code{\allowPageTurn} will be inserted at the final @q{special} bar line in
+the section.
+
+@funindex minimumPageTurnLength
+The @code{Page_turn_engraver} reads the context property
+@code{minimumPageTurnLength} to determine how long a note-free section must
+be before a page turn is considered.  The default value for
+@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}.  If you want
+to disable page turns, you can set it to something very large.
+
+@example
+\new Staff \with @{ \consists "Page_turn_engraver" @}
+@{
+  a4 b c d |
+  R1 | % a page turn will be allowed here
+  a4 b c d |
+  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+  R1 | % a page turn will not be allowed here
+  a4 b r2 |
+  R1*2 | % a page turn will be allowed here
+  a1
+@}
+@end example
+
+@funindex minimumRepeatLengthForPageTurn
+The @code{Page_turn_engraver} detects volta repeats.  It will only allow a page
+turn during the repeat if there is enough time at the beginning and end of the
+repeat to turn the page back.  The @code{Page_turn_engraver} can also disable
+page turns if the repeat is very short.  If you set the context property
+@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will
+only allow turns in repeats whose duration is longer than this value.
+
+The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and
+@code{\allowPageTurn}, may also be used at top-level, between scores and
+top-level markups.
+
+@predefined
+
+@funindex \pageTurn
+@code{\pageTurn}
+@funindex \noPageTurn
+@code{\noPageTurn}
+@funindex \allowPageTurn
+@code{\allowPageTurn}
+
+@knownissues
+
+There should only be one @code{Page_turn_engraver} in a score.  If there is more
+than one, they will interfere with each other.
+
+@node Minimal page breaking
+@subsection Minimal page breaking
+
+@funindex ly:minimal-breaking
+
+The @code{ly:minimal-breaking} function performs minimal computations to
+calculate the page breaking: it fills a page with as many systems as
+possible before moving to the next one.  Thus, it may be preferred for
+scores with many pages, where the other page breaking functions could be
+too slow or memory demanding, or a lot of texts.  It is enabled using:
+
+@example
+\paper @{
+  #(define page-breaking ly:minimal-breaking)
+@}
+@end example
+
+@node Explicit breaks
+@subsection Explicit breaks
+
+Lily sometimes rejects explicit @code{\break} and @code{\pageBreak}
+commands.  There are two commands to override this behavior:
+
+@example
+\override NonMusicalPaperColumn #'line-break-permission = ##f
+\override NonMusicalPaperColumn #'page-break-permission = ##f
+@end example
+
+When @code{line-break-permission} is overridden to false, Lily will insert
+line breaks at explicit @code{\break} commands and nowhere else.  When
+@code{page-break-permission} is overridden to false, Lily will insert
+page breaks at explicit @code{\pageBreak} commands and nowhere else.
+
+@lilypond[quote,verbatim]
+\paper {
+  indent = #0
+  ragged-right = ##t
+  ragged-bottom = ##t
+}
+
+\score {
+  \new Score \with {
+    \override NonMusicalPaperColumn #'line-break-permission = ##f
+    \override NonMusicalPaperColumn #'page-break-permission = ##f
+  } {
+    \new Staff {
+      \repeat unfold 2 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 8 { c'8 c'8 c'8 c'8 } \pageBreak
+      \repeat unfold 8 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 6 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 4 { c'8 c'8 c'8 c'8 } \break
+      \repeat unfold 2 { c'8 c'8 c'8 c'8 }
+    }
+  }
+}
+@end lilypond
+
+
+@node Using an extra voice for breaks
+@subsection Using an extra voice for breaks
+
+Line- and page-breaking information usually appears within note entry directly.
+
+@example
+\new Score @{
+  \new Staff @{
+    \repeat unfold 2 @{ c'4 c'4 c'4 c'4 @}
+    \break
+    \repeat unfold 3 @{ c'4 c'4 c'4 c'4 @}
+  @}
+@}
+@end example
+
+This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes
+music entry with information that specifies how music should lay out
+on the page.  You can keep music entry and line- and page-breaking
+information in two separate places by introducing an extra voice to 
+contain the  breaks.  This extra voice
+contains only skips together with @code{\break}, @code{pageBreak} and other
+breaking layout information.
+
+@lilypond[quote,verbatim]
+\new Score {
+  \new Staff <<
+     \new Voice {
+        s1 * 2 \break
+        s1 * 3 \break
+        s1 * 6 \break
+        s1 * 5 \break
+     }
+     \new Voice {
+        \repeat unfold 2 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 3 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 6 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 5 { c'4 c'4 c'4 c'4 }
+     }
+  >>
+}
+@end lilypond
+
+This pattern becomes especially helpful when overriding
+@code{line-break-system-details} and the other useful but long properties of
+@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}.
+
+@lilypond[quote,verbatim]
+\new Score {
+  \new Staff <<
+     \new Voice {
+
+        \overrideProperty "Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 0))
+        s1 * 2 \break
+
+        \overrideProperty "Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 35))
+        s1 * 3 \break
+
+        \overrideProperty "Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 70))
+        s1 * 6 \break
+
+        \overrideProperty "Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 105))
+        s1 * 5 \break
+     }
+     \new Voice {
+        \repeat unfold 2 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 3 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 6 { c'4 c'4 c'4 c'4 }
+        \repeat unfold 5 { c'4 c'4 c'4 c'4 }
+     }
+  >>
+}
+@end lilypond
 
 
 @node Vertical spacing
 
 
 @node Vertical spacing
@@ -485,8 +993,9 @@ staves inside a system.
 @menu
 * Vertical spacing inside a system::  
 * Vertical spacing between systems::  
 @menu
 * Vertical spacing inside a system::  
 * Vertical spacing between systems::  
-* Controlling spacing of individual systems::  
-* Two-pass vertical spacing::
+* Explicit staff and system positioning::  
+* Two-pass vertical spacing::   
+* Vertical collision avoidance::  
 @end menu
 
 
 @end menu
 
 
@@ -507,7 +1016,7 @@ in having more systems per page.
 Normally staves are stacked vertically.  To make staves maintain a
 distance, their vertical size is padded.  This is done with the
 property @code{minimum-Y-extent}.  When applied to a
 Normally staves are stacked vertically.  To make staves maintain a
 distance, their vertical size is padded.  This is done with the
 property @code{minimum-Y-extent}.  When applied to a
-@internalsref{VerticalAxisGroup}, it controls the size of a horizontal
+@rinternals{VerticalAxisGroup}, it controls the size of a horizontal
 line, such as a staff or a line of lyrics.  @code{minimum-Y-extent}
 takes a pair of numbers, so
 if you want to make it smaller than its default @code{#'(-4 . 4)}
 line, such as a staff or a line of lyrics.  @code{minimum-Y-extent}
 takes a pair of numbers, so
 if you want to make it smaller than its default @code{#'(-4 . 4)}
@@ -525,16 +1034,77 @@ first number is generally negative.  The numbers need not match;
 for example, the staff can be made larger at the bottom by setting
 it to @code{(-6 . 4)}.
 
 for example, the staff can be made larger at the bottom by setting
 it to @code{(-6 . 4)}.
 
+After page breaks are determined, the vertical spacing within each
+system is reevaluated in order to fill the page more evenly; if a page
+has space left over, systems are stretched in order to fill that space.
+The amount of stretching can be configured though the @code{max-stretch}
+property of the @rinternals{VerticalAlignment} grob. By default,
+@code{max-stretch} is set to zero, disabling stretching. To enable
+stretching, a sane value for @code{max-stretch}
+is @code{ly:align-interface::calc-max-stretch}.
+
+In some situations, you may want to stretch most of a system while
+leaving some parts fixed.  For example, if a piano part occurs in the
+middle of an orchestral score, you may want to leave the piano staves
+close to each other while stretching the rest of the score.  The
+@code{keep-fixed-while-stretching} property of
+@rinternals{VerticalAxisGroup} can be used to achieve this.  When set
+to @code{##t}, this property keeps its staff (or line of lyrics) from
+moving relative to the one directly above it.  In the example above,
+you would override @code{keep-fixed-while-stretching} to @code{##t} in
+the second piano staff:
+
+@lilypond[verbatim]
+#(set-default-paper-size "a6")
+#(set-global-staff-size 14.0)
+
+\book {
+\paper {
+  ragged-last-bottom = ##f
+}
+
+\new Score \with
+{
+  \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch
+}
+{
+\new GrandStaff
+<<
+  \new StaffGroup
+  <<
+    \new Staff {c' d' e' f'}
+    \new Staff {c' d' e' f'}
+    \new Staff {c' d' e' f'}
+  >>
+
+  \new PianoStaff
+  <<
+    \new Staff {c' d' e' f'}
+    \new Staff \with {
+      \override VerticalAxisGroup #'keep-fixed-while-stretching = ##t
+    }
+    {c' d' e' f'}
+  >>
+
+  \new StaffGroup
+  <<
+    \new Staff {c' d' e' f'}
+    \new Staff {c' d' e' f'}
+  >>
+>>
+}
+}
+@end lilypond
 
 @seealso
 
 Internals: Vertical alignment of staves is handled by the
 
 @seealso
 
 Internals: Vertical alignment of staves is handled by the
-@internalsref{VerticalAlignment} object. The context parameters
+@rinternals{VerticalAlignment} object.  The context parameters
 specifying the vertical extent are described in connection with
 specifying the vertical extent are described in connection with
-the @internalsref{Axis_group_engraver}.
+the @rinternals{Axis_group_engraver}.
 
 
-Example files: @inputfileref{input/regression/,page-spacing.ly},
-@inputfileref{input/regression/,alignment-vertical-spacing.ly}.
+Example files: @c @lsr{spacing,page-spacing.ly},
+@c @lsr{spacing,alignment-vertical-spacing.ly}.
 
 
 @node Vertical spacing between systems
 
 
 @node Vertical spacing between systems
@@ -551,48 +1121,255 @@ Space between systems are controlled by four @code{\paper} variables,
 @}
 @end example
 
 @}
 @end example
 
+When only a couple of flat systems are placed on a page, the resulting
+vertical spacing may be non-elegant: one system at the top of the page,
+and the other at the bottom, with a huge gap between them.  To avoid this
+situation, the space added between the systems can be limited.  This
+feature is activated by setting to @code{#t} the
+@code{page-limit-inter-system-space} variable in the @code{\paper}
+block.  The paper variable @code{page-limit-inter-system-space-factor}
+determines how much the space can be increased: for instance, the value
+@code{1.3} means that the space can be 30% larger than what it would be
+on a ragged-bottom page.
+
+In the following example, if the inter system space were not limited,
+the second system of page 1 would be placed at the page bottom.  By
+activating the space limitation, the second system is placed closer to
+the first one.  By setting @code{page-limit-inter-system-space-factor} to
+@code{1}, the spacing would the same as on a ragged-bottom page, like
+the last one.
 
 
-@node Controlling spacing of individual systems
-@subsection Controlling spacing of individual systems
+@lilypond[verbatim]
+#(set-default-paper-size "a6")
+\book {
+  \paper {
+    page-limit-inter-system-space = ##t
+    page-limit-inter-system-space-factor = 1.3
+
+    oddFooterMarkup = \markup "page bottom"
+    evenFooterMarkup = \markup "page bottom"
+    oddHeaderMarkup = \markup \fill-line {
+      "page top" \fromproperty #'page:page-number-string }
+    evenHeaderMarkup = \markup \fill-line {
+      "page top" \fromproperty #'page:page-number-string }
+  }
+  \new Staff << \repeat unfold 4 { g'4 g' g' g' \break }
+                { s1*2 \pageBreak } >>
+}
+@end lilypond
 
 
-It is also possible to change the distance between for each system
-individually.  This is done by including the command
+@node Explicit staff and system positioning
+@subsection Explicit staff and system positioning
+
+One way to understand the @code{VerticalAxisGroup} and @code{\paper}
+settings explained in the previous two sections is as a collection of
+different settings that primarily concern the amount of vertical padding
+different staves and systems running down the page.
+
+It is possible to approach vertical spacing in a different way using
+@code{NonMusicalPaperColumn #'line-break-system-details}.  Where
+@code{VerticalAxisGroup} and @code{\paper} settings specify vertical padding,
+@code{NonMusicalPaperColumn #'line-break-system-details} specifies exact
+vertical positions on the page.
+
+@code{NonMusicalPaperColumn #'line-break-system-details} accepts an associative
+list of five different settings:
+
+@itemize 
+@item @code{X-offset}
+@item @code{Y-offset}
+@item @code{alignment-offsets}
+@item @code{alignment-extra-space}
+@item @code{fixed-alignment-extra-space}
+@end itemize
+
+Grob overrides, including the overrides for @code{NonMusicalPaperColumn}
+below, can occur in any of three different places in an input file:
+
+@itemize
+@item in the middle of note entry directly
+@item in a @code{\context} block
+@item in the @code{\with} block
+@end itemize
+
+When we override @code{NonMusicalPaperColumn}, we use the usual
+@code{\override} command in @code{\context} blocks and in the
+@code{\with} block.  On the other hand, when we override
+@code{NonMusicalPaperColumn} in the middle of note entry,
+use the special @code{\overrideProperty} command.  Here are some
+example @code{NonMusicalPaperColumn} overrides with the special
+@code{\overrideProperty} command:
 
 @example
 
 @example
-\overrideProperty
-#"Score.NonMusicalPaperColumn"
-#'line-break-system-details
-#'((fixed-alignment-extra-space . 15))
+\overrideProperty NonMusicalPaperColumn
+  #'line-break-system-details #'((X-offset . 20))
+
+\overrideProperty NonMusicalPaperColumn
+  #'line-break-system-details #'((Y-offset . 40))
+
+\overrideProperty NonMusicalPaperColumn
+  #'line-break-system-details #'((X-offset . 20) (Y-offset . 40))
+
+\override NonMusicalPaperColumn
+  #'line-break-system-details #'((alignment-offsets . (0 -15)))
+
+\override NonMusicalPaperColumn
+  #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)
+                                 (alignment-offsets . (0 -15)))
 @end example
 
 @end example
 
-@noindent
-at the line break before the system to be changed. The distance
-@code{15} is distributed over all staves that have a fixed distance
-alignment.  For example,
+To understand how each of these different settings work, we begin
+by looking at an example that includes no overrides at all.
+
+@lilypond[quote,ragged-right]
+\new Score <<
+  \new Staff <<
+    \new Voice {
+      s1 * 6 \break
+      s1 * 6 \break
+      s1 * 6 \break
+    }
+    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
+  >>
+  \new Staff {
+    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
+  }
+>>
+@end lilypond
+
+This score isolates line- and page-breaking information in a dedicated
+voice.  This technique of creating a breaks voice will help keep layout
+separate from music entry as our example becomes more complicated.
+See @ref{Using an extra voice for breaks}.
+
+Explicit @code{\breaks} evenly divide the music into six measures per
+line.  Vertical spacing results from LilyPond's defaults.  To set
+the vertical startpoint of each system explicitly, we can set
+the @code{Y-offset} pair in the @code{line-break-system-details}
+attribute of the @code{NonMusicalPaperColumn} grob:
+
+@lilypond[quote,ragged-right]
+\new Score <<
+  \new Staff <<
+    \new Voice {
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 0))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 40))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 80))
+      s1 * 6 \break
+    }
+    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
+  >>
+  \new Staff {
+    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
+  }
+>>
+@end lilypond
+
+Note that @code{line-break-system-details} takes an associative list of
+potentially many values, but that we set only one value here.  Note,
+too, that the @code{Y-offset} property here determines the exact vertical
+position on the page at which each new system will render.
 
 
-@lilypond[ragged-right, fragment, relative=2, staffsize=13]
-\new PianoStaff <<
+Now that we have set the vertical startpoint of each system
+explicitly, we can also set the vertical startpoint of each staff
+within each system manually.  We do this using the @code{alignment-offsets}
+subproperty of @code{line-break-system-details}.
+
+@lilypond[quote,ragged-right]
+\new Score <<
+  \new Staff <<
+    \new Voice {
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 20)
+          (alignment-offsets . (0 -15)))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 60)
+          (alignment-offsets . (0 -15)))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+        #'line-break-system-details #'((Y-offset . 100)
+          (alignment-offsets . (0 -15)))
+      s1 * 6 \break
+    }
+    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
+  >>
   \new Staff {
   \new Staff {
-    c1\break
-  
-    \overrideProperty
-    #"Score.NonMusicalPaperColumn"
-    #'line-break-system-details
-    #'((fixed-alignment-extra-space . 15))
-
-    c\break
+    \repeat unfold 18 { d'4 d'4 d'4 d'4 }
   }
   }
-  \new Staff { c c }
 >>
 @end lilypond
 
 >>
 @end lilypond
 
-The distance for @code{fixed-alignment-extra-space} may also be
-negative.
+Note that here we assign two different values to the
+@code{line-break-system-details} attribute of the
+@code{NonMusicalPaperColumn} grob.  Though the
+@code{line-break-system-details} attribute alist accepts many
+additional spacing parameters (including, for example, a corresponding
+@code{X-offset} pair), we need only set the @code{Y-offset} and
+@code{alignment-offsets} pairs to control the vertical startpoint of
+every system and every staff.  Finally, note that @code{alignment-offsets}
+specifies the vertical positioning of staves but not of staff groups.
+
+@lilypond[quote,ragged-right]
+\new Score <<
+  \new Staff <<
+    \new Voice {
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+      #'line-break-system-details #'((Y-offset . 0)
+        (alignment-offsets . (0 -30 -40)))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+      #'line-break-system-details #'((Y-offset . 60)
+        (alignment-offsets . (0 -10 -20)))
+      s1 * 6 \break
+      \overrideProperty #"Score.NonMusicalPaperColumn"
+      #'line-break-system-details #'((Y-offset . 100)
+        (alignment-offsets . (0 -10, -40)))
+      s1 * 6 \break
+    }
+    \new Voice { \repeat unfold 18 { c'4 c'4 c'4 c'4 } }
+  >>
+  \new StaffGroup <<
+    \new Staff {
+      \repeat unfold 18 { d'4 d'4 d'4 d'4 }
+    }
+    \new Staff {
+      \repeat unfold 18 { e'4 e'4 e'4 e'4 }
+    }
+  >>
+>>
+@end lilypond
+
+Some points to consider:
+
+@itemize
+@item When using @code{alignment-offsets}, lyrics count as a staff.
+
+@item The units of the numbers passed to @code{X-offset},
+@code{Y-offset} and @code{alignment-offsets} are interpreted as multiples
+of the distance between adjacent staff lines.  Positive values move staves
+and lyrics up, negative values move staves and lyrics down.
+
+@item Because the @code{NonMusicalPaperColumn #'line-break-system-details}
+settings given here allow the positioning of staves and systems anywhere
+on the page, it is possible to violate paper or margin boundaries or even
+to print staves or systems on top of one another.  Reasonable values
+passed to these different settings will avoid this.
+@end itemize
 
 
 @node Two-pass vertical spacing
 @subsection Two-pass vertical spacing
 
 
 
 @node Two-pass vertical spacing
 @subsection Two-pass vertical spacing
 
+Warning: two-pass vertical spacing is deprecated and will be removed in
+a future version of LilyPond.  Systems are now stretched automatically
+in a single pass.  See @ref{Vertical spacing inside a system}.
+
 In order to automatically stretch systems so that they should fill the
 space left on a page, a two-pass technique can be used:
 
 In order to automatically stretch systems so that they should fill the
 space left on a page, a two-pass technique can be used:
 
@@ -604,9 +1381,9 @@ stretched according to the data in the page layout file.
 @end enumerate
 
 The @code{ragged-bottom} property adds space between systems, while
 @end enumerate
 
 The @code{ragged-bottom} property adds space between systems, while
-the two-pass technique adds space between staffs inside a system.
+the two-pass technique adds space between staves inside a system.
 
 
-To allow this behaviour, a @code{tweak-key} variable has to be set in
+To allow this behavior, a @code{tweak-key} variable has to be set in
 each score @code{\layout} block, and the tweaks included in each score
 music, using the @code{\scoreTweak} music function.
 
 each score @code{\layout} block, and the tweaks included in each score
 music, using the @code{\scoreTweak} music function.
 
@@ -620,7 +1397,7 @@ music, using the @code{\scoreTweak} music function.
     \new Staff <<
       %% Include this score tweaks:
       \scoreTweak "scoreA"
     \new Staff <<
       %% Include this score tweaks:
       \scoreTweak "scoreA"
-      { \clef french c''1 \break c''1 } 
+      { \clef french c''1 \break c''1 }
     >>
     \new Staff { \clef soprano g'1 g'1 }
     \new Staff { \clef mezzosoprano e'1 e'1 }
     >>
     \new Staff { \clef soprano g'1 g'1 }
     \new Staff { \clef mezzosoprano e'1 e'1 }
@@ -640,10 +1417,89 @@ For the first pass, the @code{dump-tweaks} option should be set to
 generate the page layout file.
 
 @example
 generate the page layout file.
 
 @example
-lilypond -null -d dump-tweaks <file>.ly
+lilypond -dbackend=null -d dump-tweaks <file>.ly
 lilypond <file>.ly
 @end example
 
 lilypond <file>.ly
 @end example
 
+
+@node Vertical collision avoidance
+@subsection Vertical collision avoidance
+
+@funindex outside-staff-priority
+@funindex outside-staff-padding
+@funindex outside-staff-horizontal-padding
+
+Intuitively, there are some objects in musical notation that belong
+to the staff and there are other objects that should be placed outside
+the staff.  Objects belonging outside the staff include things such as
+rehearsal marks, text and dynamic markings (from now on, these will
+be called outside-staff objects).  LilyPond's rule for the
+vertical placement of outside-staff objects is to place them as close
+to the staff as possible but not so close that they collide with
+another object.
+
+LilyPond uses the @code{outside-staff-priority} property to determine
+whether a grob is an outside-staff object: if @code{outside-staff-priority}
+is a number, the grob is an outside-staff object.  In addition,
+@code{outside-staff-priority} tells LilyPond in which order the objects
+should be placed.
+
+First, LilyPond places all the objects that do not belong outside
+the staff.  Then it sorts the outside-staff objects according to their
+@code{outside-staff-priority} (in increasing order).  One by one, LilyPond
+takes the outside-staff objects and places them so that they do
+not collide with any objects that have already been placed.  That
+is, if two outside-staff grobs are competing for the same space, the one
+with the lower @code{outside-staff-priority} will be placed closer to
+the staff.
+
+@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
+c4_"Text"\pp
+r2.
+\once \override TextScript #'outside-staff-priority = #1
+c4_"Text"\pp % this time the text will be closer to the staff
+r2.
+% by setting outside-staff-priority to a non-number, 
+% we disable the automatic collision avoidance
+\once \override TextScript #'outside-staff-priority = ##f
+\once \override DynamicLineSpanner #'outside-staff-priority = ##f
+c4_"Text"\pp % now they will collide
+@end lilypond
+
+The vertical padding between an outside-staff object and the
+previously-positioned grobs can be controlled with
+@code{outside-staff-padding}.
+
+@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
+\once \override TextScript #'outside-staff-padding = #0
+a'^"This text is placed very close to the note"
+\once \override TextScript #'outside-staff-padding = #3
+c^"This text is padded away from the previous text"
+c^"This text is placed close to the previous text"
+@end lilypond
+
+TODO: this example doesn't work any more ?
+
+By default, outside-staff objects are placed without regard to
+their horizontal distance from the previously-positioned grobs.  This
+can lead to situations in which objects are placed very close to each
+other horizontally.  Setting @code{outside-staff-horizontal-padding}
+causes an object to be offset vertically so that such a situation
+doesn't occur.
+
+@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
+% the markup is too close to the following note
+c2^"Text"
+c''2
+% setting outside-staff-horizontal-padding fixes this
+R1
+\once \override TextScript #'outside-staff-horizontal-padding = #1
+c,,2^"Text"
+c''2
+@end lilypond
+
+
+
 @node Horizontal spacing
 @section Horizontal Spacing
 
 @node Horizontal spacing
 @section Horizontal Spacing
 
@@ -651,10 +1507,11 @@ lilypond <file>.ly
 @cindex spacing, horizontal
 
 @menu
 @cindex spacing, horizontal
 
 @menu
-* Horizontal spacing overview::
-* New spacing area::
-* Changing horizontal spacing::
-* Line length::
+* Horizontal spacing overview::  
+* New spacing area::            
+* Changing horizontal spacing::  
+* Line length::                 
+* Proportional notation::       
 @end menu
 
 
 @end menu
 
 
@@ -662,10 +1519,10 @@ lilypond <file>.ly
 @subsection Horizontal spacing overview
 
 The spacing engine translates differences in durations into stretchable
 @subsection Horizontal spacing overview
 
 The spacing engine translates differences in durations into stretchable
-distances (@q{springs}) of differring lengths.  Longer durations get
+distances (@q{springs}) of differing lengths.  Longer durations get
 more space, shorter durations get less.  The shortest durations get a
 fixed amount of space (which is controlled by
 more space, shorter durations get less.  The shortest durations get a
 fixed amount of space (which is controlled by
-@code{shortest-duration-space} in the @internalsref{SpacingSpanner}
+@code{shortest-duration-space} in the @rinternals{SpacingSpanner}
 object).  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.
 object).  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.
@@ -703,7 +1560,7 @@ an 8th note.  The shortest duration is printed when you run
 @code{lilypond} with the @code{--verbose} option.
 
 These durations may also be customized.  If you set the
 @code{lilypond} with the @code{--verbose} option.
 
 These durations may also be customized.  If you set the
-@code{common-shortest-duration} in @internalsref{SpacingSpanner}, then
+@code{common-shortest-duration} in @rinternals{SpacingSpanner}, then
 this sets the base duration for spacing.  The maximum duration for this
 base (normally an 8th), is set through @code{base-shortest-duration}.
 
 this sets the base duration for spacing.  The maximum duration for this
 base (normally an 8th), is set through @code{base-shortest-duration}.
 
@@ -722,12 +1579,12 @@ c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
 @end lilypond
 
 
 @end lilypond
 
 
-In the introduction (see @ref{Engraving}), it was explained that stem
+In the introduction (see @rlearning{Engraving}), it was explained that stem
 directions influence spacing.  This is controlled with the
 @code{stem-spacing-correction} property in the
 directions influence spacing.  This is controlled with the
 @code{stem-spacing-correction} property in the
-@internalsref{NoteSpacing}, object.  These are generated for every
-@internalsref{Voice} context.  The @code{StaffSpacing} object
-(generated in @internalsref{Staff} context) contains the same property
+@rinternals{NoteSpacing}, object.  These are generated for every
+@rinternals{Voice} context.  The @code{StaffSpacing} object
+(generated in @rinternals{Staff} context) contains the same property
 for controlling the stem/bar line spacing.  The following example shows
 these corrections, once with default settings, and once with
 exaggerated corrections:
 for controlling the stem/bar line spacing.  The following example shows
 these corrections, once with default settings, and once with
 exaggerated corrections:
@@ -748,12 +1605,11 @@ Proportional notation is supported; see @ref{Proportional notation}.
 
 @seealso
 
 
 @seealso
 
-Internals: @internalsref{SpacingSpanner}, @internalsref{NoteSpacing},
-@internalsref{StaffSpacing}, @internalsref{SeparationItem}, and
-@internalsref{SeparatingGroupSpanner}.
+Internals: @rinternals{SpacingSpanner}, @rinternals{NoteSpacing},
+@rinternals{StaffSpacing}, and @rinternals{SeparationItem}.
 
 
 
 
-@refbugs
+@knownissues
 
 There is no convenient mechanism to manually override spacing.  The
 following work-around may be used to insert extra space into a score.
 
 There is no convenient mechanism to manually override spacing.  The
 following work-around may be used to insert extra space into a score.
@@ -785,7 +1641,7 @@ c16[ c c8]
 
 
 The @code{\newSpacingSection} command creates a new
 
 
 The @code{\newSpacingSection} command creates a new
-@internalsref{SpacingSpanner} object, and hence new @code{\override}s
+@rinternals{SpacingSpanner} object, and hence new @code{\override}s
 may be used in that location.
 
 
 may be used in that location.
 
 
@@ -801,7 +1657,7 @@ music.  Note that @code{ly:make-moment} constructs
 a duration, so @code{1 4} is a longer duration
 than @code{1 16}.
 
 a duration, so @code{1 4} is a longer duration
 than @code{1 16}.
 
-@lilypond[relative,verbatim,line-width=12\cm]
+@lilypond[verbatim,line-width=12\cm]
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
@@ -812,7 +1668,7 @@ than @code{1 16}.
 }
 @end lilypond
 
 }
 @end lilypond
 
-@lilypond[relative,verbatim,line-width=12\cm]
+@lilypond[verbatim,line-width=12\cm]
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
 \score {
   \relative c'' {
     g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
@@ -831,7 +1687,7 @@ than @code{1 16}.
 @end lilypond
 
 
 @end lilypond
 
 
-@commonprop
+@snippets
 
 By default, spacing in tuplets depends on various non-duration
 factors (such as accidentals, clef changes, etc).  To disregard
 
 By default, spacing in tuplets depends on various non-duration
 factors (such as accidentals, clef changes, etc).  To disregard
@@ -915,308 +1771,499 @@ paragraph, the last line simply takes its natural horizontal length.
 @end example
 
 
 @end example
 
 
-@node Breaks
-@section Breaks
+@node Proportional notation
+@subsection Proportional notation
 
 
-@menu
-* Line breaking::               
-* Page breaking::               
-* Optimal page breaking::       
-* Optimal page turning::        
-@end menu
-
-@node Line breaking
-@subsection Line breaking
-
-@cindex line breaks
-@cindex breaking lines
+LilyPond supports proportional notation, a type of horizontal spacing
+in which each note consumes an amount of horizontal space exactly
+equivalent to its rhythmic duration.  This type of proportional spacing
+is comparable to horizontal spacing on top of graph paper.  Some late
+20th- and early 21st-century scores use proportional notation to
+clarify complex rhythmic relationships or to facilitate the placement
+of timelines or other graphics directly in the score.
 
 
-Line breaks are normally computed automatically.  They are chosen so
-that lines look neither cramped nor loose, and that consecutive lines
-have similar density.
+LilyPond supports five different settings for proportional notation,
+which may be used together or alone:
 
 
-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
-point.
+@itemize
+@item @code{proportionalNotationDuration}
+@item @code{uniform-stretching}
+@item @code{strict-note-spacing}
+@item @code{\remove Separating_line_group_engraver}
+@item @code{\override PaperColumn #'used = ##t}
+@end itemize
 
 
+In the examples that follow, we explore these five different
+proportional notation settings and examine how these settings interact.
 
 
-@cindex regular line breaks
-@cindex four bar music.
+We start with the following one-measure example, which uses classical
+spacing with ragged-right turned on.
 
 
-For line breaks at regular intervals use @code{\break} separated by
-skips and repeated with @code{\repeat}:
-@example
-<< \repeat unfold 7 @{
-         s1 \noBreak s1 \noBreak
-         s1 \noBreak s1 \break @}
-   @emph{the real music}
+@lilypond[quote,verbatim,ragged-right]
+\new Score <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
 >>
 >>
-@end example
-
-@noindent
-This makes the following 28 measures (assuming 4/4 time) be broken every
-4 measures, and only there.
-
-@refcommands
-
-@code{\break}, and @code{\noBreak}.
-@funindex \break
-@funindex \noBreak
-
-@seealso
-
-Internals: @internalsref{LineBreakEvent}.
+@end lilypond
 
 
-A linebreaking configuration can now be saved as a @code{.ly} file
-automatically.  This allows vertical alignments to be stretched to
-fit pages in a second formatting run.  This is fairly new and
-complicated; see @inputfileref{input/regression/,page-layout-twopass.ly}
-for details.
+Notice that the half note which begins the measure takes up far less
+than half of the horizontal space of the measure.  Likewise, the
+sixteenth notes and sixteenth-note quintuplets (or twentieth notes)
+which end the measure together take up far more than half the
+horizontal space of the measure.
 
 
-@refbugs
+In classical engraving, this spacing may be exactly what we want
+because we can borrow horizontal space from the half note and conserve
+horizontal space across the measure as a whole.
 
 
-Line breaks can only occur if there is a @q{proper} bar line.  A note
-which is hanging over a bar line is not proper, such as
+On the other hand, if we want to insert a measured timeline or other
+graphic above or below our score, we need proportional notation.  We
+turn proportional notation on with the proportionalNotationDuration
+setting.
 
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-c4 c2 c2 \break   % this does nothing
-c2 c4 |           % a break here would work
-c4 c2 c4 ~ \break % as does this break
-c4 c2 c4
+@lilypond[quote,verbatim,ragged-right]
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 20)
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+>>
 @end lilypond
 
 @end lilypond
 
-To allow line breaks on such bar lines, the
-@code{Forbid_line_break_engraver} can be removed from @code{Voice}
-context, like so
+The half note at the beginning of the measure and the faster notes in
+the second half of the measure now occupy equal amounts of horizontal
+space.  We could place a measured timeline or graphic above or below
+this example.
+
+The @code{proportionalNotationDuration} setting is a context setting that
+lives in @code{Score}.  Recall that context settings appear in one of
+three locations in our input file -- in a @code{\with} block, in a
+@code{\context} block, or directly in music entry
+preceded by the @code{\set} command.  As with all
+context settings, users can pick which of the three different
+locations they would like to set @code{proportionalNotationDuration}.
+
+The @code{proportionalNotationDuration} setting takes a single argument,
+which is the reference duration against which all music will be
+spaced.  The LilyPond Scheme function make-moment takes two arguments
+-- a numerator and denominator which together express some fraction of
+a whole note.  The call @code{#(ly:make-moment 1 20)} therefore produces a
+reference duration of a twentieth note.  The values
+@code{#(ly:make-moment 1 16)}, @code{#(ly:make-moment 1 8)}, and
+@code{#(ly:make-moment 3 97)} are all possible as well.
+
+How do we select the right reference duration to pass to
+@code{proportionalNotationDuration}?  Usually by a process of trial and error,
+beginning with a duration close to the fastest (or smallest) duration
+in the piece.  Smaller reference durations space music loosely; larger
+reference durations space music tightly.
+
+@lilypond[quote,verbatim,ragged-right]
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 8)
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+>>
 
 
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 16)
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+>>
 
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\new Voice \with {
-  \remove "Forbid_line_break_engraver"
-} {
-  c4 c2 c2 \break   % now the break is allowed
-  c2 c4
-}
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 32)
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+>>
 @end lilypond
 
 @end lilypond
 
+Note that too large a reference duration -- such as the eighth note,
+above -- spaces music too tightly and can cause note head collisions.
+Note also that proportional notation in general takes up more
+horizontal space that does classical spacing.  Proportional spacing
+provides rhythmic clarity at the expense of horizontal space.
 
 
+Next we examine how to optimally space overlapping tuplets.
 
 
-@node Page breaking
-@subsection Page breaking
+We start by examining what happens to our original example, with
+classical spacing, when we add a second staff with a different type of
+tuplet.
 
 
-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 at a bar line.  These commands force and forbid a page-break
-from happening.  Of course, the @code{\pageBreak} command also forces
-a line break.
+@lilypond[quote,verbatim,ragged-right]
+\new Score <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+  \new RhythmicStaff {
+    \times 8/9 {
+      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
+    }
+  }
+>>
+@end lilypond
 
 
-Page breaks are computed by the @code{page-breaking} function.
-LilyPond provides two algorithms for computing page
-breaks, @code{ly:optimal-breaking} and @code{ly:page-turn-breaking}. The
-default is @code{ly:optimal-breaking}, but the value can be changed in
-the @code{\paper} block:
+The spacing is bad because the evenly notes of the bottom staff do not
+stretch uniformly.  Classical engraving includes very few complex
+triplets and so classical engraving rules can generate this type of
+result.  Setting @code{proportionalNotationDuration} remedies this
+situation considerably.
 
 
-@example
-\paper@{
-  #(define page-breaking ly:page-turn-breaking)
-@}
-@end example
+@lilypond[quote,verbatim,ragged-right]
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 20)
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+  \new RhythmicStaff {
+    \times 8/9 {
+      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
+    }
+  }
+>>
+@end lilypond
 
 
-The old page breaking algorithm is called
-@code{optimal-page-breaks}. If you are having trouble with the new page
-breakers, you can enable the old one as a workaround.
+But if we look very carefully we can see that notes of the second half
+of the 9-tuplet space ever so slightly more widely than do the notes
+of the first half of the 9-tuplet.  To ensure uniform stretching, we
+turn on @code{uniform-stretching}, which is a property of
+@code{SpacingSpanner}.
 
 
-@refcommands
+@lilypond[quote,verbatim,ragged-right]
+\new Score \with {
+  proportionalNotationDuration = #(ly:make-moment 1 20)
+  \override SpacingSpanner #'uniform-stretching = ##t
+} <<
+  \new RhythmicStaff {
+    c'2
+    c'16 c'16 c'16 c'16
+    \times 4/5 {
+      c'16 c'16 c'16 c'16 c'16
+    }
+  }
+  \new RhythmicStaff {
+    \times 8/9 {
+      c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
+    }
+  }
+>>
+@end lilypond
 
 
-@funindex \pageBreak
-@code{\pageBreak}
-@funindex \noPageBreak
-@code{\noPageBreak}
+Our two-staff example now spaces exactly, our rhythmic
+relationships are visually clear, and we can include a measured
+timeline or graphic if we want.
+
+Note that the LilyPond's proportional notation package expects
+that all proportional scores set the SpacingSpanner's
+'uniform-stretching attribute to ##t. Setting
+proportionalNotationDuration without also setting the
+SpacingSpanner's 'uniform-stretching attribute to ##t will, for
+example, cause Skips to consume an incorrect amount of horizontal
+space.
+
+The SpacingSpanner is an abstract grob that lives in the Score
+context. As with our settings of proportionalNotationDuration,
+overrides to the SpacingSpanner can occur in any of three
+different places in our input file – in the Score \with block, in
+a Score \context block, or in note entry directly.
+
+There is by default only one @code{SpacingSpanner} per @code{Score}.  This
+means that, by default, @code{uniform-stretching} is either turned on for the
+entire score or turned off for the entire score.  We can, however,
+override this behavior and turn on different spacing features at
+different places in the score.  We do this with the command
+@code{\newSpacingSection}.  See @ref{New spacing area}, for more info.
+
+Next we examine the effects of the @code{Separating_line_group_engraver} and
+see why proportional scores frequently remove this engraver.  The following
+example shows that there is a small amount of @qq{preferatory} space
+just before the first note in each system.
+
+@lilypond[quote,verbatim,ragged-right]
+\paper {
+  indent = #0
+}
 
 
+\new Staff {
+  c'1
+  \break
+  c'1
+}
+@end lilypond
 
 
-@node Optimal page breaking
-@subsection Optimal page breaking
 
 
-@funindex ly:optimal-breaking
+The amount of this preferatory space is the same whether after a time
+signature, a key signature or a clef.  @code{Separating_line_group_engraver}
+is responsible for this space.  Removing @code{Separating_line_group_engraver}
+reduces this space to zero.
 
 
-The @code{ly:optimal-breaking} function is LilyPond's default method of
-determining page breaks. It attempts to find a page breaking that minimizes
-cramping and stretching, both horizontally and vertically. Unlike
-@code{ly:page-turn-breaking}, it has no concept of page turns.
+@lilypond[quote,verbatim,ragged-right]
+\paper {
+  indent = #0
+}
 
 
+\new Staff \with {
+  \remove Separating_line_group_engraver
+} {
+  c'1
+  \break
+  c'1
+}
+@end lilypond
 
 
-@node Optimal page turning
-@subsection Optimal page turning
+Nonmusical elements like time signatures, key signatures, clefs and
+accidentals are problematic in proportional notation.  None of these
+elements has rhythmic duration.  But all of these elements consume
+horizontal space.  Different proportional scores approach these
+problems differently.
+
+It may be possible to avoid spacing problems with key signatures
+simply by not having any.  This is a valid option since most
+proportional scores are contemporary music.  The same may be true
+of time signatures, especially for those scores
+that include a measured timeline or other graphic.  But these scores
+are exceptional and most proportional scores include at least some
+time signatures.  Clefs and accidentals are even more essential.
+
+So what strategies exist for spacing nonmusical elements in a
+proportional context?  One good option is the @code{strict-note-spacing}
+property of @code{SpacingSpanner}.  Compare the two scores below:
+
+@lilypond[quote,verbatim,ragged-right]
+\new Staff {
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  c''8
+  c''8
+  c''8
+  \clef alto
+  d'8
+  d'2
+}
 
 
-@funindex ly:page-turn-breaking
+\new Staff {
+  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+  \override Score.SpacingSpanner #'strict-note-spacing = ##t
+  c''8
+  c''8
+  c''8
+  \clef alto
+  d'8
+  d'2
+}
+@end lilypond
 
 
-Often it is necessary to find a page breaking configuration so that there is
-a rest at the end of every second page. This way, the musician can turn the
-page without having to miss notes. The @code{ly:page-turn-breaking} function
-attempts to find a page breaking minimizing cramping and stretching, but with
-the additional restriction that it is only allowed to introduce page turns
-in specified places.
+Both scores are proportional, but the spacing in the first score
+is too loose because of the clef change. The spacing of the second
+score remains strict, however, because strict-note-spacing is
+turned on.  Turning on strict-note-spacing causes the width of
+time signatures, key signatures, clefs and accidentals to play no
+part in the spacing algorithm.
 
 
-There are two steps to using this page breaking function. First, you must
-enable it in the @code{\paper} block. Then, you must tell the function
-where you would like to allow page breaks.
+In addition to the settings given here, there are other settings
+that frequently appear in proportional scores. These include:
 
 
-There are two ways to achieve the second step. First, you can specify each
-potential page turn manually, by inserting @code{\allowPageTurn} into your
-input file at the appropriate places.
+@itemize
+@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
+@item @code{tupletFullLength = ##t}
+@item @code{\override Beam #'breakable = ##t}
+@item @code{\override Glissando #'breakable = ##t}
+@item @code{\override TextSpanner #'breakable = ##t}
+@item @code{\remove Forbid_line_break_engraver in the Voice context}
+@end itemize
 
 
-If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or
-Voice context. The @code{Page_turn_engraver} will scan the context for
-sections without notes (note that it does not scan for rests; it scans for
-the absence of notes. This is so that single-staff polyphony with rests in one
-of the parts does not throw off the @code{Page_turn_engraver}). When it finds
-a sufficiently long section without notes, the @code{Page_turn_engraver} will
-insert an @code{\allowPageTurn} at the final barline in that section, unless
-there is a @q{special} barline (such as a double bar), in which case the
-@code{\allowPageTurn} will be inserted at the final @q{special} barline in
-the section.
+These settings space grace notes strictly, extend tuplet brackets to
+mark both rhythmic start- and stop-points, and allow spanning elements
+to break across systems and pages.  See the respective parts of the manual
+for these related settings.
 
 
-@funindex minimumPageTurnLength
-The @code{Page_turn_engraver} reads the context property
-@code{minimumPageTurnLength} to determine how long a note-free section must
-be before a page turn is considered. The default value for
-@code{minimumPageTurnLength} is @code{#(ly:make-moment 1 1)}. If you want
-to disable page turns, you can set it to something very large.
 
 
-@example
-\new Staff \with @{ \consists "Page_turn_engraver" @}
-@{
-  a4 b c d |
-  R1 | % a page turn will be allowed here
-  a4 b c d |
-  \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
-  R1 | % a page turn will not be allowed here
-  a4 b r2 |
-  R1*2 | % a page turn will be allowed here
-  a1
-@}
-@end example
+@node Fitting music onto fewer pages
+@section Fitting music onto fewer pages
 
 
-@funindex minimumRepeatLengthForPageTurn
-The @code{Page_turn_engraver} detects volta repeats. It will only allow a page
-turn during the repeat if there is enough time at the beginning and end of the
-repeat to turn the page back. The @code{Page_turn_engraver} can also disable
-page turns if the repeat is very short. If you set the context property
-@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will
-only allow turns in repeats whose duration is longer than this value.
+Sometimes you can end up with one or two staves on a second
+(or third, or fourth...) page.  This is annoying, especially
+if you look at previous pages and it looks like there is plenty
+of room left on those.
 
 
-@refbugs
+When investigating layout issues, @code{annotate-spacing} is an
+invaluable tool.  This command prints the values of various layout
+spacing variables; for more details see the following section,
+@ref{Displaying spacing}.
 
 
-There should only be one @code{Page_turn_engraver} in a score. If there is more
-than one, they will interfere with each other.
+@menu
+* Displaying spacing::
+* Changing spacing::
+@end menu
 
 
 @node Displaying spacing
 
 
 @node Displaying spacing
-@section Displaying spacing
+@subsection Displaying spacing
 
 @funindex annotate-spacing
 
 @funindex annotate-spacing
-@cindex Spacing, display of properties
-
-To graphically display the dimensions of vertical properties that may
-be altered for page formatting, set @code{annotate-spacing} in the
-@code{\paper} block, like this
+@cindex spacing, display of layout
 
 
+To graphically display the dimensions of vertical layout variables
+that may be altered for page formatting, set
+@code{annotate-spacing} in the @code{\paper} block:
 
 
-@lilypond[verbatim]
+@c need to have \book{} otherwise we get the separate systems. -hwn
+@lilypond[verbatim,quote]
 #(set-default-paper-size "a6" 'landscape)
 #(set-default-paper-size "a6" 'landscape)
-
 \book {
   \score { { c4 } }
   \paper { annotate-spacing = ##t }
 }
 @end lilypond
 
 \book {
   \score { { c4 } }
   \paper { annotate-spacing = ##t }
 }
 @end lilypond
 
-@c need to have \book{} otherwise we get  the separate systems. -hwn
-
 @noindent
 @noindent
-@c  FIXME: really bad vagueness due to bug in annotate-spacing.  -gp
-Some unit dimensions are measured in staff spaces, while others
-are measured in millimeters.
-The pairs
-(@var{a},@var{b}) are intervals, where @var{a} is the lower edge and
-@var{b} the upper edge of the interval.
+All layout dimensions are displayed in staff spaces, regardless of
+the units specified in the @code{\paper} or @code{\layout} block.
+For example, @code{paper-height} has a value of 59.75 staff
+spaces, using the default staff size of 20 points, which is
+equivalent to 148 millimeters, the height of @code{a6} paper in
+landscape orientation.  The pairs (@var{a},@var{b}) are intervals,
+where @var{a} is the lower edge and @var{b} the upper edge of the
+interval.
 
 
 
 
-@node Vertical collision avoidance
-@section Vertical collision avoidance
+@node Changing spacing
+@subsection Changing spacing
 
 
-@funindex outside-staff-priority
-@funindex outside-staff-padding
-@funindex outside-staff-horizontal-padding
+The output of @code{annotate-spacing} reveals vertical dimensions
+in great detail.  For details about modifying margins and other
+layout variables, see @ref{Page formatting}.
 
 
-Intuitively, there are some objects in musical notation that belong
-to the staff and there are other objects that should be placed outside
-the staff.  Objects belonging outside the staff include things such as
-rehearsal marks, text and dynamic markings (from now on, these will
-be called outside-staff objects).  LilyPond's rule for the
-vertical placement of outside-staff objects is to place them as close
-to the staff as possible but not so close that they collide with
-another object.
+Other than margins, there are a few other options to save space:
 
 
-LilyPond uses the @code{outside-staff-priority} property to determine
-whether a grob is an outside-staff object: if @code{outside-staff-priority}
-is a number, the grob is an outside-staff object.  In addition,
-@code{outside-staff-priority} tells LilyPond in which order the objects
-should be placed.
+@itemize
+@item
+Force systems to move as close together as possible (to fit as
+many systems as possible onto a page) while being spaced so that
+there is no blank space at the bottom of the page.
 
 
-First, LilyPond places all the objects that do not belong outside
-the staff.  Then it sorts the outside-staff objects according to their
-@code{outside-staff-priority} (in increasing order).  One by one, LilyPond
-takes the outside-staff objects and places them so that they do
-not collide with any objects that have already been placed.  That
-is, if two outside-staff grobs are competing for the same space, the one
-with the lower @code{outside-staff-priority} will be placed closer to
-the staff.
+@example
+\paper @{
+  between-system-padding = #0.1
+  between-system-space = #0.1
+  ragged-last-bottom = ##f
+  ragged-bottom = ##f
+@}
+@end example
 
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-c4_"Text"\pp
-r2.
-\once \override TextScript #'outside-staff-priority = #1
-c4_"Text"\pp % this time the text will be closer to the staff
-r2.
-% by setting outside-staff-priority to a non-number, we
-% disable the automatic collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\once \override DynamicLineSpanner #'outside-staff-priority = ##f
-c4_"Text"\pp % now they will collide
+@item
+Force the number of systems.  For example, if the default layout
+has 11 systems, the following assignment will force a layout with
+10 systems.
+
+@example
+\paper @{
+  system-count = #10
+@}
+@end example
+
+@item
+Avoid (or reduce) objects that increase the vertical size of a
+system.  For example, volta repeats (or alternate repeats) require
+extra space.  If these repeats are spread over two systems, they
+will take up more space than one system with the volta repeats and
+another system without.  For example, dynamics that @q{stick out} of
+a system can be moved closer to the staff:
+
+@lilypond[verbatim,quote,relative=1]
+e4 c g\f c
+\override DynamicText #'extra-offset = #'( -2.2 . 2.0)
+e4 c g\f c
 @end lilypond
 
 @end lilypond
 
-The vertical padding between an outside-staff object and the
-previously-positioned grobs can be controlled with
-@code{outside-staff-padding}.
+@item
+Alter the horizontal spacing via @code{SpacingSpanner}.  For more
+details, see @ref{Changing horizontal spacing}.  The following
+example illustrates the default spacing:
 
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\once \override TextScript #'outside-staff-padding = #0
-a'^"This text is placed very close to the note"
-\once \override TextScript #'outside-staff-padding = #3
-c^"This text is padded away from the previous text"
-c^"This text is placed close to the previous text"
+@lilypond[verbatim,quote]
+\score {
+  \relative c'' {
+    g4 e e2 |
+    f4 d d2 |
+    c4 d e f |
+    g4 g g2 |
+    g4 e e2 |
+  }
+}
 @end lilypond
 
 @end lilypond
 
-By default, outside-staff objects are placed without regard to
-their horizontal distance from the previously-posititioned grobs.  This
-can lead to situations in which objects are placed very close to each
-other horizontally.  Setting @code{outside-staff-horizontal-padding}
-causes an object to be offset vertically so that such a situation
-doesn't occur.
+@noindent
+The next example modifies @code{common-shortest-duration} from a
+value of @code{1/4} to @code{1/2}.  The quarter note is the most
+common and shortest duration in this example, so by making this
+duration longer, a @q{squeezing} effect occurs:
 
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-% the markup is too close to the following note
-c2^"Text"
-c''2
-% setting outside-staff-horizontal-padding fixes this
-R1
-\once \override TextScript #'outside-staff-horizontal-padding = #1
-c,,2^"Text"
-c''2
+@lilypond[verbatim,quote]
+\score {
+  \relative c'' {
+    g4 e e2 |
+    f4 d d2 |
+    c4 d e f |
+    g4 g g2 |
+    g4 e e2 |
+  }
+  \layout {
+    \context {
+      \Score
+      \override SpacingSpanner
+        #'common-shortest-duration = #(ly:make-moment 1 2)
+    }
+  }
+}
 @end lilypond
 @end lilypond
+
+@noindent
+The @code{common-shortest-duration} property cannot be modified
+dynamically, so it must always be placed in a @code{\context}
+block so that it applies to the whole score.
+
+@end itemize
+
+
+@seealso
+
+Notation Reference:
+@ref{Page formatting},
+@ref{Changing horizontal spacing}.