]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/notation/spacing.itely
Doc: NR: Capitalize "f" in "Installed files".
[lilypond.git] / Documentation / notation / spacing.itely
index 7e9b1d66aa232acf386d92db569d1da1e7ae51d4..37a15d5c9f6708de448d7af686bd78c57063365e 100644 (file)
@@ -4,10 +4,11 @@
     Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
 
     When revising a translation, copy the HEAD committish of the
-    version that you are working on.  See TRANSLATION for details.
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
 @end ignore
 
-@c \version "2.12.0"
+@c \version "2.13.39"
 
 @ignore
 GDP TODO list
@@ -36,11 +37,11 @@ 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
+sends to an incomplete
+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
+missing from the list.  Who has the
 knowledge to fix this?
 
 
@@ -67,19 +68,18 @@ 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.
 
-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.
+Two types of blocks can contain layout settings:
+@code{\paper @{@dots{}@}} and @code{\layout @{@dots{}@}}.  The
+@code{\paper} block contains page layout settings that are
+expected to be the same for all scores in a book, such as the
+paper height, or whether to print page numbers, etc.  See
+@ref{Page layout}.  The @code{\layout} block contains score layout
+settings, such as the number of systems to use, or the space
+between staff-groups, etc.  See @ref{Score layout}.
 
 @menu
-* Paper and pages::
-* Music layout::
+* Page layout::
+* Score layout::
 * Breaks::
 * Vertical spacing::
 * Horizontal spacing::
@@ -87,24 +87,111 @@ be placed in either.
 @end menu
 
 
-@node Paper and pages
-@section Paper and pages
+@node Page layout
+@section Page layout
 
-This section deals with the boundaries that define the area
-within which music can be printed.
+This section discusses page layout options for the @code{\paper}
+block.
 
 @menu
-* Paper size::
-* Page formatting::
+* The \paper block::
+* Paper size and automatic scaling::
+* Fixed vertical spacing \paper variables::
+* Flexible vertical spacing \paper variables::
+* Horizontal spacing \paper variables::
+* Other \paper variables::
 @end menu
 
 
-@node Paper size
-@subsection Paper size
+@node The \paper block
+@subsection The @code{\paper} block
+
+The @code{\paper} block can appear within a @code{\book} block,
+but not within a @code{\score} block.  Settings in a @code{\paper}
+block apply to the entire book, which may include multiple scores.
+Settings that can appear in a @code{\paper} block include:
+
+@itemize
+
+@item
+the @code{set-paper-size} scheme function,
+
+@item
+@code{\paper} variables used for customizing page layout, and
+
+@item
+markup definitions used for customizing the layout of headers,
+footers, and titles.
+
+@end itemize
+
+The @code{set-paper-size} function is discussed in the next
+section, @ref{Paper size and automatic scaling}.  The
+@code{\paper} variables that deal with page layout are discussed
+in later sections.  The markup definitions that deal with headers,
+footers, and titles are discussed in
+@ref{Custom headers footers and titles}.
+
+Most @code{\paper} variables will only work in a @code{\paper}
+block.  The few that will also work in a @code{\layout} block are
+listed in @ref{The \layout block}.
+
+Except when specified otherwise, all @code{\paper} variables that
+correspond to distances on the page are measured in millimeters,
+unless a different unit is specified by the user.  For example,
+the following declaration sets @code{top-margin} to ten
+millimeters:
+
+@example
+\paper @{
+  top-margin = 10
+@}
+@end example
+
+To set it to @code{0.5} inches, use the @code{\in} unit suffix:
+
+@example
+\paper @{
+  top-margin = 0.5\in
+@}
+@end example
+
+The available unit suffixes are @code{\mm}, @code{\cm},
+@code{\in}, and @code{\pt}.  For the sake of clarity, when using
+millimeters, the @code{\mm} is typically included in the code,
+even though it is not technically necessary.
+
+It is also possible to define @code{\paper} values using Scheme.
+The Scheme equivalent of the above example is:
+
+@example
+\paper @{
+  #(define top-margin (* 0.5 in))
+@}
+@end example
+
+@seealso
+Notation Reference:
+@ref{Custom headers footers and titles}.
+
+
+@node Paper size and automatic scaling
+@subsection Paper size and automatic scaling
 
 @cindex paper size
 @cindex page size
 
+@funindex \paper
+
+@menu
+* Setting paper size::
+* Automatic scaling to paper size::
+@end menu
+
+
+@node Setting paper size
+@unnumberedsubsubsec Setting paper size
+
 Two functions are available for changing the paper size:
 @code{set-default-paper-size} and @code{set-paper-size}.
 @code{set-default-paper-size} must be placed in the toplevel
@@ -122,6 +209,13 @@ block:
 @end example
 
 @noindent
+In the toplevel scope, the @code{set-default-paper-size} function
+can safely be called anywhere before the first @code{\paper}
+block.  Within a @code{\paper} block, the safest place to call
+@code{set-paper-size} is at the top, above the list of variable
+declarations.  The reasons for this are discussed in
+@ref{Automatic scaling to paper size}.
+
 @code{set-default-paper-size} sets the size of all pages, whereas
 @code{set-paper-size} only sets the size of the pages that the
 @code{\paper} block applies to.  For example, if the @code{\paper}
@@ -132,7 +226,7 @@ to all pages.  If the @code{\paper} block is inside a
 Common paper sizes are available, including @code{a4},
 @code{letter}, @code{legal}, and @code{11x17} (also known as
 tabloid).  Many more paper sizes are supported by default.  For
-details, see @file{scm/@/paper@/.scm}, and search for the
+details, see @file{scm/paper.scm}, and search for the
 definition of @code{paper-alist}.
 
 @c TODO add a new appendix for paper sizes (auto-generated) -pm
@@ -141,7 +235,7 @@ definition of @code{paper-alist}.
 
 Extra sizes may be added by editing the definition of
 @code{paper-alist} in the initialization file
-@file{scm/@/paper@/.scm}, however they will be overridden on a
+@file{scm/paper.scm}, however they will be overridden on a
 subsequent install.
 
 @cindex orientation
@@ -155,489 +249,704 @@ degrees, and wider line widths will be set accordingly.
 #(set-default-paper-size "a6" 'landscape)
 @end example
 
-Setting the paper size will adjust a number of @code{\paper}
-variables, such as margins.  To use a particular paper size with
-altered @code{\paper} variables, set the paper size before setting
-the variables.
-
-
 @seealso
 Installed Files:
-@file{scm/@/paper@/.scm}.
+@file{scm/paper.scm}.
+
+
+@node Automatic scaling to paper size
+@unnumberedsubsubsec Automatic scaling to paper size
+
+If the paper size is changed with one of the scheme functions
+(@code{set-default-paper-size} or @code{set-paper-size}), the
+values of several @code{\paper} variables are automatically scaled
+to the new size.  To bypass the automatic scaling for a particular
+variable, set the variable after setting the paper size.  Note
+that the automatic scaling is not triggered by setting
+@code{paper-height} or @code{paper-width}, even though
+@code{paper-width} can influence other values (this is separate
+from scaling and is discussed below).  The
+@code{set-default-paper-size} and @code{set-paper-size} functions
+are described in @ref{Setting paper size}.
+
+The vertical dimensions affected by automatic scaling are
+@code{top-margin} and @code{bottom-margin}.  The horizontal
+dimensions affected by automatic scaling are @code{left-margin},
+@code{right-margin}, @code{inner-margin}, @code{outer-margin},
+@code{binding-offset}, @code{indent}, and @code{short-indent}.
+
+The default values for these dimensions are set in
+@file{ly/paper-defaults-init.ly}, using internal variables named
+@code{top-margin-default}, @code{bottom-margin-default}, etc.
+These are the values that result at the default paper size
+@code{a4}.  For reference, with @code{a4} paper the
+@code{paper-height} is @code{297\mm} and the @code{paper-width} is
+@code{210\mm}.
 
-Snippets:
-@rlsr{Spacing}.
+@seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly},
+@file{scm/paper.scm}.
 
 
-@node Page formatting
-@subsection Page formatting
+@node Fixed vertical spacing \paper variables
+@subsection Fixed vertical spacing @code{\paper} variables
 
-Margins, headers, and footers and other layout variables are
-automatically set according to the paper size.
+@warning{Some @code{@bs{}paper} dimensions are automatically
+scaled to the paper size, which may lead to unexpected behavior.
+See @ref{Automatic scaling to paper size}.}
 
-This section lists and describes a number of paper variables that
-may be altered.
+Default values (before scaling) are defined in
+@file{ly/paper-defaults-init.ly}.
 
-@menu
-* Vertical dimensions::
-* Horizontal dimensions::
-* Other layout variables::
-@end menu
+@table @code
+@item paper-height
+@funindex paper-height
 
+The height of the page, unset by default.  Note that the automatic
+scaling of some vertical dimensions is not affected by this.
 
-@node Vertical dimensions
-@unnumberedsubsubsec Vertical dimensions
+@item top-margin
+@funindex top-margin
 
-These variables are used to set different vertical dimensions on a
-page:
+The margin between the top of the page and the top of the
+printable area.  If the paper size is modified, this dimension's
+default value is scaled accordingly.
 
-@funindex \paper
+@item bottom-margin
+@funindex bottom-margin
 
-@table @code
+The margin between the bottom of the printable area and the bottom
+of the page.  If the paper size is modified, this dimension's
+default value is scaled accordingly.
 
-@item after-title-spacing
-@funindex after-title-spacing
-
-Specifies how to calculate the space between a title (or top-level markup)
-and the system that follows it.  This is an associative list with five
-components:
-@itemize @bullet
-@item @var{space} -- the amount of stretchable space between the baseline
-of a title and the center of the staff that follows it;
-@item @var{padding} -- the minimum amount of whitespace that must be
-present between a title and the staff that follows it;
-@item @var{stretchability} -- the ease with which the stretchable
-space increases when a page is stretched.
-If this is zero, the distance to the next staff will not stretch at all;
-@item @var{minimum-distance} -- the minimum distance to place between
-the baseline of a title and the center of the staff that follows it. This differs
-from @var{padding} in that the height of a staff has no effect on
-the application of @var{minimum-distance} (whereas the height of a
-staff is crucial for @var{padding}).
-@end itemize
+@item ragged-bottom
+@funindex ragged-bottom
 
-If a page has a ragged bottom, @var{space} is not stretched. In particular, the
-resulting distance on such a page is the largest of
-@itemize @bullet
-@item @var{space},
-@item @var{minimum-distance}, and
-@item @var{padding} plus the smallest distance necessary to eliminate overlap.
-@end itemize
+If set to true, systems will not spread vertically down the page.
+This does not affect the last page.  This should be set to true
+for pieces that have only two or three systems per page, for
+example orchestral scores.
 
-@item before-title-spacing
-@funindex before-title-spacing
+@item ragged-last-bottom
+@funindex ragged-last-bottom
 
-Specifies the spacing between a system and the title (or top-level markup) that
-follows it.
-The distances are measured from the center of the last staff in the system to
-the baseline of the title that follows it.  See @var{after-title-spacing}.
+If set to false, systems will spread vertically down the last
+page.  Pieces that amply fill two pages or more should have this
+set to true.  It also affects the last page of book parts, i.e.
+parts of a book created with @code{\bookpart} blocks.
 
-@item between-scores-system-spacing
-@funindex between-scores-system-spacing
+@end table
 
-Specifies the spacing between two systems if they are in different scores, but
-there is no title between them. See @var{after-title-spacing}.
+@seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
 
-@item between-system-spacing
-@funindex between-system-spacing
+Snippets:
+@rlsr{Spacing}.
 
-Specifies the spacing between the center of the bottom staff of one system
-and the center of the top staff of the following system.  See @var{after-title-spacing}.
+@knownissues
 
-@item between-title-spacing
-@funindex between-title-spacing
+The titles (from the @code{\header} block) are treated as a
+system, so @code{ragged-bottom} and @code{ragged-last-bottom} will
+add space between the titles and the first system of the score.
 
-Specifies the spacing between two titles (or top-level markups).
-The distances are measured from the baseline of the first title to the baseline
-of the second.  See @var{after-title-spacing}.
 
-@item bottom-margin
-@funindex bottom-margin
+@node Flexible vertical spacing \paper variables
+@subsection Flexible vertical spacing @code{\paper} variables
 
-The margin between footer and bottom of the page.  Default:
-@code{6\mm}.
+In most cases, it is preferable for the vertical distances between
+certain items (such as margins, titles, systems, and separate
+scores) to be flexible, so that they stretch and compress nicely
+according to each situation.  A number of @code{\paper} variables
+(listed below) are available to fine-tune the stretching behavior
+of these dimensions.
 
-@item bottom-system-spacing
-@funindex bottom-system-spacing
+Note that the @code{\paper} variables discussed in this section do
+not control the spacing of staves within individual systems.
+Within-system spacing is controlled by grob properties, with
+settings typically entered inside a @code{\score} or
+@code{\layout} block, and not inside a @code{\paper} block.  See
+@ref{Flexible vertical spacing within systems}.
 
-Specifies the spacing from the center of the last staff (or the
-baseline of the last top-level markup) to the bottom of the
-printable area (ie. the top of the bottom margin).
-See @var{after-title-spacing}.
+@menu
+* Structure of flexible vertical spacing alists::
+* List of flexible vertical spacing \paper variables::
+@end menu
 
-@item foot-separation
-@funindex foot-separation
 
-Distance between the bottom-most music system and the page
-footer.  Default: @code{4\mm}.
+@node Structure of flexible vertical spacing alists
+@unnumberedsubsubsec Structure of flexible vertical spacing alists
 
-@item top-title-spacing
-@funindex top-title-spacing
+Each of the flexible vertical spacing @code{\paper} variables is
+an alist (association list) containing four @emph{keys}:
 
-Specifies the spacing from the top of the printable area (ie.
-the bottom of the top margin) to the baseline of the title.
-See @var{after-title-spacing}.
+@itemize
 
-@item top-system-spacing
-@funindex top-system-spacing
+@item
+@code{padding} -- the minimum required amount of unobstructed
+vertical whitespace between two items, measured in staff-spaces.
+This can be thought of as the minimum height of an unobstructed
+(invisible) rectangle that extends from the leftmost to the
+rightmost point of the combined items.
 
-Specifies the spacing from the top of the printable area (ie.
-the bottom of the top margin) to the center of the first staff.
-This only takes effect if there is no title at the top of the
-page (in which case @var{top-title-spacing} is used instead).
-See @var{after-title-spacing}.
+@item
+@code{space} -- the vertical distance, measured in staff-spaces,
+between the @emph{reference points} of the two items, when no
+collisions would result, and no stretching or compressing is in
+effect.  The reference point of a (title or top-level) markup is
+its highest point, and the reference point of a system is the
+vertical center of the nearest @code{StaffSymbol} -- even if a
+non-staff line (such as a @code{Lyrics} context) is in the way.
+Values for @code{space} that are less than either @code{padding}
+or @code{minimum-distance} are not meaningful, since the resulting
+distance will never be less than either @code{padding} or
+@code{minimum-distance}.
 
-@item paper-height
-@funindex paper-height
+@item
+@code{minimum-distance} -- the smallest allowable vertical
+distance, measured in staff-spaces, between the reference points
+of the two items, when compressing is in effect.  Values for
+@code{minimum-distance} that are less than @code{padding} are not
+meaningful, since the resulting distance will never be less than
+@code{padding.}
 
-The height of the page.  Default: the height of the current paper
-size.  For details, see @ref{Paper size}.
+@item
+@code{stretchability} -- a unitless measure of the dimension's
+relative propensity to stretch.  If zero, the distance will not
+stretch (unless collisions would result).  When positive, the
+significance of a particular dimension's @code{stretchability}
+value lies only in its relation to the @code{stretchability}
+values of the other dimensions.  For example, if one dimension has
+twice the @code{stretchability} of another, it will stretch twice
+as easily.  Values should be non-negative and finite.  The value
+@code{+inf.0} triggers a @code{programming_error} and is ignored,
+but @code{1.0e7} can be used for an almost infinitely stretchable
+spring.  If unset, the default value is set to @code{space}.  Note
+that the dimension's propensity to @emph{compress} cannot be
+directly set by the user and is equal to
+(@code{space}@tie{}@minus{}@tie{}@code{minimum-distance}).
 
-@item top-margin
-@funindex top-margin
+@end itemize
 
-The margin between header and top of the page.  Default:
-@code{5\mm}.
+If a page has a ragged bottom, the resulting distance is the
+largest of:
 
-@end table
+@itemize
 
+@item
+@code{space},
 
-@snippets
+@item
+@code{minimum-distance}, and
 
-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.
+@item
+@code{padding} plus the smallest distance necessary to eliminate
+collisions.
 
-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.
+@end itemize
 
-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
+Specific methods for modifying alists are discussed in
+@ref{Modifying alists}.  The following example demonstrates the
+two ways these alists can be modified.  The first declaration
+updates one key-value individually, and the second completely
+redefines the variable:
 
 @example
 \paper @{
- #(define bottom-margin (* 2 cm))
+  system-system-spacing #'space = #8
+  score-system-spacing =
+    #'((padding . 1)
+       (space . 12)
+       (minimum-distance . 6)
+       (stretchability . 12))
 @}
 @end example
 
 
-Example:
+@node List of flexible vertical spacing \paper variables
+@unnumberedsubsubsec List of flexible vertical spacing @code{\paper} variables
 
-@example
-\paper@{
-  paper-width = 2\cm
-  top-margin = 3\cm
-  bottom-margin = 3\cm
-  ragged-last-bottom = ##t
-@}
-@end example
+The names of these variables follow the format
+@code{@var{upper}-@var{lower}-spacing}, where @code{@var{upper}}
+and @code{@var{lower}} are the items to be spaced.  Each distance
+is measured between the reference points of the two items (see the
+description of the alist structure above).  Note that in these
+variable names, the term @q{@code{markup}} refers to both
+@emph{title markups} (@code{bookTitleMarkup} or
+@code{scoreTitleMarkup}) and @emph{top-level markups} (see
+@ref{File structure}).  All distances are measured in
+staff-spaces.
 
-This second example centers page numbers at the bottom of every page.
+Default settings are defined in @file{ly/paper-defaults-init.ly}.
 
-@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
+@c TODO: Where do headers/footers fit in? -mp
 
-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
-value must be multiplied in the example
+@table @code
+@item markup-system-spacing
+@funindex markup-system-spacing
 
-@example
-\paper @{
-  #(define bottom-margin (* 2 cm))
-@}
-@end example
+the distance between a (title or top-level) markup and the system
+that follows it.
+
+@item score-markup-spacing
+@funindex score-markup-spacing
+
+the distance between the last system of a score and the (title or
+top-level) markup that follows it.
+
+@item score-system-spacing
+@funindex score-system-spacing
+
+the distance between the last system of a score and the first
+system of the score that follows it, when no (title or top-level)
+markup exists between them.
 
-The header and footer are created by the functions @code{make-footer}
-and @code{make-header}, defined in @code{\paper}.  The default
-implementations are in @file{ly/@/paper@/-defaults@/.ly} and
-@file{ly/@/titling@/-init@/.ly}.
+@item system-system-spacing
+@funindex system-system-spacing
 
-The page layout itself is done by two functions in the
-@code{\paper} block, @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.
+the distance between two systems in the same score.
 
+@item markup-markup-spacing
+@funindex markup-markup-spacing
+
+the distance between two (title or top-level) markups.
+
+@item last-bottom-spacing
+@funindex last-bottom-spacing
+
+the distance from the last system or top-level markup on a page to
+the bottom of the printable area (i.e. the top of the bottom
+margin).
+
+@item top-system-spacing
+@funindex top-system-spacing
+
+the distance from the top of the printable area (i.e. the bottom
+of the top margin) to the first system on a page, when there is no
+(title or top-level) markup between the two.
+
+@item top-markup-spacing
+@funindex top-markup-spacing
+
+the distance from the top of the printable area (i.e. the bottom
+of the top margin) to the first (title or top-level) markup on a
+page, when there is no system between the two.
+@end table
 
 @seealso
 Notation Reference:
-@ref{Vertical spacing between systems}.
+@ref{Flexible vertical spacing within systems}.
+
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
 
 Snippets:
 @rlsr{Spacing}.
 
 
-@node Horizontal dimensions
-@unnumberedsubsubsec Horizontal dimensions
+@node Horizontal spacing \paper variables
+@subsection Horizontal spacing @code{\paper} variables
+
+@warning{Some @code{@bs{}paper} dimensions are automatically
+scaled to the paper size, which may lead to unexpected behavior.
+See @ref{Automatic scaling to paper size}.}
+
+@menu
+* \paper variables for widths and margins::
+* \paper variables for two-sided mode::
+* \paper variables for shifts and indents::
+@end menu
 
-@warning{If @code{paper-width} is manually set, @code{line-width},
-@code{left-margin}, @code{indent}, and @code{short-indent} may
-have to be adjusted as well.}
 
-There are a few variables that determine the horizontal dimensions
-on a page:
+@node \paper variables for widths and margins
+@unnumberedsubsubsec @code{\paper} variables for widths and margins
+
+Default values (before scaling) that are not listed here are
+defined in @file{ly/paper-defaults-init.ly}.
 
 @table @code
 
-@item horizontal-shift
-@funindex horizontal-shift
+@item paper-width
+@funindex paper-width
 
-The amount that all systems (including titles and system
-separators) are shifted to the right.  Default: @code{0.0}.
+The width of the page, unset by default.  While @code{paper-width}
+has no effect on the automatic scaling of some horizontal
+dimensions, it does influence the @code{line-width} variable.  If
+both @code{paper-width} and @code{line-width} are set, then
+@code{left-margin} and @code{right-margin} will also be updated.
+Also see @code{check-consistency}.
 
-@item indent
-@funindex indent
+@item line-width
+@funindex line-width
 
-The level of indentation for the first system in a score.
-Default: @code{paper-width} divided by @code{14}, as determined by
-@code{set-default-paper-size} or @code{set-paper-size}.
+The horizontal extent of the staff lines in unindented, non-ragged
+systems, equal to
+@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)}
+when unset.  If @code{line-width} is set, and both
+@code{left-margin} and @code{right-margin} are unset, then the
+margins will be updated to center the systems on the page
+automatically.  Also see @code{check-consistency}.
 
 @item left-margin
 @funindex left-margin
 
-The margin between the left edge of the page and the beginning of
-each system.  Default: @code{10\mm}, as determined by
-@code{set-default-paper-size} or @code{set-paper-size}.
+The margin between the left edge of the page and the start of the
+staff lines in unindented systems.  If the paper size is modified,
+this dimension's default value is scaled accordingly.  If
+@code{left-margin} is unset, and both @code{line-width} and
+@code{right-margin} are set, then @code{left-margin} is set to
+@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}.
+If only @code{line-width} is set, then both margins are set to
+@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
+and the systems are consequently centered on the page.  Also see
+@code{check-consistency}.
+
+@item right-margin
+@funindex right-margin
+
+The margin between the right edge of the page and the end of the
+staff lines in non-ragged systems.  If the paper size is modified,
+this dimension's default value is scaled accordingly.  If
+@code{right-margin} is unset, and both @code{line-width} and
+@code{left-margin} are set, then @code{right-margin} is set to
+@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}.
+If only @code{line-width} is set, then both margins are set to
+@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
+and the systems are consequently centered on the page.  Also see
+@code{check-consistency}.
+
+@item check-consistency
+@funindex check-consistency
+
+If set to true, print a warning if @code{left-margin},
+@code{line-width}, and @code{right-margin} do not exactly add up
+to @code{paper-width}, and replace each of these (except
+@code{paper-width}) with its default value (scaled to the paper
+size if necessary).  If set to false, ignore any inconsistencies
+and allow systems to run off the edge of the page.
 
-@item line-width
-@funindex line-width
+@item ragged-right
+@funindex ragged-right
 
-The width of music systems.  Default: @code{paper-width} minus
-@code{20\mm}, as determined by @code{set-default-paper-size} or
-@code{set-paper-size}.
+If set to true, systems will not fill the line width.  Instead,
+systems end at their natural horizontal length.  Default:
+@code{#t} for scores with only one system, and @code{#f} for
+scores with two or more systems.  This variable can also be set in
+a @code{\layout} block.
 
-@item paper-width
-@funindex paper-width
+@item ragged-last
+@funindex ragged-last
+
+If set to true, the last system in the score will not fill the
+line width.  Instead the last system ends at its natural
+horizontal length.  Default: @code{#f}.  This variable can also be
+set in a @code{\layout} block.
+
+@end table
+
+@seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
+
+
+@node \paper variables for two-sided mode
+@unnumberedsubsubsec @code{\paper} variables for two-sided mode
+
+Default values (before scaling) are defined in
+@file{ly/paper-defaults-init.ly}.
+
+@table @code
 
-The width of the page.  Default: the width of the current paper
-size.  For details, see @ref{Paper size}.
+@item two-sided
+@funindex two-sided
+
+@cindex gutter
+@cindex binding gutter
+
+If set to true, use @code{inner-margin}, @code{outer-margin} and
+@code{binding-offset} to determine margins depending on whether
+the page number is odd or even.  This overrides @code{left-margin}
+and @code{right-margin}.
+
+@item inner-margin
+@funindex inner-margin
+
+The margin all pages have at the inner side if they are part of a
+book.  If the paper size is modified, this dimension's default
+value is scaled accordingly.  Works only with @code{two-sided} set
+to true.
+
+@item outer-margin
+@funindex outer-margin
+
+The margin all pages have at the outer side if they are part of a
+book.  If the paper size is modified, this dimension's default
+value is scaled accordingly.  Works only with @code{two-sided} set
+to true.
+
+@item binding-offset
+@funindex binding-offset
+
+The amount @code{inner-margin} is increased to make sure nothing
+will be hidden by the binding.  If the paper size is modified,
+this dimension's default value is scaled accordingly.  Works only
+with @code{two-sided} set to true.
+
+@end table
+
+@seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
+
+
+@node \paper variables for shifts and indents
+@unnumberedsubsubsec @code{\paper} variables for shifts and indents
+
+Default values (before scaling) that are not listed here are
+defined in @file{ly/paper-defaults-init.ly}.
+
+@table @code
+
+@item horizontal-shift
+@funindex horizontal-shift
+
+@c This default value is buried in the middle of page.scm.  -mp
+
+The amount that all systems (including titles and system
+separators) are shifted to the right.  Default: @code{0.0\mm}.
+
+@item indent
+@funindex indent
+
+The level of indentation for the first system in a score.  If the
+paper size is modified, this dimension's default value is scaled
+accordingly.  This variable can also be set in a @code{\layout}
+block.
 
 @item short-indent
 @funindex short-indent
 
 The level of indentation for all systems in a score besides the
-first system.  Default: @code{0}, as determined by
-@code{set-default-paper-size} or @code{set-paper-size}.
+first system.  If the paper size is modified, this dimension's
+default value is scaled accordingly.  This variable can also be
+set in a @code{\layout} block.
 
 @end table
 
-
 @seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
+
 Snippets:
 @rlsr{Spacing}.
 
 
-@knownissues
+@node Other \paper variables
+@subsection Other @code{\paper} variables
 
-The option @code{right-margin} is defined but doesn't set the
-right margin yet.  The value for the right margin has to be
-defined by adjusting the values of @code{left-margin} and
-@code{line-width}.
+@menu
+* \paper variables for line breaking::
+* \paper variables for page breaking::
+* \paper variables for page numbering::
+* Miscellaneous \paper variables::
+@end menu
 
 
-@node Other layout variables
-@unnumberedsubsubsec Other layout variables
+@node \paper variables for line breaking
+@unnumberedsubsubsec @code{\paper} variables for line breaking
 
-These variables can be used to adjust page layout in general.
+@c TODO: Mention that ly:optimal-breaking is on by default? -mp
 
 @table @code
 
-@item auto-first-page-number
-@funindex auto-first-page-number
+@item max-systems-per-page
+@funindex max-systems-per-page
 
-The page breaking algorithm is affected by the first page number
-being odd or even.  If set to true, the page breaking algorithm
-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.  Default: @code{##f}.
+The maximum number of systems that will be placed on a page.  This
+is currently supported only by the @code{ly:optimal-breaking} algorithm.
+Default: unset.
 
-@ignore
+@item min-systems-per-page
+@funindex min-systems-per-page
+
+The minimum number of systems that will be placed on a page.  This
+may cause pages to be overfilled if it is made too large.  This is
+currently supported only by the @code{ly:optimal-breaking} algorithm.
+Default: unset.
+
+@item systems-per-page
+@funindex systems-per-page
+
+The number of systems that should be placed on each page.
+This is currently supported only by the @code{ly:optimal-breaking} algorithm.
+Default: unset.
+
+@item system-count
+@funindex system-count
+
+The number of systems to be used for a score.  Default: unset.
+This variable can also be set in a @code{\layout} block.
+
+@end table
+
+@seealso
+Notation Reference:
+@ref{Line breaking}.
+
+
+@node \paper variables for page breaking
+@unnumberedsubsubsec @code{\paper} variables for page breaking
+
+Default values not listed here are defined in
+@file{ly/paper-defaults-init.ly}
+
+@table @code
 
-FIXME: this variable is used, but I don't know what it does. -pm
 @item blank-after-score-page-force
 @funindex blank-after-score-page-force
 
-Default: @code{2}.
-
-@end ignore
+The penalty for having a blank page after the end of one score and
+before the next.  By default, this is smaller than
+@code{blank-page-force}, so that we prefer blank pages after
+scores to blank pages within a score.
 
 @item blank-last-page-force
 @funindex blank-last-page-force
 
 The penalty for ending the score on an odd-numbered page.
-Default: @code{0}.
 
 @item blank-page-force
 @funindex 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:
-@code{5}.
+never consider blank pages in the middle of a score.
 
-@item first-page-number
-@funindex first-page-number
+@item page-breaking
+@funindex page-breaking
 
-The value of the page number on the first page.  Default:
-@code{#1}.
+The page-breaking algorithm to use.  Choices are
+@code{ly:minimal-breaking}, @code{ly:page-turn-breaking}, and
+@code{ly:optimal-breaking}.
 
-@item max-systems-per-page
-The maximum number of systems that will be placed on a page. This
-is currently supported only by the @code{ly:optimal-breaking} algorithm.
-Default: unset.
-
-@item min-systems-per-page
-The minimum number of systems that will be placed on a page. This
-may cause pages to be overfilled if it is made too large. This is
-currently supported only by the @code{ly:optimal-breaking} algorithm.
-Default: unset.
-
-@item page-breaking-between-system-padding
-@funindex page-breaking-between-system-padding
+@item page-breaking-system-system-spacing
+@funindex page-breaking-system-system-spacing
 
 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
+@code{system-system-spacing} is set to something different than
+it really is.  For example, if
+@code{page-breaking-system-system-spacing #'padding} is set to something
+substantially larger than @code{system-system-spacing #'padding}, then the
 page-breaker will put fewer systems on each page.  Default: unset.
 
 @item page-count
 @funindex page-count
 
-The number of pages to be used for a score.  Default: unset.
+The number of pages to be used for a score, unset by default.
 
-@item page-limit-inter-system-space
-@funindex page-limit-inter-system-space
+@end table
 
-If set to true, limits space between systems on a page with a lot
-of space left.  Default: @code{##f}.  For details, see
-@ref{Vertical spacing between systems}.
+@seealso
+Notation Reference:
+@ref{Page breaking},
+@ref{Optimal page breaking},
+@ref{Optimal page turning},
+@ref{Minimal page breaking}.
 
-@item page-limit-inter-system-space-factor
-@funindex page-limit-inter-system-space-factor
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
 
-The factor used by @code{page-limit-inter-system-space}.  Default:
-@code{1.4}.  For details, see
-@ref{Vertical spacing between systems}.
 
-@item page-spacing-weight
-@funindex page-spacing-weight
+@node \paper variables for page numbering
+@unnumberedsubsubsec @code{\paper} variables for page numbering
 
-The relative importance of page (vertical) spacing and line
-(horizontal) spacing.  High values will make page spacing more
-important.  Default: @code{#10}.
+Default values not listed here are defined in
+@file{ly/paper-defaults-init.ly}
+
+@table @code
+
+@item auto-first-page-number
+@funindex auto-first-page-number
+
+The page breaking algorithm is affected by the first page number
+being odd or even.  If set to true, the page breaking algorithm
+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.  Default: @code{#f}.
 
-@item print-all-headers
-@funindex print-all-headers
+@item first-page-number
+@funindex first-page-number
 
-If set to true, this will print all headers for each \score in the
-output.  Normally only the piece and opus header variables are
-printed.  Default: @code{##f}.
+The value of the page number on the first page.
 
 @item print-first-page-number
 @funindex print-first-page-number
 
 If set to true, a page number is printed on the first page.
-Default: @code{##f}.
 
 @item print-page-number
 @funindex print-page-number
 
-If set to false, page numbers are not printed.  Default:
-@code{##t}.
-
-@item ragged-bottom
-@funindex ragged-bottom
-
-If set to true, systems will not spread vertically across the
-page.  This does not affect the last page.  Default: @code{##f}.
-
-This should be set to true for pieces that have only two or three
-systems per page, for example orchestral scores.
+If set to false, page numbers are not printed.
 
-@item ragged-last
-@funindex ragged-last
+@end table
 
-If set to true, the last system in the score will not fill the
-line width.  Instead the last system ends at its natural
-horizontal length.  Default: @code{##f}.
+@seealso
+Installed Files:
+@file{ly/paper-defaults-init.ly}.
 
-@item ragged-last-bottom
-@funindex ragged-last-bottom
 
-If set to false, systems will spread vertically across the last
-page.  Default: @code{##t}.
+@node Miscellaneous \paper variables
+@unnumberedsubsubsec Miscellaneous @code{\paper} variables
 
-Pieces that amply fill two pages or more should have this set to
-true.
+@table @code
 
-It also affects the last page of book parts, ie parts of a book created
-with @code{\bookpart} blocks.
+@item page-spacing-weight
+@funindex page-spacing-weight
 
-@item ragged-right
-@funindex ragged-right
+The relative importance of page (vertical) spacing and line
+(horizontal) spacing.  High values will make page spacing more
+important.  Default: @code{#10}.
 
-If set to true, systems will not fill the line width.  Instead,
-systems end at their natural horizontal length.  Default:
-@code{##f}.
+@item print-all-headers
+@funindex print-all-headers
 
-If the score has only one system, the default value is @code{##t}.
+If set to true, this will print all headers for each @code{\score}
+in the output.  Normally only the @code{piece} and @code{opus}
+header variables are printed.  Default: @code{#f}.
 
 @item system-separator-markup
 @funindex system-separator-markup
 
-A markup object that is inserted between systems.  This is often
-used for orchestral scores.  Default: unset.
+A markup object that is inserted between systems, often used for
+orchestral scores.  Default: unset.  The @code{\slashSeparator}
+markup, defined in @file{ly/titling-init.ly}, is provided as a
+sensible default, for example:
 
-The markup command @code{\slashSeparator} is provided as a sensible
-default,  for example
+@lilypond[quote,verbatim,noragged-right,line-width=30\mm]
+#(set-default-paper-size "a8")
 
-@lilypond[quote,ragged-right]
-#(set-default-paper-size "a6" 'landscape)
 \book {
-  \score {
-    \relative { c1 \break c1 }
-  }
   \paper {
     system-separator-markup = \slashSeparator
   }
+  \header {
+    tagline = ##f
+  }
+  \score {
+    \relative c'' { c1 \break c1 \break c1 }
+  }
 }
 @end lilypond
 
-@item system-count
-@funindex system-count
-
-The number of systems to be used for a score.
-Default: unset.
-
-@item systems-per-page
-@funindex systems-per-page
-
-The number of systems that should be placed on each page.
-This is currently supported only by the @code{ly:optimal-breaking} algorithm.
-Default: unset.
-
 @end table
 
 
 @seealso
+Installed Files:
+@file{ly/titling-init.ly}.
+
 Snippets:
 @rlsr{Spacing}.
 
@@ -647,20 +956,80 @@ Snippets:
 The default page header puts the page number and the @code{instrument}
 field from the @code{\header} block on a line.
 
-The titles (from the @code{\header@{@}} section) are treated as a
-system, so @code{ragged-bottom} and @code{ragged-last-bottom} will
-add space between the titles and the first system of the score.
 
+@node Score layout
+@section Score layout
 
-@node Music layout
-@section Music layout
+This section discusses score layout options for the @code{\layout}
+block.
 
 @menu
+* The \layout block::
 * Setting the staff size::
-* Score layout::
 @end menu
 
 
+@node The \layout block
+@subsection The @code{\layout} block
+
+@funindex \layout
+
+While the @code{\paper} block contains settings that relate to the
+page formatting of the whole document, the @code{\layout} block
+contains settings for score-specific layout.  To set score layout
+options globally, enter them in a toplevel @code{\layout} block.
+To set layout options for an individual score, enter them in a
+@code{\layout} block inside the @code{\score} block, after the
+music.  Settings that can appear in a @code{\layout} block
+include:
+
+@itemize
+@item the @code{layout-set-staff-size} scheme function,
+@item context modifications in @code{\context} blocks, and
+@item @code{\paper} variables that affect score layout.
+@end itemize
+
+The @code{layout-set-staff-size} function is discussed in the next
+section, @ref{Setting the staff size}.  Context modifications are
+discussed in a separate chapter; see
+@ref{Modifying context plug-ins} and
+@ref{Changing context default settings}.  The @code{\paper}
+variables that can appear in a @code{\layout} block are:
+
+@itemize
+@item @code{ragged-right}
+@item @code{ragged-last}
+@item @code{indent}
+@item @code{short-indent}
+@item @code{system-count}
+@end itemize
+
+Here is an example @code{\layout} block:
+
+@example
+\layout @{
+  indent = 2.0\cm
+  \context @{
+    \StaffGroup
+    \override StaffGrouper #'staff-staff-spacing #space = #8
+  @}
+  \context @{
+    \Voice
+    \override TextScript #'padding = #1.0
+    \override Glissando #'thickness = #3
+  @}
+@}
+@end example
+
+
+@seealso
+Notation Reference:
+@ref{Changing context default settings}.
+
+Snippets:
+@rlsr{Spacing}.
+
+
 @node Setting the staff size
 @subsection Setting the staff size
 
@@ -769,37 +1138,6 @@ Snippets:
 staff lines.
 
 
-@node Score layout
-@subsection Score layout
-
-@funindex \layout
-
-While @code{\paper} contains settings that relate to the page formatting
-of the whole document, @code{\layout} contains settings for score-specific
-layout.
-
-@example
-\layout @{
-  indent = 2.0\cm
-  \context @{ \Staff
-    \override VerticalAxisGroup #'minimum-Y-extent = #'(-6 . 6)
-  @}
-  \context @{ \Voice
-    \override TextScript #'padding = #1.0
-    \override Glissando #'thickness = #3
-  @}
-@}
-@end example
-
-
-@seealso
-Notation Reference:
-@ref{Changing context default settings}.
-
-Snippets:
-@rlsr{Spacing}.
-
-
 @node Breaks
 @section Breaks
 
@@ -820,11 +1158,11 @@ Snippets:
 @cindex line breaks
 @cindex breaking lines
 
-Line breaks are normally determined automatically. They are chosen
+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,
+@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,
@@ -836,13 +1174,13 @@ 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.
+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
+being spread horizontally to fill the whole line.  This is useful
 for short fragments, and for checking how tight the natural
 spacing is.
 
@@ -878,7 +1216,7 @@ every 4 measures, and only there:
 @end example
 
 @c TODO Check this
-A linebreaking configuration can be saved as a @code{.ly} file
+A linebreaking configuration can be saved as a @file{.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
@@ -894,19 +1232,19 @@ complicated.  More details are available in
 
 
 @seealso
-Internals Reference:
-@rinternals{LineBreakEvent}.
-
 Snippets:
 @rlsr{Spacing}.
 
+Internals Reference:
+@rinternals{LineBreakEvent}.
+
 
 @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]
+@lilypond[quote,ragged-right,relative=2,verbatim]
 c4 c2 << c2 {s4 \break } >>  % this does nothing
 c2 c4 |           % a break here would work
 c4 c2 c4 ~ \break % as does this break
@@ -980,7 +1318,7 @@ book parts.
   @}
   \paper @{
      %% In a part consisting mostly of text,
-     %% ly:minimal-breaking may be prefered
+     %% ly:minimal-breaking may be preferred
      #(define page-breaking ly:minimal-breaking)
   @}
   \markup @{ @dots{} @}
@@ -1160,311 +1498,664 @@ page breaks at explicit @code{\pageBreak} commands and nowhere else.
   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 }
-    }
+\score {
+  \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 }
+    }
+  \layout {
+    \context {
+      \Score
+      \override NonMusicalPaperColumn #'line-break-permission = ##f
+      \override NonMusicalPaperColumn #'page-break-permission = ##f
+    }
+  }
+}
+@end lilypond
+
+
+@seealso
+Snippets:
+@rlsr{Spacing}.
+
+
+@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
+\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]
+\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]
+\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
+
+
+@seealso
+Notation Reference:
+@ref{Vertical spacing}.
+
+Snippets:
+@rlsr{Spacing}.
+
+
+@node Vertical spacing
+@section Vertical spacing
+
+@cindex vertical spacing
+@cindex spacing, vertical
+
+Vertical spacing is controlled by three things: the amount of
+space available (i.e., paper size and margins), the amount of
+space between systems, and the amount of space between
+staves inside a system.
+
+@menu
+* Flexible vertical spacing within systems::
+* Explicit staff and system positioning::
+* Vertical collision avoidance::
+@end menu
+
+
+@node Flexible vertical spacing within systems
+@subsection Flexible vertical spacing within systems
+
+@cindex distance between staves
+@cindex staff distance
+@cindex space between staves
+@cindex space inside systems
+
+Three separate mechanisms control the flexible vertical spacing
+within systems, one for each of the following categories:
+
+@itemize
+
+@item
+@emph{ungrouped staves},
+
+@item
+@emph{grouped staves} (staves within a staff-group such as
+@code{ChoirStaff}, etc.), and
+
+@item
+@emph{non-staff lines} (such as @code{Lyrics}, @code{ChordNames},
+etc.).
+
+@end itemize
+
+@c TODO: Clarify this.  This almost implies that non-staff lines
+@c       have NO effect on the spacing between staves.  -mp
+
+The height of each system is determined in two steps.  First, all
+of the staves are spaced according to the amount of space
+available.  Then, the non-staff lines are distributed between the
+staves.
+
+Note that the spacing mechanisms discussed in this section only
+control the vertical spacing of staves and non-staff lines within
+individual systems.  The vertical spacing between separate
+systems, scores, markups, and margins is controlled by
+@code{\paper} variables, which are discussed in
+@ref{Flexible vertical spacing \paper variables}.
+
+@menu
+* Within-system spacing properties::
+* Spacing of ungrouped staves::
+* Spacing of grouped staves::
+* Spacing of non-staff lines::
+@end menu
+
+
+@node Within-system spacing properties
+@unnumberedsubsubsec Within-system spacing properties
+
+The within-system vertical spacing mechanisms are controlled by
+two sets of grob properties.  The first set is associated with the
+@code{VerticalAxisGroup} grob, which is created by all staves and
+non-staff lines.  The second set is associated with the
+@code{StaffGrouper} grob, which can be created by staff-groups,
+but only if explicitly called.  These properties are described
+individually at the end of this section.
+
+The names of these properties (except for @code{staff-affinity})
+follow the format @code{@var{item1}-@var{item2}-spacing}, where
+@code{@var{item1}} and @code{@var{item2}} are the items to be
+spaced.  Note that @code{@var{item2}} is not necessarily below
+@code{@var{item1}}; for example,
+@code{nonstaff-relatedstaff-spacing} will measure upwards from the
+non-staff line if @code{staff-affinity} is @code{#UP}.
+
+Each distance is measured between the @emph{reference points} of
+the two items.  The reference point for a staff is the vertical
+center of its @code{StaffSymbol} (i.e. the middle line if
+@code{line-count} is odd; the middle space if @code{line-count} is
+even).  The reference points for individual non-staff lines are
+given in the following table:
+
+@multitable {Non-staff line} {Reference point}
+@headitem Non-staff line @tab Reference point
+@item @code{ChordNames}  @tab baseline
+@item @code{NoteNames}   @tab baseline
+@item @code{Lyrics}      @tab baseline
+@item @code{Dynamics}    @tab vertical center
+@item @code{FiguredBass} @tab highest point
+@item @code{FretBoards}  @tab top line
+@end multitable
+
+In the following image, horizontal lines indicate the positions
+of these reference points:
+
+@lilypond[quote,noragged-right,line-width=110\mm]
+#(define zero-space '((padding . -inf.0) (space . 0)))
+
+alignToZero = \with {
+  \override VerticalAxisGroup #'nonstaff-relatedstaff-spacing = #zero-space
+  \override VerticalAxisGroup #'nonstaff-nonstaff-spacing = #zero-space
+}
+lowerCaseChords = \with {
+  chordNameLowercaseMinor = ##t
+}
+staffAffinityDown = \with {
+  \override VerticalAxisGroup #'staff-affinity = #DOWN
+}
+labelContext =
+#(define-music-function
+     (parser location context)
+     (string?)
+   #{ s1*0^\markup { \typewriter $context } #})
+
+\layout {
+  \context { \Dynamics    \alignToZero }
+  \context { \FiguredBass \alignToZero }
+  \context { \Lyrics      \alignToZero }
+  \context { \NoteNames   \alignToZero }
+  \context { \ChordNames  \alignToZero \lowerCaseChords }
+  \context { \FretBoards  \alignToZero \staffAffinityDown }
+  \context { \Score
+    \override BarLine #'stencil = ##f
+    \override DynamicText #'self-alignment-X = #-1
+    \override FretBoard #'X-offset = #1.75
+    \override InstrumentName #'minimum-Y-extent = #'(-2 . 2)
+    \override InstrumentName #'extra-offset = #'(0 . -0.5)
+    \override TextScript #'minimum-Y-extent = #'(-2 . 3)
+    \override TimeSignature #'stencil = ##f
+  }
+}
+
+%% These contexts have reference points at the baseline:
+%%   ChordNames, NoteNames, and Lyrics
+<<
+  \new ChordNames { \chords { g1:m } }
+  \new NoteNames { s1 | g1 | }
+  \new RhythmicStaff {
+    \set RhythmicStaff.instrumentName = #"baseline "
+    \textLengthOn
+    \labelContext "ChordNames" s1 |
+    \labelContext "NoteNames"  s1 |
+    \labelContext "Lyrics"     s1 |
+  }
+  \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
+>>
+
+%% The reference point for Dynamics is its vertical center
+<<
+  \new RhythmicStaff {
+    \set RhythmicStaff.instrumentName = #"vertical center "
+    \labelContext "Dynamics" s1*3
+  }
+  \new Dynamics { s2\mp s\fp }
+>>
+
+%% The reference point for FiguredBass is its highest point
+<<
+  \new RhythmicStaff {
+    \set RhythmicStaff.instrumentName = #"highest point "
+    \labelContext "FiguredBass" s1
+  }
+  \new FiguredBass { \figuremode { <6 5>1 } }
+>>
+
+%% The reference point for FretBoards is the top line
+\include "predefined-guitar-fretboards.ly"
+<<
+  \new FretBoards { \chordmode { e1 } }
+  \new RhythmicStaff {
+    \set RhythmicStaff.instrumentName = #"top line "
+    \labelContext "FretBoards " s1
   }
-}
+>>
 @end lilypond
 
+Each of the vertical spacing grob properties (except
+@code{staff-affinity}) is stored as an alist (association list),
+and each uses the same alist structure as the @code{\paper}
+spacing variables discussed in
+@ref{Flexible vertical spacing \paper variables}.  Specific methods
+for modifying alists are discussed in @ref{Modifying alists}.
+Grob properties should be adjusted with an @code{\override} inside
+a @code{\score} or @code{\layout} block, and not inside a
+@code{\paper} block.
 
-@seealso
-Snippets:
-@rlsr{Spacing}.
-
+The following example demonstrates the two ways these alists can
+be modified.  The first declaration updates one key-value
+individually, and the second completely re-defines the property:
 
-@node Using an extra voice for breaks
-@subsection Using an extra voice for breaks
+@example
+\new Staff \with @{
+  \override VerticalAxisGroup #'staff-staff-spacing #'space = #10
+@} @{ @dots{} @}
+
+\new Staff \with @{
+  \override VerticalAxisGroup #'staff-staff-spacing =
+    #'((padding . 1)
+       (space . 10)
+       (minimum-distance . 9)
+       (stretchability . 10))
+@} @{ @dots{} @}
+@end example
 
-Line- and page-breaking information usually appears within note entry directly.
+To change any spacing settings globally, put them in the
+@code{\layout} block:
 
 @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 @}
+\layout @{
+  \context @{
+    \Staff
+    \override VerticalAxisGroup #'staff-staff-spacing #'space = #10
   @}
 @}
 @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.
+Standard settings for the vertical spacing grob properties are
+listed in @rinternals{VerticalAxisGroup} and
+@rinternals{StaffGrouper}.  Default overrides for specific types
+of non-staff lines are listed in the relevant context descriptions
+in @rinternals{Contexts}.
 
-@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}.
+@subsubheading Properties of the @code{VerticalAxisGroup} grob
 
-@lilypond[quote,verbatim]
-\new Score {
-  \new Staff <<
-     \new Voice {
+@code{VerticalAxisGroup} properties are typically adjusted with an
+@code{\override} at the @code{Staff} level (or equivalent).
 
-        \overrideProperty "Score.NonMusicalPaperColumn"
-        #'line-break-system-details #'((Y-offset . 0))
-        s1 * 2 \break
+@table @code
+@item staff-staff-spacing
+The distance between the current staff and the staff just below it
+in the same system, even if one or more non-staff lines (such as
+@code{Lyrics}) are placed between the two staves.  Does not apply
+to the bottom staff of a system.  This replaces any settings
+inherited from the @code{StaffGrouper} grob of the containing
+staff-group, if there is one.  If this is unset, and there are no
+@code{StaffGrouper} properties to inherit, the
+@code{default-staff-staff-spacing} property is used.
+
+@item default-staff-staff-spacing
+The settings to use for @code{staff-staff-spacing} when it is
+unset.  This applies to ungrouped staves and to grouped staves
+that do not inherit settings from the @code{StaffGrouper} grob.
+
+@item staff-affinity
+The direction of the staff to use for spacing the current
+non-staff line.  Choices are @code{UP}, @code{DOWN}, and
+@code{CENTER}.  If @code{CENTER}, the non-staff line will be
+placed equidistant between the two nearest staves on either side,
+unless collisions or other spacing constraints prevent this.
+Adjacent non-staff lines should have non-increasing
+@code{staff-affinity} from top to bottom, e.g. a non-staff line
+set to @code{UP} should not immediately follow one that is set to
+@code{DOWN}.  Non-staff lines at the top of a system should use
+@code{DOWN}; those at the bottom should use @code{UP}.  Setting
+@code{staff-affinity} for a staff causes it to be treated as a
+non-staff line.  Setting @code{staff-affinity} to @code{#f} causes
+a non-staff line to be treated as a staff.
+
+@c TODO: verify last clause below ("even if other...")
+
+@item nonstaff-relatedstaff-spacing
+The distance between the current non-staff line and the nearest
+staff in the direction of @code{staff-affinity}, if there are no
+non-staff lines between the two, and @code{staff-affinity} is
+either @code{UP} or @code{DOWN}.  If @code{staff-affinity} is
+@code{CENTER}, then @code{nonstaff-relatedstaff-spacing} is used
+for the nearest staves on @emph{both} sides, even if other
+non-staff lines appear between the current one and either of the
+staves.
+
+@item nonstaff-nonstaff-spacing
+The distance between the current non-staff line and the next
+non-staff line in the direction of @code{staff-affinity}, if both
+are on the same side of the related staff, and
+@code{staff-affinity} is either @code{UP} or @code{DOWN}.
+
+@item nonstaff-unrelatedstaff-spacing
+The distance between the current non-staff line and the staff in
+the opposite direction from @code{staff-affinity}, if there are no
+other non-staff lines between the two, and @code{staff-affinity}
+is either @code{UP} or @code{DOWN}.  This can be used, for
+example, to require a minimum amount of padding between a
+@code{Lyrics} line and the staff to which it does not belong.
+@end table
 
-        \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
+@subsubheading Properties of the @code{StaffGrouper} grob
 
-        \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
+@code{StaffGrouper} properties are typically adjusted with an
+@code{\override} at the @code{StaffGroup} level (or equivalent).
 
+@table @code
+@item staff-staff-spacing
+The distance between consecutive staves within the current
+staff-group.  The @code{staff-staff-spacing} property of an
+individual staff's @code{VerticalAxisGroup} grob will be used
+instead for any staves in the staff-group that have it set.  Also
+see @code{default-staff-staff-spacing}.
+
+@item staffgroup-staff-spacing
+The distance between the last staff of the current staff-group and
+the staff just below it in the same system, even if one or more
+non-staff lines (such as @code{Lyrics}) exist between the two
+staves.  Does not apply to the bottom staff of a system.  The
+@code{staff-staff-spacing} property of an individual staff's
+@code{VerticalAxisGroup} grob will be used instead for any staves
+in the staff-group that have it set.  Also see
+@code{default-staff-staff-spacing}.
+@end table
 
 @seealso
-Notation Reference:
-@ref{Vertical spacing}.
+Installed Files:
+@file{ly/engraver-init.ly},
+@file{scm/define-grobs.scm}.
 
-Snippets:
-@rlsr{Spacing}.
+Internals Reference:
+@rinternals{Contexts},
+@rinternals{VerticalAxisGroup},
+@rinternals{StaffGrouper}.
 
 
-@node Vertical spacing
-@section Vertical spacing
+@node Spacing of ungrouped staves
+@unnumberedsubsubsec Spacing of ungrouped staves
 
-@cindex vertical spacing
-@cindex spacing, vertical
+@emph{Staves} (such as @code{Staff}, @code{DrumStaff},
+@code{TabStaff}, etc.) are contexts that can contain one or more
+voice contexts, but cannot contain any other staves.
 
-Vertical spacing is controlled by three things: the amount of
-space available (i.e., paper size and margins), the amount of
-space between systems, and the amount of space between
-staves inside a system.
+The following properties affect the spacing of @emph{ungrouped}
+staves:
 
-@menu
-* Vertical spacing inside a system::
-* Vertical spacing between systems::
-* Explicit staff and system positioning::
-* Vertical collision avoidance::
-@end menu
+@itemize
+@item @code{VerticalAxisGroup} properties:
+@itemize
+@item @code{staff-staff-spacing}
+@end itemize
+@end itemize
 
+These grob properties are described individually above; see
+@ref{Within-system spacing properties}.
 
-@node Vertical spacing inside a system
-@subsection Vertical spacing inside a system
+Additional properties are involved for staves that are part of a
+staff-group; see @ref{Spacing of grouped staves}.
 
-@cindex distance between staves
-@cindex staff distance
-@cindex space between staves
-@cindex space inside systems
+The following example shows how the @code{staff-staff-spacing}
+property can affect the spacing of ungrouped staves:
 
-The height of each system is determined automatically.  To prevent
-staves from bumping into each other, some minimum distances are set.
-By changing these, you can put staves closer together.  This
-reduces the amount of space each system requires, and may result
-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
-@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)}
-then you could set
+@lilypond[verbatim,quote,staffsize=16]
+\layout {
+  \context {
+    \Staff
+    \override VerticalAxisGroup #'staff-staff-spacing =
+      #'((padding . 1)
+         (space . 8)
+         (minimum-distance . 7))
+  }
+}
 
-@example
-\override Staff.VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
-@end example
+\new StaffGroup <<
+  % The very low note here needs more room than 'space can
+  % provide, so the distance between this staff and the next is
+  % determined by 'padding.
+  \new Staff { b,2 r | }
+
+  % Here, 'space provides enough room, and there is no need to
+  % compress the space (towards 'minimum-distance) to make room
+  % for anything else on the page, so the distance between this
+  % staff and the next is determined by 'space.
+  \new Staff { \clef bass g2 r | }
+
+  % By setting 'padding to a negative value, staves can be made to
+  % collide.  The lowest acceptable value for 'space is 0.
+  \new Staff \with {
+    \override VerticalAxisGroup #'staff-staff-spacing =
+      #'((padding . -10)
+         (space . 3.5))
+  } { \clef bass g2 r | }
+  \new Staff { \clef bass g2 r | }
+>>
+@end lilypond
 
-@noindent
-This sets the vertical size of the current staff to 3 staff spaces on
-either side of the center staff line.  The value @code{(-3 . 3)} is
-interpreted as an interval, where the center line is the 0, so the
-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)}.
+@seealso
+Installed Files:
+@file{scm/define-grobs.scm}.
 
-@ignore
-FIXME: update this section
-
-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)
+Snippets:
+@rlsr{Spacing}.
 
-\book {
-\paper {
-  ragged-last-bottom = ##f
-}
+Internals Reference:
+@rinternals{VerticalAxisGroup}.
 
-\new Score \with
-{
-  \override VerticalAlignment #'max-stretch = #ly:align-interface::calc-max-stretch
+
+@node Spacing of grouped staves
+@unnumberedsubsubsec Spacing of grouped staves
+
+In orchestral and other large scores, it is common to place staves
+in groups.  The space between groups is typically larger than the
+space between staves of the same group.
+
+@emph{Staff-groups} (such as @code{StaffGroup}, @code{ChoirStaff},
+etc.) are contexts that can contain one or more staves
+simultaneously.
+
+The following properties affect the spacing of staves inside
+staff-groups:
+
+@itemize
+@item @code{VerticalAxisGroup} properties:
+@itemize
+@item @code{staff-staff-spacing}
+@item @code{default-staff-staff-spacing}
+@end itemize
+@item @code{StaffGrouper} properties:
+@itemize
+@item @code{staff-staff-spacing}
+@item @code{staffgroup-staff-spacing}
+@end itemize
+@end itemize
+
+These grob properties are described individually above; see
+@ref{Within-system spacing properties}.
+
+The following example shows how properties of the
+@code{StaffGrouper} grob can affect the spacing of grouped staves:
+
+@lilypond[verbatim,quote,staffsize=16]
+\layout {
+  \context {
+    \Score
+    \override StaffGrouper #'staff-staff-spacing #'padding = #0
+    \override StaffGrouper #'staff-staff-spacing #'space = #1
+  }
 }
-{
-\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 PianoStaff \with {
+    \override StaffGrouper #'staffgroup-staff-spacing #'space = #20
+  } <<
+    \new Staff { c'1 }
+    \new Staff { c'1 }
   >>
 
-  \new StaffGroup
-  <<
-    \new Staff {c' d' e' f'}
-    \new Staff {c' d' e' f'}
+  \new StaffGroup <<
+    \new Staff { c'1 }
+    \new Staff { c'1 }
   >>
 >>
-}
-}
 @end lilypond
-@end ignore
-
-Vertical alignment of staves is handled by the
-@code{VerticalAlignment} object.  The context parameters
-specifying the vertical extent are described in connection with
-the @code{Axis_group_engraver}.
-
 
 @seealso
+Installed Files:
+@file{scm/define-grobs.scm}.
+
 Snippets:
 @rlsr{Spacing}.
 
-@c @lsr{spacing,page-spacing.ly},
-@c @lsr{spacing,alignment-vertical-spacing.ly}.
-
 Internals Reference:
-@rinternals{VerticalAlignment},
-@rinternals{Axis_group_engraver}.
+@rinternals{VerticalAxisGroup},
+@rinternals{StaffGrouper}.
 
 
-@node Vertical spacing between systems
-@subsection Vertical spacing between systems
+@node Spacing of non-staff lines
+@unnumberedsubsubsec Spacing of non-staff lines
 
-Space between systems are controlled by four @code{\paper} variables,
+@emph{Non-staff lines} (such as @code{Lyrics}, @code{ChordNames},
+etc.) are contexts whose layout objects are engraved like staves
+(i.e. in horizontal lines within systems).  Specifically,
+non-staff lines are non-staff contexts that create the
+@code{VerticalAxisGroup} layout object.
 
-@example
-\paper @{
-  between-system-space = 1.5\cm
-  between-system-padding = #1
-  ragged-bottom=##f
-  ragged-last-bottom=##f
-@}
-@end example
+The following properties affect the spacing of non-staff lines:
 
-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.
-
-@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 }
+@itemize
+@item @code{VerticalAxisGroup} properties:
+@itemize
+@item @code{staff-affinity}
+@item @code{nonstaff-relatedstaff-spacing}
+@item @code{nonstaff-nonstaff-spacing}
+@item @code{nonstaff-unrelatedstaff-spacing}
+@end itemize
+@end itemize
+
+These grob properties are described individually above; see
+@ref{Within-system spacing properties}.
+
+The following example shows how the
+@code{nonstaff-nonstaff-spacing} property can affect the spacing
+of consecutive non-staff lines.  Here, by setting the
+@code{stretchability} key to a very high value, the lyrics are
+able to stretch much more than usual:
+
+@lilypond[verbatim,quote,staffsize=16]
+\layout {
+  \context {
+    \Lyrics
+    \override VerticalAxisGroup
+      #'nonstaff-nonstaff-spacing #'stretchability = #1000
   }
-  \new Staff << \repeat unfold 4 { g'4 g' g' g' \break }
-                { s1*2 \pageBreak } >>
 }
+
+\new StaffGroup
+<<
+  \new Staff \with {
+    \override VerticalAxisGroup #'staff-staff-spacing = #'((space . 30))
+  } { c'1 }
+  \new Lyrics \with {
+    \override VerticalAxisGroup #'staff-affinity = #UP
+  } \lyricmode { up }
+  \new Lyrics \with {
+    \override VerticalAxisGroup #'staff-affinity = #CENTER
+  } \lyricmode { center }
+  \new Lyrics \with {
+    \override VerticalAxisGroup #'staff-affinity = #DOWN
+  } \lyricmode { down }
+  \new Staff { c'1 }
+>>
 @end lilypond
 
 
 @seealso
+Installed Files:
+@file{ly/engraver-init.ly},
+@file{scm/define-grobs.scm}.
+
 Snippets:
 @rlsr{Spacing}.
 
+@c @lsr{spacing,page-spacing.ly},
+@c @lsr{spacing,alignment-vertical-spacing.ly}.
+
+Internals Reference:
+@rinternals{Contexts},
+@rinternals{VerticalAxisGroup}.
+
 
 @node Explicit staff and system positioning
 @subsection Explicit staff and system positioning
@@ -1481,14 +2172,12 @@ It is possible to approach vertical spacing in a different way using
 vertical positions on the page.
 
 @code{NonMusicalPaperColumn #'line-break-system-details} accepts an associative
-list of five different settings:
+list of three 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}
+@item @code{alignment-distances}
 @end itemize
 
 Grob overrides, including the overrides for @code{NonMusicalPaperColumn}
@@ -1519,11 +2208,11 @@ example @code{NonMusicalPaperColumn} overrides with the special
   #'line-break-system-details #'((X-offset . 20) (Y-offset . 40))
 
 \overrideProperty NonMusicalPaperColumn
-  #'line-break-system-details #'((alignment-offsets . (0 -15)))
+  #'line-break-system-details #'((alignment-distances . (15)))
 
 \overrideProperty NonMusicalPaperColumn
   #'line-break-system-details #'((X-offset . 20) (Y-offset . 40)
-                                 (alignment-offsets . (0 -15)))
+                                 (alignment-distances . (15)))
 @end example
 
 To understand how each of these different settings work, we begin
@@ -1599,8 +2288,8 @@ too, that the @code{Y-offset} property here determines the exact vertical
 position on the page at which each new system will render.
 
 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}
+explicitly, we can also set the vertical distances between staves
+within each system manually.  We do this using the @code{alignment-distances}
 subproperty of @code{line-break-system-details}.
 
 @lilypond[quote]
@@ -1613,15 +2302,15 @@ subproperty of @code{line-break-system-details}.
         \new Voice {
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 20)
-                                           (alignment-offsets . (0 -15)))
+                                           (alignment-distances . (15)))
           s1*5 \break
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-offsets . (0 -15)))
+                                           (alignment-distances . (15)))
           s1*5 \break
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-offsets . (0 -15)))
+                                           (alignment-distances . (15)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -1640,8 +2329,8 @@ Note that here we assign two different values to 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}
+@code{alignment-distances} pairs to control the vertical startpoint of
+every system and every staff.  Finally, note that @code{alignment-distances}
 specifies the vertical positioning of staves but not of staff groups.
 
 @lilypond[quote]
@@ -1654,15 +2343,15 @@ specifies the vertical positioning of staves but not of staff groups.
         \new Voice {
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 0)
-                                           (alignment-offsets . (0 -30 -40)))
+                                           (alignment-distances . (30 10)))
           s1*5 \break
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 60)
-                                           (alignment-offsets . (0 -10 -20)))
+                                           (alignment-distances . (10 10)))
           s1*5 \break
           \overrideProperty #"Score.NonMusicalPaperColumn"
             #'line-break-system-details #'((Y-offset . 100)
-                                           (alignment-offsets . (0 -10 -40)))
+                                           (alignment-distances . (10 30)))
           s1*5 \break
         }
         \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
@@ -1679,10 +2368,11 @@ specifies the vertical positioning of staves but not of staff groups.
 Some points to consider:
 
 @itemize
-@item When using @code{alignment-offsets}, lyrics count as a staff.
+@item When using @code{alignment-distances}, lyrics and other non-staff lines
+do not 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
+@code{Y-offset} and @code{alignment-distances} 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.
 
@@ -1730,7 +2420,7 @@ 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]
+@lilypond[quote,ragged-right,relative=2,verbatim]
 c4_"Text"\pp
 r2.
 \once \override TextScript #'outside-staff-priority = #1
@@ -1747,7 +2437,7 @@ 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]
+@lilypond[quote,ragged-right,relative=2,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
@@ -1759,13 +2449,13 @@ c^"This text is placed close to the previous text"
 By default, outside-staff objects are placed only to avoid
 a horizontal collision with previously-positioned grobs.  This
 can lead to situations in which objects are placed very close to each
-other horizontally.  The vertical spacing between staffs can
+other horizontally.  The vertical spacing between staves can
 also be set so that outside staff objects are interleaved.
 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]
+@lilypond[quote,ragged-right,relative=2,verbatim]
 % the markup is too close to the following note
 c4^"Text"
 c4
@@ -1815,7 +2505,7 @@ 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[quote,fragment,verbatim,relative=1]
+@lilypond[quote,verbatim,relative=1]
 c2 c4. c8 c4. c8 c4. c8 c8
 c8 c4 c4 c4
 @end lilypond
@@ -1858,32 +2548,30 @@ followed by a space that is proportional to their duration relative to
 the common shortest note.  So if we were to add only a few 16th notes
 to the example above, they would be followed by half a NHW:
 
-@lilypond[quote,fragment,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
 c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
 @end lilypond
 
 
-In the introduction
-FIXME FIXME FIXME
-@c (see @rlearning{Engraving}), 
-it was explained that stem
-directions influence spacing.  This is controlled with the
+In the @emph{Essay on automated music engraving}, it was explained
+that stem directions influence spacing (see @ressay{Optical
+spacing}).  This is controlled with the
 @code{stem-spacing-correction} property in the
 @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:
+(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:
 
 @lilypond[quote,ragged-right]
 {
   c'4 e''4 e'4 b'4 |
-  b'4 e''4 b'4 e''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
   c'4 e''4 e'4 b'4 |
-  b'4 e''4 b'4 e''4|
+  b'4 e''4 b'4 e''4 |
 }
 @end lilypond
 
@@ -1923,7 +2611,7 @@ sections with a different notions of long and short notes.
 In the following example, the time signature change introduces a new
 section, and hence the 16ths notes are spaced wider.
 
-@lilypond[relative,fragment,verbatim,quote]
+@lilypond[relative=1,verbatim,quote]
 \time 2/4
 c4 c8 c
 c8 c c4 c16[ c c8] c4
@@ -1980,7 +2668,7 @@ than @code{1 16}.
     \context {
       \Score
       \override SpacingSpanner
-                #'base-shortest-duration = #(ly:make-moment 1 16)
+        #'base-shortest-duration = #(ly:make-moment 1 16)
     }
   }
 }
@@ -1995,29 +2683,35 @@ such symbols and force uniform equal-duration spacing, use
 @code{Score.SpacingSpanner #'uniform-stretching}.  This
 property can only be changed at the beginning of a score,
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
-\new Score \with {
-  \override SpacingSpanner #'uniform-stretching = ##t
-} <<
-  \new Staff{
-    \times 4/5 {
-      c8 c8 c8 c8 c8
+@lilypond[quote,ragged-right,verbatim]
+\score {
+  <<
+    \new Staff {
+      \times 4/5 {
+        c8 c8 c8 c8 c8
+      }
+      c8 c8 c8 c8
     }
-    c8 c8 c8 c8
-  }
-  \new Staff{
-    c8 c8 c8 c8
-    \times 4/5 {
-      c8 c8 c8 c8 c8
+    \new Staff {
+      c8 c8 c8 c8
+      \times 4/5 {
+        c8 c8 c8 c8 c8
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      \override SpacingSpanner #'uniform-stretching = ##t
     }
   }
->>
+}
 @end lilypond
 
 When @code{strict-note-spacing} is set, notes are spaced without
 regard for clefs, bar lines, and grace notes,
 
-@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
+@lilypond[quote,ragged-right,relative=2,verbatim]
 \override Score.SpacingSpanner #'strict-note-spacing = ##t
 \new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
 @end lilypond
@@ -2111,15 +2805,17 @@ We start with the following one-measure example, which uses classical
 spacing with ragged-right turned on.
 
 @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
+\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 lilypond
 
 Notice that the half note which begins the measure takes up far less
@@ -2138,17 +2834,23 @@ turn proportional notation on with the proportionalNotationDuration
 setting.
 
 @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
+\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
+      }
+    }
+  >>
+ \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 20)
     }
   }
->>
+}
 @end lilypond
 
 The half note at the beginning of the measure and the faster notes in
@@ -2156,72 +2858,90 @@ 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 is a context setting
+that lives in @code{Score}.  Remember that context settings can appear
+in one of three locations within 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} in to.
 
 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
+which is the reference duration against that all music will be spaced.
+The LilyPond Scheme function @code{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
+a whole note.  The call @code{#(ly:make-moment 1 20)} therefore produces
+a reference duration of a twentieth note.  Values such as
 @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.
+@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
+\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
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 8)
     }
   }
->>
+}
 
-\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
+\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
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 16)
     }
   }
->>
+}
 
-\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
+\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
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 32)
     }
   }
->>
+}
 @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.
+Also that proportional notation in general takes up more horizontal
+space than classical spacing.  Proportional spacing provides rhythmic
+clarity at the expense of horizontal space.
 
 Next we examine how to optimally space overlapping tuplets.
 
@@ -2230,71 +2950,84 @@ classical spacing, when we add a second staff with a different type of
 tuplet.
 
 @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
+\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
+    \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 spacing is bad because the evenly notes of the bottom staff do not
-stretch uniformly.  Classical engraving includes very few complex
+The spacing is bad because the evenly spaced notes of the bottom staff
+do not stretch uniformly.  Classical engravings include very few complex
 triplets and so classical engraving rules can generate this type of
-result.  Setting @code{proportionalNotationDuration} remedies this
-situation considerably.
+result.  Setting @code{proportionalNotationDuration} fixes this.
 
 @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
+\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
+    \new RhythmicStaff {
+      \times 8/9 {
+        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 20)
     }
   }
->>
+}
 @end lilypond
 
 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 9-tuplet space ever so slightly more widely than 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}.
 
 @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
+\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
+    \new RhythmicStaff {
+      \times 8/9 {
+        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
+      }
+    }
+  >>
+  \layout {
+    \context {
+      \Score
+      proportionalNotationDuration = #(ly:make-moment 1 20)
+      \override SpacingSpanner #'uniform-stretching = ##t
     }
   }
->>
+}
 @end lilypond
 
 Our two-staff example now spaces exactly, our rhythmic
@@ -2303,14 +3036,14 @@ 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
+'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,
+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.
@@ -2401,14 +3134,14 @@ property of @code{SpacingSpanner}.  Compare the two scores below:
 @end lilypond
 
 Both scores are proportional, but the spacing in the first score
-is too loose because of the clef change. The spacing of the second
+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.
 
 In addition to the settings given here, there are other settings
-that frequently appear in proportional scores. These include:
+that frequently appear in proportional scores.  These include:
 
 @itemize
 @item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
@@ -2477,7 +3210,7 @@ All layout dimensions are displayed in staff-spaces, regardless
 of the units specified in the @code{\paper} or @code{\layout} block.
 In the above example, @code{paper-height} has a value of 59.75
 @code{staff-spaces}, and the @code{staff-size} is 20 points (the
-default value). Note that:
+default value).  Note that:
 
 @multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm}
 
@@ -2493,7 +3226,7 @@ default value). Note that:
 
 @noindent
 In this case, one @code{staff-space} is approximately equal to
-1.757mm. Thus the @code{paper-height} measurement of 59.75
+1.757mm.  Thus the @code{paper-height} measurement of 59.75
 @code{staff-spaces} is equivalent to 105 millimeters, the height
 of @code{a6} paper in landscape orientation.  The pairs
 (@var{a},@var{b}) are intervals, where @var{a} is the lower
@@ -2513,7 +3246,7 @@ Snippets:
 
 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}.
+layout variables, see @ref{Page layout}.
 
 Other than margins, there are a few other options to save space:
 
@@ -2525,8 +3258,7 @@ there is no blank space at the bottom of the page.
 
 @example
 \paper @{
-  between-system-padding = #0.1
-  between-system-space = #0.1
+  system-system-spacing = #'((padding . 0) (space . 0.1))
   ragged-last-bottom = ##f
   ragged-bottom = ##f
 @}
@@ -2538,7 +3270,7 @@ setting a value, even the same value as the number of systems
 being typeset by default, will sometimes cause more systems to
 be fitted onto each page, as an estimation step is then bypassed,
 giving a more accurate fit to each page.  Also, forcing an actual
-reduction in the number of systems may save a further page. For
+reduction in the number of systems may save a further page.  For
 example, if the default layout has 11 systems, the following
 assignment will force a layout with 10 systems.
 
@@ -2558,8 +3290,7 @@ 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
+e4 c g-\tweak #'X-offset #-2.7 -\tweak #'Y-offset #2.5 \f c
 @end lilypond
 
 @item
@@ -2614,7 +3345,7 @@ block so that it applies to the whole score.
 
 @seealso
 Notation Reference:
-@ref{Page formatting},
+@ref{Page layout},
 @ref{Changing horizontal spacing}.
 
 Snippets: