]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/essay/engraving.itely
Merge remote-tracking branch 'origin/master' into translation
[lilypond.git] / Documentation / essay / engraving.itely
index 06e3cc5258b9b099028ee67f795c5229b25828dd..5136a331e04fc3174a33372d598dd12979c9a39b 100644 (file)
@@ -4,52 +4,46 @@
     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.13.4"
+@c \version "2.19.2"
 
 @node Music engraving
 @chapter Music engraving
 
-This section covers the overall goals and architecture of
-LilyPond.
+This essay describes why LilyPond was created and how it can produce
+such beautiful sheet music.
 
 @c TODO:
-@c update LP 1.4 example with PDF
-@c annotate typography errors in old LilyPond
-@c add Schubert
-@c add 'tweaked' versions of LP & Finale BWV 861
-@c find a good value for #'between-staff-spacing #'padding
 @c remove 3mm eps bounding box left padding for Sarabande (This will
 @c     require adding a new snippet option to lilypond-book.py
-
-@c Notes:
-@c Incorrect beaming in the Sarabande is a known bug.
+@c check formatting of HTML output
 
 @menu
-* Engraving::                   
-* Automated engraving::         
-* What symbols to engrave?::    
-* Music representation::        
-* Example applications::        
-* Appendix::                    
+* The LilyPond story::
+* Engraving details::
+* Automated engraving::
+* Building software::
+* Putting LilyPond to work::
+* Engraved examples (BWV 861)::
 @end menu
 
 @node The LilyPond story
-@unnumberedsec The LilyPond story
+@section The LilyPond story
 
-Before LilyPond had a community of users around the world, before it had
-been used to produce university course notes or world-premier opera
-performance scores, before there was an essay on music engraving or any
-computer code or even an organized team of developers, LilyPond began
-with a question:
+Long before LilyPond had been used to engrave beautiful performance
+scores, before it could create university course notes or even simple
+melodies, before there was a community of users around the world or even
+an essay on music engraving, LilyPond began with a question:
 
 @quotation
 Why does most computer output fail to achieve the beauty and balance of
 a hand-engraved score?
 @end quotation
 
+@noindent
 Some of the answers can be found by examining the two scores
 @ifnottex
 below.
@@ -61,40 +55,44 @@ The first score is a beautiful hand-engraved score from 1950 and the
 second is a modern, computer-engraved edition.
 
 @ifnottex
+@quotation
 @noindent
 Bärenreiter BA 320, @copyright{}1950:
 
 @sourceimage{baer-suite1-fullpage,,,png}
+@end quotation
 
+@quotation
 @noindent
 Henle no. 666, @copyright{}2000:
 
 @sourceimage{henle-suite1-fullpage,,,png}
+@end quotation
 @end ifnottex
 
 The notes here are identical, taken from Bach's first Suite for solo
 cello, but the appearance is different, especially if you print them out
-and veiw them from a distance.
+and view them from a distance.
 @ifnottex
 (The PDF version of this manual has high-resolution images suitable for
 printing.)
 @end ifnottex
 Try reading or playing from each of the scores and you will find that
-the hand-engraved score is more enjoyable to use. It has flowing lines
+the hand-engraved score is more enjoyable to use.  It has flowing lines
 and movement, and it feels like a living, breathing piece of music,
 while the newer edition seems cold and mechanical.
 
-It is kind of hard to immediately see what makes the difference with the
-newer edition. Everything looks neat and tiny, possibly even ``better''
-because it looks more computerized and uniform. This really puzzled us
-for quite a while. We wanted to improve computer notation, but we first
+It is hard to immediately see what makes the difference with the newer
+edition.  Everything looks neat and tidy, possibly even @qq{better}
+because it looks more computerized and uniform.  This really puzzled us
+for quite a while.  We wanted to improve computer notation, but we first
 had to figure out what was wrong with it.
 
 The answer lies in the precise, mathematical uniformity of the newer
-edition. Find the barline in the middle of each line: in the
-hand-engraved score the position of these barlines has some natural
+edition.  Find the bar line in the middle of each line: in the
+hand-engraved score the position of these bar lines has some
 natural variation, while in the newer version they line up almost
-perfectly. This is shown in these simplified page layout diagrams,
+perfectly.  This is shown in these simplified page layout diagrams,
 traced from the hand-engraved (left) and computer-generated music
 (right):
 
@@ -108,40 +106,38 @@ traced from the hand-engraved (left) and computer-generated music
 @end quotation
 @noindent
 
-In the computer-generated output, even the individual noteheads are
+In the computer-generated output, even the individual note heads are
 aligned in vertical columns, making the contour of the melody disappear
 into a rigid grid of musical markings.
 
 There are other differences as well: in the hand-engraved edition the
-vertical lines are all stronger, the slurs lie closer to the noteheads,
-and there is more visual variety in the placement of the beams. Although
-such details may seem like nitpicking, the result is a score that is
-easier to read. In the computer-generated output, each line is nearly
-identical and if the musician looks away for a moment, she will be lost
-on the page.
+vertical lines are all stronger, the slurs lie closer to the note heads,
+and there is more variety in the slopes of the beams.  Although such
+details may seem like nitpicking, the result is a score that is easier
+to read.  In the computer-generated output, each line is nearly identical
+and if the musician looks away for a moment she will be lost on the
+page.
 
 LilyPond was designed to solve the problems we found in existing
 software and to create beautiful music that mimics the finest
-hand-engraved scores. Along the way, we have learned a great deal about
-the work that goes into a well-engraved score. In this essay we describe
-several of those aspects that we have tried to imitate in LilyPond.
+hand-engraved scores.
 
 @iftex
 @page
 @noindent
 Bärenreiter BA 320, @copyright{}1950:
 
-@sourceimage{baer-suite1-fullpage,16cm,,}
+@sourceimage{baer-suite1-fullpage-hires,16cm,,}
 @page
 @noindent
 Henle no. 666, @copyright{}2000:
 @sp 3
-@sourceimage{henle-suite1-fullpage,16cm,,}
+@sourceimage{henle-suite1-fullpage-hires,16cm,,}
 @page
 @end iftex
 
 @node Engraving details
-@unnumberedsec Engraving details
+@section Engraving details
 
 @cindex engraving
 @cindex typography, music
@@ -151,7 +147,7 @@ Henle no. 666, @copyright{}2000:
 
 The art of music typography is called @emph{(plate) engraving}, a term
 that derives from the manual process of music printing@footnote{Early
-european printers explored several processes, including hand-carved
+European printers explored several processes, including hand-carved
 wooden blocks, movable type, and engraved sheets of thin metal.
 Typesetting had the advantage of being more easily corrected and
 facilitating the inclusion of text and lyrics, but only engraving
@@ -159,13 +155,13 @@ offered the ability to do unimpeded layout and unanticipated notation.
 In the end, hand-engraved scores became the standard for all printed
 music, with the exception of some hymnals and songbooks where
 typesetting was justified by its ease and economy, even into the
-twentieth century.}. Just a few decades ago, sheet music was made by
+twentieth century.}.  Just a few decades ago, sheet music was made by
 cutting and stamping the music into a zinc or pewter plate in mirror
-image. The plate would be inked, and the depressions caused by the
-cutting and stamping would hold ink. An image was formed by pressing
-paper to the plate. The stamping and cutting was done completely by hand
+image.  The plate would be inked, and the depressions caused by the
+cutting and stamping would hold ink.  An image was formed by pressing
+paper to the plate.  The stamping and cutting was done completely by hand
 and making a correction was cumbersome, so the engraving had to be
-nearly perfect in one go. Engraving was a highly specialized skill; a
+nearly perfect in one go.  Engraving was a highly specialized skill; a
 craftsman had to complete around five years of training before earning
 the title of master engraver, and another five years of experience were
 necessary to become truly skilled.
@@ -179,31 +175,40 @@ necessary to become truly skilled.
 @end ifnottex
 @end quotation
 
-@c Now all newly printed music is produced with computers. This has
+LilyPond is inspired by traditional manual engravings published by
+European music publishers in and towards the end of the first half of
+the twentieth century, including Bärenreiter, Duhem, Durand,
+Hofmeister, Peters, and Schott.  This is sometimes regarded as the peak
+of traditional musical engraving practice.  As we have studied these
+editions we have learned a great deal about what goes into a
+well-engraved score, and the aspects that we wanted to imitate in
+LilyPond.
+
+@c Now all newly printed music is produced with computers.  This has
 @c obvious advantages: prints are cheaper to make, editorial work can be
 @c delivered by email, and the original data can be easily stored.
 @c Unfortunately, computer-generated scores rarely match the quality of
-@c hand-engraved scores. Instead, computer printouts have a bland,
+@c hand-engraved scores.  Instead, computer printouts have a bland,
 @c mechanical look, which makes them unpleasant to play from.
 
 @menu
-* Music fonts::                 
-* Optical spacing::             
-* Ledger lines::                
-* Optical sizing::              
-* Why work so hard?::           
+* Music fonts::
+* Optical spacing::
+* Ledger lines::
+* Optical sizing::
+* Why work so hard?::
 @end menu
 
 @node Music fonts
 @unnumberedsubsec Music fonts
 
 The images below illustrate some differences between traditional
-engraving and typical computer output. The left picture shows a scan of
+engraving and typical computer output.  The left picture shows a scan of
 a flat symbol from a hand-engraved Bärenreiter edition, while the right
 picture depicts a symbol from an edition of the same music published in
-2000. Although both images are printed in the same shade of ink, the
+2000.  Although both images are printed in the same shade of ink, the
 earlier version looks darker: the staff lines are heavier, and the
-Bärenreiter flat has a bold, almost voluptuous rounded look. The right
+Bärenreiter flat has a bold, almost voluptuous rounded look.  The right
 scan, on the other hand, has thinner lines and a straight layout with
 sharp corners.
 
@@ -247,10 +252,10 @@ Henle (2000)
 
 When we wanted to write a computer program to create music typography,
 there were no musical fonts freely available that could match the
-elegance of our favorite scores. Undeterred, we created a font of
-musical symbols, relying on nice printouts of hand-engraved music. The
+elegance of our favorite scores.  Undeterred, we created a font of
+musical symbols, relying on nice printouts of hand-engraved music.  The
 experience helped develop a typographical taste, and it made us
-appreciate subtle design details. Without that experience, we would not
+appreciate subtle design details.  Without that experience, we would not
 have realized how ugly the fonts were that we admired at first.
 
 Below is a sample of two music fonts: the upper set is the default font
@@ -267,17 +272,17 @@ our own LilyPond font.
 @end quotation
 
 The LilyPond symbols are heavier and their weight is more consistent,
-which makes them easier to read. Fine endings, such as the ones on the
+which makes them easier to read.  Fine endings, such as the ones on the
 sides of the quarter rest, should not end in sharp points, but rather
-in rounded shapes. This is because sharp corners of the punching dies
-are fragile and quickly wear out when stamping in metal. Taken together,
+in rounded shapes.  This is because sharp corners of the punching dies
+are fragile and quickly wear out when stamping in metal.  Taken together,
 the blackness of the font must be carefully tuned together with the
 thickness of lines, beams and slurs to give a strong yet balanced
 overall impression.
 
-Also, notice that our half-notehead is not elliptic but slightly diamond
-shaped. The vertical stem of a flat symbol is slightly brushed, becoming
-wider at the top. The sharp and the natural are easier to distinguish
+Also, notice that our half-note head is not elliptic but slightly diamond
+shaped.  The vertical stem of a flat symbol is slightly brushed, becoming
+wider at the top.  The sharp and the natural are easier to distinguish
 from a distance because their angled lines have different slopes and the
 vertical strokes are heavier.
 
@@ -285,11 +290,11 @@ vertical strokes are heavier.
 @unnumberedsubsec Optical spacing
 
 In spacing, the distribution of space should reflect the durations
-between notes. However, as we saw in the Bach Suite above, many modern
+between notes.  However, as we saw in the Bach Suite above, many modern
 scores adhere to the durations with mathematical precision, which leads
-to poor results. In the next example a motive is printed twice: the
+to poor results.  In the next example a motif is printed twice: the
 first time using exact mathematical spacing, and the second with
-corrections. Which do you prefer?
+corrections.  Which do you prefer?
 
 @cindex optical spacing
 
@@ -300,7 +305,7 @@ corrections. Which do you prefer?
 }
 
 music = {
-   c'4 e''4 e'4 b'4 |
+   c'4 e''4 e'4 b'4
    \stemDown
    b'8[ e'' a' e'']
    \stemNeutral
@@ -312,9 +317,9 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.0
-      \override NoteSpacing #'same-direction-correction = #0.0
-      \override StaffSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing.stem-spacing-correction = #0.0
+      \override NoteSpacing.same-direction-correction = #0.0
+      \override StaffSpacing.stem-spacing-correction = #0.0
     }
   }
 }
@@ -340,7 +345,7 @@ music = {
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing.stem-spacing-correction = #0.6
     }
   }
 }
@@ -351,44 +356,21 @@ music = {
 @cindex spacing, regular
 
 Each bar in the fragment only uses notes that are played in a constant
-rhythm. The spacing should reflect that. Unfortunately, the eye deceives
+rhythm.  The spacing should reflect that.  Unfortunately, the eye deceives
 us a little; not only does it notice the distance between note heads, it
-also takes into account the distance between consecutive stems. As a
+also takes into account the distance between consecutive stems.  As a
 result, the notes of an up-stem/@/down-stem combination should be put
 farther apart, and the notes of a down-stem/@/up-stem combination should
 be put closer together, all depending on the combined vertical positions
-of the notes. The lower two measures are printed with this correction,
+of the notes.  The lower two measures are printed with this correction,
 the upper two measures, however, form down-stem/@/up-stem clumps of
-notes. A master engraver would adjust the spacing as needed to please
+notes.  A master engraver would adjust the spacing as needed to please
 the eye.
 
-Another example of optical spacing is the visual interplay between the
-stems and the bar lines. When an up-stem precedes the bar line, a little
-more space is needed to keep it from feeling crowded:
-
-@lilypond
-\paper {
-  ragged-right = ##t
-}
-
-\score {
-  {
-    c''8 c'' c'' c'' c'' c'' c'' c'' \break
-    a' a' a' a' a' a' a' a'
-  }
-  \layout {
-    \context {
-      \Staff
-      \remove "Time_signature_engraver"
-      \override NoteSpacing #'stem-spacing-correction = #0.7
-    }
-    \context {
-      \Score
-      \remove "Bar_number_engraver"
-    }
-  }
-}
-@end lilypond
+The spacing algorithms in LilyPond even take the barlines into account,
+which is why the final up-stem in the properly spaced example has been
+given a little more space before the barline to keep it from looking
+crowded.  A down-stem would not need this adjustment.
 
 @node Ledger lines
 @unnumberedsubsec Ledger lines
@@ -398,10 +380,10 @@ more space is needed to keep it from feeling crowded:
 
 Ledger lines present a typographical challenge: they make it more
 difficult to space musical symbols close together and they must be clear
-enough to identify the pitch at a glance. In the example below, we see
+enough to identify the pitch at a glance.  In the example below, we see
 that ledger lines should be thicker than normal staff lines and that an
 expert engraver will shorten a ledger line to allow closer spacing with
-accidentals. We have included this feature in LilyPond's engraving.
+accidentals.  We have included this feature in LilyPond's engraving.
 
 @multitable @columnfractions .25 .25 .25 .25
 @item @tab
@@ -428,7 +410,7 @@ accidentals. We have included this feature in LilyPond's engraving.
 @node Optical sizing
 @unnumberedsubsec Optical sizing
 
-Music may need to be printed in a range of sizes. Originally, this was
+Music may need to be printed in a range of sizes.  Originally, this was
 accomplished by creating punching dies in each of the required sizes,
 which meant that each die was designed to look its best at that size.
 With the advent of digital fonts, a single outline can be mathematically
@@ -436,7 +418,7 @@ scaled to any size, which is very convenient, but at the smaller sizes
 the glyphs will appear very light.
 
 In LilyPond, we have created fonts in a range of weights, corresponding
-to a range of music sizes. This is a LilyPond engraving at staff size
+to a range of music sizes.  This is a LilyPond engraving at staff size
 26:
 
 @quotation
@@ -461,9 +443,12 @@ magnified by 236% to print at the same size as the previous example:
 @end ifnottex
 @end quotation
 
-At smaller sizes, LilyPond uses proportionally heavier lines and so the
-music will still read well. This also allows staves of different
-sizes to coexist peacefully when used together on the same page:
+@noindent
+At smaller sizes, LilyPond uses proportionally heavier lines so the
+music will still read well.
+
+This also allows staves of different sizes to coexist peacefully when
+used together on the same page:
 
 @c Grieg's Violin Sonata Op. 45
 @lilypond[indent=1.5cm]
@@ -472,11 +457,10 @@ global = {
   \key c \minor
 }
 
-\new Score <<
-  \new Staff \with {
-      fontSize = #-4
-      \override StaffSymbol #'staff-space = #(magstep -4)
-      \override StaffSymbol #'thickness = #(magstep -3)
+\score {
+  <<
+    \new Staff \with {
+      \magnifyStaff #2/3
     }
     \relative c' {
       \global
@@ -485,53 +469,57 @@ global = {
       g8.(^> b16 c ees) g8-.^> r r
       R2.
     }
-  \new PianoStaff <<
-    \set PianoStaff.instrumentName = #"Piano"
-    \new Staff \relative c' {
-      \global
-      s2.
-      s4. s8 r8 r16 <c f aes c>
-      <c f aes c>4.^> <c ees g>8 r r
-    }
-    \new Staff \relative c {
-      \global
-      \clef "bass"
-      << {
-        \once \override DynamicText #'X-offset = #-3
-        <ees g c>2.~->^\f
-        <ees g c>4.~ <ees g c>8
-      } \\ {
-        <c g c,>2.~
-        <c g c,>4.~ <c g c,>8
-      } >>
-      r8 r16 <f, c' aes'>16
-      <f c' aes'>4.-> <c' g'>8 r r
-    }
+    \new PianoStaff <<
+      \set PianoStaff.instrumentName = #"Piano"
+      \new Staff \relative c' {
+        \global
+        s2.
+        s4. s8 r8 r16 <c f aes c>
+        <c f aes c>4.^> <c ees g>8 r r
+      }
+      \new Staff \relative c {
+        \global
+        \clef "bass"
+        <<
+        {
+          \once \override DynamicText.X-offset = #-3
+          <ees g c>2.~->^\f
+          <ees g c>4.~ <ees g c>8
+        } \\ {
+          <c g c,>2.~
+          <c g c,>4.~ <c g c,>8
+        }
+        >>
+        r8 r16 <f, c' aes'>16
+        <f c' aes'>4.-> <c' g'>8 r r
+      }
+    >>
   >>
->>
+}
 @end lilypond
 
+
 @node Why work so hard?
 @unnumberedsubsec Why work so hard?
 
 Musicians are usually more absorbed with performing than with studying
 the looks of a piece of music, so nitpicking typographical details may
-seem academic. But it is not. Sheet music is performance material:
+seem academic.  But it is not.  Sheet music is performance material:
 everything is done to aid the musician in letting her perform better,
-and anything that is unclear or unpleasant to read is a hinderance.
+and anything that is unclear or unpleasant to read is a hindrance.
 
 Traditionally engraved music uses bold symbols on heavy staff to create
 a strong, well-balanced look that stands out well when the music is far
-away from the reader: for example, if it is on a music stand. A careful
+away from the reader: for example, if it is on a music stand.  A careful
 distribution of white space allows music to be set very tightly without
-crowding symbols together. The result minimizes the number of page
+crowding symbols together.  The result minimizes the number of page
 turns, which is a great advantage.
 
-This is a common characteristic of typography. Layout should be pretty,
+This is a common characteristic of typography.  Layout should be pretty,
 not only for its own sake, but especially because it helps the reader in
-his task. For sheet music this is of double importance because musicians
-have a limited amount of attention. The less attention they need for
-reading, the more they can focus on playing the music. In other words,
+his task.  For sheet music this is of double importance because musicians
+have a limited amount of attention.  The less attention they need for
+reading, the more they can focus on playing the music.  In other words,
 better typography translates to better performances.
 
 These examples demonstrate that music typography is an art that is
@@ -545,60 +533,114 @@ to see and love to play from.
 
 
 @node Automated engraving
-@unnumberedsec Automated engraving
+@section Automated engraving
 
 @cindex engraving, automated
 @cindex automated engraving
 
+Here we describe what is required to create software that can mimic the
+layout of engraved scores: a method of describing good layouts to the
+computer and a lot of detailed comparisons with real engravings.
+
 @menu
-* Beauty contests::             
-* Notation benchmarking::       
-* Flexible architecture::       
+* Beauty contests::
+* Improvement by benchmarking::
+* Getting things right::
 @end menu
 
 @node Beauty contests
 @unnumberedsubsec Beauty contests
 
-Rather than trying to write rules that describe how to draw an
-attractive slur for every possible scenario, we have written rules that
-describe an attractive slur and LilyPond finds the nicest possibility.
-For example, here are three possible slur configurations, and LilyPond
-has given each one a score in `ugly points':
+How do we actually make formatting decisions?  In other words, which
+of the three configurations should we choose for the following slur?
 
 @lilypond
-%\layout { #(define debug-slur-scoring #t) }
-
 \relative c {
-    \clef bass
-    \once \override Slur #'positions = #'(1.5 . 1)
-    e8[(_"15.39" f] g[ a b d,)] r4
-    \once \override Slur #'positions = #'(2 . 3)
-    e8[(_"13.08" f] g[ a b d,)] r4
-    e8[(_"12.04" f] g[ a b d,)] r4
+  \clef bass
+  \once \override Slur.positions = #'(1.5 . 1)
+  e8[( f] g[ a b d,)] r4
+  \once \override Slur.positions = #'(2 . 3)
+  e8[( f] g[ a b d,)] r4
+  e8[( f] g[ a b d,)] r4
 }
 @end lilypond
 
-@noindent
+There are a few books on the art of music engraving
+available.  Unfortunately, they contain simple rules of thumb and some
+examples.  Such rules can be instructive, but they are a far cry from
+an algorithm that we could readily implement in a computer.  Following
+the instructions from literature leads to algorithms with lots of
+hand-coded exceptions.  Doing all this case analysis is a lot of work,
+and often not all cases are covered completely:
+
+@quotation
+@iftex
+@sourceimage{ross-beam-scan,7cm,,}
+@end iftex
+@ifnottex
+@sourceimage{ross-beam-scan,,,.jpg}
+@end ifnottex
+@end quotation
+
+(Image source: Ted Ross, @emph{The Art of Music Engraving})
+
+Rather than trying to write detailed layout rules for every possible
+scenario, we only have to describe the objectives well enough that
+LilyPond can judge the attractiveness of several alternatives.  Then,
+for each possible configuration we compute an ugliness score and we
+choose the least ugly configuration.
 
-The first example gets 15.39 points for grazing one of the notes. The
-second one is nicer, but the slur doesn't start or end on the noteheads.
+For example, here are three possible slur configurations, and LilyPond
+has given each one a score in @q{ugly points}.  The first example gets
+15.39 points for grazing one of the noteheads:
+
+@lilypond
+\relative c {
+  \clef bass
+  \once \override Slur.positions = #'(1.5 . 1)
+  e8[(_"15.39" f] g[ a b d,)] r4
+}
+@end lilypond
+
+The
+second one is nicer, but the slur doesn't start or end on the note heads.
 It gets 1.71 points for the left side and 9.37 points for the right
 side, plus another 2 points because the slur ascends while the melody
-descends for a total of 13.08 ulgy points. The final slur gets 10.04
+descends for a total of 13.08 ugly points:
+
+@lilypond
+\relative c {
+  \clef bass
+  \once \override Slur.positions = #'(2 . 3)
+  e8[(_"13.08" f] g[ a b d,)] r4
+}
+@end lilypond
+
+The final slur gets 10.04
 points for the gap on the right and 2 points for the upward slope, but
 it is the most attractive of the three configurations, so LilyPond
-selects that one.
+selects this one:
+
+@lilypond
+\relative c {
+  \clef bass
+  e8[(_"12.04" f] g[ a b d,)] r4
+}
+@end lilypond
 
-This technique is quite general, and is used to select beam
-configurations, ties and dots in chords, line breaks, and page breaks.
+This technique is quite general, and is used to make optimal decisions
+for beam configurations, ties and dots in chords, line breaks, and page
+breaks.  The results of these decisions can be judged by comparison to
+real engravings.
 
-@node Notation benchmarking
-@unnumberedsubsec Notation benchmarking
+@node Improvement by benchmarking
+@unnumberedsubsec Improvement by benchmarking
 
-We have tuned LilyPond's layout rules by comparing its output to
-hand-engraved scores. Here is one line of a benchmark piece from a
-hand-engraved edition (Bärenreiter BA320), and as engraved by an old
-version of LilyPond (version 1.4, released May 2001):
+LilyPond's output has improved gradually over time, and it continues to
+improve by comparing its output to hand-engraved scores.
+
+For example, here is one line of a benchmark piece from a
+hand-engraved edition (Bärenreiter BA320):
 
 @iftex
 @sourceimage{baer-sarabande-hires,16cm,,}
@@ -607,8 +649,12 @@ version of LilyPond (version 1.4, released May 2001):
 @sourceimage{baer-sarabande,,,png}
 @end ifnottex
 
+@noindent
+and the same quotation as engraved by a very old version of LilyPond
+(version 1.4, May 2001):
+
 @iftex
-@sourceimage{lily14-sarabande,16cm,,}
+@sourceimage{pdf/lily14-sarabande,16cm,,}
 @end iftex
 @ifnottex
 @sourceimage{lily14-sarabande,,,png}
@@ -618,20 +664,28 @@ version of LilyPond (version 1.4, released May 2001):
 comparison with the hand-engraved score showed a lot of errors in the
 formatting details:
 
+@iftex
+@sourceimage{lily14-sarabande-annotated-hires,16cm,,}
+@end iftex
+@ifnottex
+@sourceimage{lily14-sarabande-annotated,,,png}
+@end ifnottex
+
 @itemize @bullet
-@item most of the stems are too long
-@item the trill marks are too big
+@item there is too much space before the time signature
+@item the stems of the beamed notes are too long
 @item the second and fourth measures are too narrow
 @item the slur is awkward-looking
+@item the trill marks are too big
 @item the stems are too thin
-@item there was too much space before the time signature
 @end itemize
 
 @noindent
-(There were also two missing notes, and one wrong one!)
+(There were also two missing note heads, several missing editorial
+annotations, and an incorrect pitch!)
 
 By adjusting the layout rules and font design, the output has improved
-considerably. This is the same musical quotation compared to the output
+considerably.  Compare the same reference score and the output
 from the current version of LilyPond (@version{}):
 
 @iftex
@@ -647,17 +701,21 @@ from the current version of LilyPond (@version{}):
   \key d \minor
   \time 3/4
   \mergeDifferentlyDottedOn
-  << {\slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e)}
-     \\ {d4_2 a2}
+  <<
+    { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) }
+     \\
+    { d4_2 a2 }
   >>
   \slurDashed
   <f' a, d,>4. e8( d c)
   \slurSolid
-  bes g' f e16( f g_1 a_2 bes_3 d,_2)
+  bes8 g' f e16( f g_1 a_2 bes_3 d,_2)
   \slurDashed
   cis4.-\trill b8_3( a g)
-  << {\slurDashed d'8.( e16) e4.-\trill( d16 e)}
-     \\ {<f, a>4 a2}
+  <<
+    { \slurDashed d'8.( e16) e4.-\trill( d16 e) }
+     \\
+    { <f, a>4 a2 }
   >>
 }
 @end lilypond
@@ -666,202 +724,400 @@ from the current version of LilyPond (@version{}):
 The current output is not a clone of the reference edition, but it is
 much closer to publication quality that the earlier output.
 
-[@strong{Andrew H:} This comparison is not finished. I promise not to
-leave it in such a mess!]
+@node Getting things right
+@unnumberedsubsec Getting things right
 
-Another valuable form of benchmarking is comparing LilyPond's output to
-the output of a commercial software product. In this case we have chosen
-Finale 2008, which is one of the most popular commercial scorewriters,
-particularly in North America. Sibelius is their major rival and they
-appear to be especially strong in the European market.
+We can also measure LilyPond's ability to make music engraving decisions
+automatically by comparing LilyPond's output to the output of a
+commercial software product.  In this case we have chosen Finale 2008,
+which is one of the most popular commercial score writers, particularly
+in North America.  Sibelius is its major rival and appears to be
+especially strong in the European market.
 
-We have selected the last seven measures of Bach's Fugue in G minor from
-the Well-Tempered Clavier, Book I, BWV 861. In the final draft there
-will be pitcures here, but for now please consult the appendix
-(currently pp. 12--14) for the output from both programs and images from
-four reference engravings.
+For our comparison we selected Bach's Fugue in G minor from the
+Well-Tempered Clavier, Book I, BWV 861, whose opening subject is
 
-My findings so far:
-
-@itemize @bullet
-@item Finale rests are always at the same heights (in v1/v2 situations).
-@item Finale doesn't interlock notes nicely (mm. 28--29).
-@item Finale misses the B-flat in mm. 33!
-@item Finale's beamed stems are almost always too long when they extend
-off the staff.
-@item LilyPond 2.13.5 has a vertical spacing problem (no padding).
-@item LilyPond could use a little more space before the first note of
-mm. 30, 33--34.
-@item LilyPond's ties to beat 1 of mm. 31 are shorter than any of the
-reference scores, and Finale's are even worse.
-@item LilyPond's stems are often shorter than any of the references,
-especially RH mm. 31.
-@item In some locations, the Bärenreiter engraver(s) place rests
-further from the staff than strictly necessary in order to keep them
-vertically close to the subsequent element in that voice (e.g. mm. 28).
-@item There is some acceptable variation within the reference scores,
-although some scores are more attractive than others.
-@end itemize
+@lilypond
+\relative c' {
+  \key g \minor
+  \clef "treble_8"
+  r8 d ees g, fis4 g
+  r8 a16 bes c8 bes16 a bes8
+}
+@end lilypond
 
-@c Han-Wen said once:
-@c A lot of readers misinterpret the Finale example. Finale is a
-@c powerful package, and in the hands of a good engraver — which is
-@c something different from a good musician — it can produce very good
-@c scores. However, the friendly GUI is misleading: you need a lot of
-@c time and expertise to get decent scores from Finale.
+@noindent
 
-@c How do we go about implementing typography?  If craftsmen need
-@c over ten years to become true masters, how could we simple hackers
-@c ever write a program to take over their jobs?
+We made our comparison by engraving the last seven measures of the piece
+(28--34) in Finale and LilyPond.  This is the point in the piece where
+the subject returns in a three-part stretto and leads into the closing
+section.  In the Finale version, we have resisted the temptation to make
+any adjustments to the default output because we are trying to show the
+things that each software package gets right without assistance.  The
+only major edits that we made were adjusting the page size to match this
+essay and forcing the music onto two systems to make the comparison
+easier.  By default Finale would have engraved two systems of three
+measures each and a final, full-width system containing a single
+measure.
+
+Many of the differences between the two engravings are visible in
+measures 28--29, as shown here with Finale first and LilyPond second:
 
-@c The answer is: we cannot.
+@iftex
+@sourceimage{pdf/bwv861mm28-29,14cm,,}
+@end iftex
+@ifnottex
+@sourceimage{bwv861mm28-29,,,png}
+@end ifnottex
 
-The last two points lead into this concluding/transition paragraph:
+@lilypond[staffsize=19.5,line-width=14\cm]
+global = { \key g \minor }
 
-Typography relies on human judgment of
-appearance, so people cannot be replaced completely.  However,
-much of the dull work can be automated.  If LilyPond solves most
-of the common situations correctly, this will be a huge
-improvement over existing software.  The remaining cases can be
-tuned by hand.  Over the course of years, the software can be
-refined to do more and more things automatically, so manual
-overrides are less and less necessary. Where manual adjustments are
-needed, LilyPond's structure must be ...
+partI = \relative c' {
+  \voiceOne
+  fis8 d' ees g, fis4 g
+  r8 a16 bes c8 bes16 a d8 r r4
+}
 
-@node Flexible architecture
-@unnumberedsubsec Flexible architecture
+partII = \relative c' {
+  \voiceTwo
+  d4 r4 r8 d'16 c bes8 c16 d
+  ees8 d c ees a, r r4
+}
 
-When we started, we wrote the LilyPond program entirely in the C++
-programming language; the program's functionality was set in stone
-by the developers.  That proved to be unsatisfactory for a number
-of reasons:
+partIII = \relative c' {
+  \voiceOne
+  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+}
 
-@itemize
+partIV = \relative c {
+  \voiceTwo
+  d4 r r2
+  r8 d ees g, fis4 a
+}
 
-@item When LilyPond makes mistakes, users need to override
-formatting decisions.  Therefore, the user must have access to the
-formatting engine.  Hence, rules and settings cannot be fixed by
-us at compile-time but must be accessible for users at run-time.
+\score {
+  <<
+    % \set Score.barNumberVisibility = #all-bar-numbers-visible
+    % required in 2.13
+    \set Score.currentBarNumber = #28
+    \bar ""
+    \new PianoStaff <<
+      \new Staff = "RH" <<
+        \global
+        \new Voice = "voiceI" { \partI }
+        \new Voice = "voiceII" { \partII }
+      >>
+      \new Staff = "LH"
+      <<
+        \clef "bass"
+        \global
+        \new Voice = "voiceIII" { \partIII }
+        \new Voice = "voiceIV" { \partIV }
+      >>
+    >>
+  >>
+  \layout {
+    \context {
+      \Staff
+      \remove "Time_signature_engraver"
+    }
+    \context {
+      \PianoStaff
+      \override StaffGrouper.staff-staff-spacing.padding = #1
+    }
+  }
+}
+@end lilypond
 
-@item Engraving is a matter of visual judgment, and therefore a
-matter of taste.  As knowledgeable as we are, users can disagree
-with our personal decisions.  Therefore, the definitions of
-typographical style must also be accessible to the user.
+Some shortcomings in the unedited Finale output include:
+@itemize @bullet
+@item Most of the beams extend too far off the staff.  A beam that points
+towards the center of the staff should have a length of about one
+octave, but engravers shorten this when the beam points away from the
+staff in multi-voice music.  The Finale beaming can easily be improved
+with their Patterson Beams plug-in, but we elected to skip that step for
+this example.
+@item Finale doesn't adjust the positions of interlocking note heads,
+which makes the music extremely difficult to read when the upper and
+lower voices exchange positions temporarily:
 
-@item Finally, we continually refine the formatting algorithms, so
-we need a flexible approach to rules.  The C++ language forces a
-certain method of grouping rules that cannot readily be applied to
-formatting music notation.
+@lilypond
+collide = \once \override NoteColumn.force-hshift = #0
 
-@end itemize
+\score {
+  <<
+    \new Voice = "sample" \relative c''{
+      \key g \minor
+      <<
+        { \voiceOne g4 \collide g4 }
+        \new Voice { \voiceTwo bes \collide bes }
+      >>
+    }
+    \new Lyrics \lyricsto "sample" { "good " " bad" }
+  >>
+}
+@end lilypond
 
-@cindex Scheme programming language
+@item Finale has placed all of the rests at fixed heights on the staff.
+The user is free to adjust them as needed, but the software makes no
+attempt to consider the content of the other voice.  As luck would have
+it, there are no true collisions between notes and rests in this example,
+but that has more to do with the positions of the notes than the rest.
+In other words, Bach deserves more credit for avoiding a complete
+collision than Finale does.
 
-These problems have been addressed by integrating an interpreter
-for the Scheme programming language and rewriting parts of
-LilyPond in Scheme.  The current formatting architecture is built
-around the notion of graphical objects, described by Scheme
-variables and functions.  This architecture encompasses formatting
-rules, typographical style and individual formatting decisions.
-The user has direct access to most of these controls.
+@end itemize
 
-Scheme variables control layout decisions.  For example, many
-graphical objects have a direction variable that encodes the
-choice between up and down (or left and right).  Here you see two
-chords, with accents and arpeggios.  In the first chord, the
-graphical objects have all directions down (or left).  The second
-chord has all directions up (right).
+This example is not intended to suggest that Finale cannot be used to
+produce publication-quality output.  On the contrary, in the hands of a
+skilled user it can and does, but it requires skill and time.  One of the
+fundamental differences between LilyPond and commercial scorewriters is
+that LilyPond hopes to reduce the amount of human intervention to an
+absolute minimum, while other packages try to provide an attractive
+interface in which to make these types of edits.
 
-@lilypond[quote,ragged-right]
-\new Score \with {
-   \override SpacingSpanner #'spacing-increment = #3
-   \override TimeSignature #'transparent = ##t
-} \relative c' {
-   \stemDown <e g b>4_>-\arpeggio
-   \override Arpeggio #'direction = #RIGHT
-   \stemUp <e g b>4^>-\arpeggio
-}
-@end lilypond
+One particularly glaring omission we found from Finale is a missing flat
+in measure 33:
 
-@cindex score formatting
-@cindex formatting a score
-@cindex formatting rules
+@quotation
+@iftex
+@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,}
+@end iftex
+@ifnottex
+@sourceimage{bwv861mm33-34-annotate,,,png}
+@end ifnottex
+@end quotation
 
 @noindent
-The process of formatting a score consists of reading and writing
-the variables of graphical objects.  Some variables have a preset
-value.  For example, the thickness of many lines -- a
-characteristic of typographical style -- is a variable with a
-preset value.  You are free to alter this value, giving your score
-a different typographical impression.
+The flat symbol is required to cancel out the natural in the same
+measure, but Finale misses it because it occurred in a different voice.
+So in addition to running a beaming plug-in and checking the spacing on
+the noteheads and rests, the user must also check each measure for
+cross-voice accidentals to avoid interrupting a rehearsal over an
+engraving error.
+
+If you are interested in examining these examples in more detail, the
+full seven-measure excerpt can be found at the end of this essay along
+with four different published engravings.  Close examination reveals that
+there is some acceptable variation among the hand-engravings, but that
+LilyPond compares reasonably well to that acceptable range.  There are
+still some shortcomings in the LilyPond output, for example, it appears
+a bit too aggressive in shortening some of the stems, so there is room
+for further development and fine-tuning.
+
+Of course, typography relies on human judgment of appearance, so people
+cannot be replaced completely.  However, much of the dull work can be
+automated.  If LilyPond solves most of the common situations correctly,
+this will be a huge improvement over existing software.  Over the course
+of years, the software can be refined to do more and more things
+automatically, so manual overrides are less and less necessary.  Where
+manual adjustments are needed, LilyPond's structure has been designed
+with that flexibility in mind.
+
+@node Building software
+@section Building software
+
+This section describes some of the programming decisions that we made
+when designing LilyPond.
 
-@lilypond[quote,ragged-right]
-fragment = {
-   \clef bass f8 as8
-   c'4-~ c'16 as g f e16 g bes c' des'4
-}
-<<
-   \new Staff \fragment
-   \new Staff \with {
-      \override Beam #'beam-thickness = #0.3
-      \override Stem #'thickness = #0.5
-      \override Bar #'thickness = #3.6
-      \override Tie #'thickness = #2.2
-      \override StaffSymbol #'thickness = #3.0
-      \override Tie #'extra-offset = #'(0 .  0.3)
-      }
-      \fragment
->>
-@end lilypond
+@menu
+* Music representation::
+* What symbols to engrave?::
+* Flexible architecture::
+@end menu
 
-Formatting rules are also preset variables: each object has
-variables containing procedures.  These procedures perform the
-actual formatting, and by substituting different ones, we can
-change the appearance of objects.  In the following example, the
-rule governing which note head objects are used to produce the
-note head symbol is changed during the music fragment.
 
-@lilypond[quote,ragged-right]
-#(set-global-staff-size 30)
+@node Music representation
+@unnumberedsubsec Music representation
 
-#(define (mc-squared grob orig current)
-  (let* ((interfaces (ly:grob-interfaces grob))
-         (pos (ly:grob-property grob 'staff-position)))
-    (if (memq 'note-head-interface interfaces)
-        (begin
-          (ly:grob-set-property! grob 'stencil
-            (grob-interpret-markup grob
-              (make-lower-markup 0.5
-                (case pos
-                  ((-5) "m")
-                  ((-3) "c ")
-                  ((-2) (make-smaller-markup (make-bold-markup "2")))
-                  (else "bla")))))))))
+@cindex syntax
+@cindex recursive structures
 
-\new Voice \relative c' {
-  \stemUp
-  \set autoBeaming = ##f
-  \time 2/4
-  <d f g>4
-  \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
-  \once \override NoteHead #'font-size = #-7
-  \once \override NoteHead #'font-family = #'sans
-  \once \override NoteHead #'font-series = #'bold
-  <d f g>4
-  \once \override NoteHead #'style = #'cross
-  <d f g>4
-  \applyOutput #'Voice #mc-squared
-  <d f g>4
-  <<
-    { d8[ es-( fis^^ g] fis2-) }
-    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
-  >>
+Ideally, the input format for any high-level formatting system is
+an abstract description of the content.  In this case, that would
+be the music itself.  This poses a formidable problem: how can we
+define what music really is? Instead of trying to find an answer,
+we have reversed the question.  We write a program capable of
+producing sheet music, and adjust the format to be as lean as
+possible.  When the format can no longer be trimmed down, by
+definition we are left with content itself.  Our program serves as
+a formal definition of a music document.
+
+The syntax is also the user-interface for LilyPond, hence it is
+easy to type:
+
+@example
+@{
+  c'4 d'8
+@}
+@end example
+
+@noindent
+to create a quarter note on middle C (C1) and an eighth note on
+the D above middle C (D1).
+
+@lilypond[quote]
+{
+  c'4 d'8
+}
+@end lilypond
+
+On a microscopic scale, such syntax is easy to use.  On a larger
+scale, syntax also needs structure.  How else can you enter
+complex pieces like symphonies and operas?  The structure is
+formed by the concept of music expressions: by combining small
+fragments of music into larger ones, more complex music can be
+expressed.  For example
+
+@lilypond[quote,verbatim,fragment,relative=1]
+f4
+@end lilypond
+
+@noindent
+Simultaneous notes can be constructed by enclosing them with
+@code{<<} and @code{>>}:
+
+@example
+<<c4 d4 e4>>
+@end example
+
+@lilypond[quote,fragment,relative=1]
+\new Voice { <<c4 d4 e>> }
+@end lilypond
+
+@noindent
+This expression is put in sequence by enclosing it in curly braces
+@code{@{@tie{}@dots{}@tie{}@}}:
+
+@example
+@{ f4 <<c4 d4 e4>> @}
+@end example
+
+@lilypond[quote,relative=1,fragment]
+{ f4 <<c d e4>> }
+@end lilypond
+
+@noindent
+The above is also an expression, and so it may be combined again
+with another simultaneous expression (a half note) using
+@code{<<}, @code{\\}, and @code{>>}:
+
+@example
+<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
+@end example
+
+@lilypond[quote,fragment,relative=2]
+\new Voice { << g2 \\ { f4 <<c d e>> } >> }
+@end lilypond
+
+Such recursive structures can be specified neatly and formally in
+a context-free grammar.  The parsing code is also generated from
+this grammar.  In other words, the syntax of LilyPond is clearly
+and unambiguously defined.
+
+User-interfaces and syntax are what people see and deal with most.
+They are partly a matter of taste, and also the subject of much
+discussion.  Although discussions on taste do have their merit,
+they are not very productive.  In the larger picture of LilyPond,
+the importance of input syntax is small: inventing neat syntax is
+easy, while writing decent formatting code is much harder.  This
+is also illustrated by the line-counts for the respective
+components: parsing and representation take up less than 10% of
+the source code.
+
+When designing the structures used in LilyPond, we made some different
+decisions than are apparent in other software.  Consider the hierarchical
+nature of music notation:
+
+@lilypond[quote,fragment]
+<<
+  \new Staff \relative c'' {
+    \key g \major
+    \time 3/4
+    d4 g,8 a b c d4 g, g
+  }
+  \new Staff \relative c' {
+    \clef "bass"
+    \key g \major
+    <g b d>2 a4 b2.
+  }
+>>
+@end lilypond
+
+In this case, there are pitches grouped into chords that belong to
+measures, which belong to staves.  This resembles a tidy structure of
+nested boxes:
+
+@quotation
+@iftex
+@sourceimage{pdf/nestedboxes,,4cm,}
+@end iftex
+@ifnottex
+@sourceimage{nestedboxes,,,png}
+@end ifnottex
+@end quotation
+
+Unfortunately, the structure is tidy because it is based on some
+excessively restrictive assumptions.  This becomes apparent if we
+consider a more complicated musical example:
+
+@lilypond[quote]
+\layout {
+  \context {
+    \Score
+    \remove "Timing_translator"
+    \remove "Default_bar_line_engraver"
+  }
+  \context {
+    \Staff
+    \consists "Timing_translator"
+    \consists "Default_bar_line_engraver"
+  }
 }
+
+\new PianoStaff <<
+  \new Staff = "RH" <<
+    \new Voice = "I" \relative c''' {
+      \time 3/4
+      \voiceOne
+      \tuplet 7/6 { g8 g g g g g g }
+      \oneVoice
+      r4 <b,, fis' g bes> r4\fermata
+    }
+    \new Voice = "II" \relative c' {
+      \voiceTwo
+      c4
+      \tuplet 5/4 {
+        <c ees>8 f g
+        \change Staff = "LH" \oneVoice
+        \stemUp g,( c}
+      r4
+      \override Stem.cross-staff = ##t
+      \override Stem.length = #12
+      <fis, b>) r\fermata
+    }
+  >>
+  \new Staff = "LH" <<
+    \new Voice = "III" \relative c' {
+      \time 2/4
+      \clef "bass"
+      g4 \stopStaff s
+      \startStaff s2*2
+    }
+  >>
+>>
 @end lilypond
 
+In this example, staves start and stop at will, voices jump around
+between staves, and the staves have different time signatures.  Many
+software packages would struggle with reproducing this example because
+they are built on the nested box structure.  With LilyPond, on the other
+hand, we have tried to keep the input format and the structure as
+flexible as possible.
 
 @node What symbols to engrave?
-@unnumberedsec What symbols to engrave?
+@unnumberedsubsec What symbols to engrave?
 
 @cindex engraving
 @cindex typography
@@ -906,6 +1162,7 @@ heads, the @code{Note_heads_engraver}.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -938,6 +1195,7 @@ Then a @code{Staff_symbol_engraver} adds the staff,
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -969,6 +1227,7 @@ the @code{Clef_engraver} defines a reference point for the staff,
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -997,6 +1256,7 @@ and the @code{Stem_engraver} adds stems.
       \remove "Phrasing_slur_engraver"
       \remove "Slur_engraver"
       \remove "Script_engraver"
+      \remove "New_fingering_engraver"
       \remove "Beam_engraver"
       \remove "Auto_beam_engraver"
     }
@@ -1038,18 +1298,13 @@ polyphony?  In polyphonic notation, many voices can share a staff.
 In this situation, the accidentals and staff are shared, but the
 stems, slurs, beams, etc., are private to each voice.  Hence,
 engravers should be grouped.  The engravers for note heads, stems,
-slurs, etc., go into a group called @q{Voice context,} while the
+slurs, etc., go into a group called @q{Voice context}, while the
 engravers for key, accidental, bar, etc., go into a group called
-@q{Staff context.}  In the case of polyphony, a single Staff
+@q{Staff context}.  In the case of polyphony, a single Staff
 context contains more than one Voice context.  Similarly, multiple
 Staff contexts can be put into a single Score context.  The Score
 context is the top level notation context.
 
-
-@seealso
-Internals Reference: @rinternals{Contexts}.
-
-
 @lilypond[quote,ragged-right]
 \include "engraver-example.ily"
 \score {
@@ -1060,108 +1315,150 @@ Internals Reference: @rinternals{Contexts}.
 }
 @end lilypond
 
+@seealso
+Internals Reference: @rinternals{Contexts}.
 
-@node Music representation
-@unnumberedsec Music representation
-
-@cindex syntax
-@cindex recursive structures
+@node Flexible architecture
+@unnumberedsubsec Flexible architecture
 
-Ideally, the input format for any high-level formatting system is
-an abstract description of the content.  In this case, that would
-be the music itself.  This poses a formidable problem: how can we
-define what music really is? Instead of trying to find an answer,
-we have reversed the question.  We write a program capable of
-producing sheet music, and adjust the format to be as lean as
-possible.  When the format can no longer be trimmed down, by
-definition we are left with content itself.  Our program serves as
-a formal definition of a music document.
+When we started, we wrote the LilyPond program entirely in the C++
+programming language; the program's functionality was set in stone
+by the developers.  That proved to be unsatisfactory for a number
+of reasons:
 
-The syntax is also the user-interface for LilyPond, hence it is
-easy to type:
+@itemize
 
-@example
-@{
-  c'4 d'8
-@}
-@end example
+@item When LilyPond makes mistakes, users need to override
+formatting decisions.  Therefore, the user must have access to the
+formatting engine.  Hence, rules and settings cannot be fixed by
+us at compile-time but must be accessible for users at run-time.
 
-@noindent
-to create a quarter note on middle C (C1) and an eighth note on
-the D above middle C (D1).
+@item Engraving is a matter of visual judgment, and therefore a
+matter of taste.  As knowledgeable as we are, users can disagree
+with our personal decisions.  Therefore, the definitions of
+typographical style must also be accessible to the user.
 
-@lilypond[quote]
-{
-  c'4 d'8
-}
-@end lilypond
+@item Finally, we continually refine the formatting algorithms, so
+we need a flexible approach to rules.  The C++ language forces a
+certain method of grouping rules that cannot readily be applied to
+formatting music notation.
 
-On a microscopic scale, such syntax is easy to use.  On a larger
-scale, syntax also needs structure.  How else can you enter
-complex pieces like symphonies and operas?  The structure is
-formed by the concept of music expressions: by combining small
-fragments of music into larger ones, more complex music can be
-expressed.  For example
+@end itemize
 
-@lilypond[quote,verbatim,fragment,relative=1]
-f4
-@end lilypond
+@cindex Scheme programming language
 
-@noindent
-Simultaneous notes can be constructed by enclosing them with
-@code{<<} and @code{>>}:
+These problems have been addressed by integrating an interpreter
+for the Scheme programming language and rewriting parts of
+LilyPond in Scheme.  The current formatting architecture is built
+around the notion of graphical objects, described by Scheme
+variables and functions.  This architecture encompasses formatting
+rules, typographical style and individual formatting decisions.
+The user has direct access to most of these controls.
 
-@example
-<<c4 d4 e4>>
-@end example
+Scheme variables control layout decisions.  For example, many
+graphical objects have a direction variable that encodes the
+choice between up and down (or left and right).  Here you see two
+chords, with accents and arpeggios.  In the first chord, the
+graphical objects have all directions down (or left).  The second
+chord has all directions up (right).
 
-@lilypond[quote,fragment,relative=1]
-\new Voice { <<c4 d4 e>> }
+@lilypond[quote,ragged-right]
+\score {
+  \relative c' {
+    \stemDown <e g b>4_>-\arpeggio
+    \override Arpeggio.direction = #RIGHT
+    \stemUp <e g b>4^>-\arpeggio
+  }
+  \layout {
+    \context {
+      \Score
+      \override SpacingSpanner.spacing-increment = #3
+      \hide TimeSignature
+    }
+  }
+}
 @end lilypond
 
-@noindent
-This expression is put in sequence by enclosing it in curly braces
-@code{@{@tie{}@dots{}@tie{}@}}:
+@cindex score formatting
+@cindex formatting a score
+@cindex formatting rules
 
-@example
-@{ f4 <<c4 d4 e4>> @}
-@end example
+@noindent
+The process of formatting a score consists of reading and writing
+the variables of graphical objects.  Some variables have a preset
+value.  For example, the thickness of many lines -- a
+characteristic of typographical style -- is a variable with a
+preset value.  You are free to alter this value, giving your score
+a different typographical impression.
 
-@lilypond[quote,relative=1,fragment]
-{ f4 <<c d e4>> }
+@lilypond[quote,ragged-right]
+fragment = {
+   \clef bass f8 as8
+   c'4-~ c'16 as g f e16 g bes c' des'4
+}
+<<
+   \new Staff \fragment
+   \new Staff \with {
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #0.5
+      \override Bar.thickness = #3.6
+      \override Tie.thickness = #2.2
+      \override StaffSymbol.thickness = #3.0
+      \override Tie.extra-offset = #'(0 .  0.3)
+      }
+      \fragment
+>>
 @end lilypond
 
-@noindent
-The above is also an expression, and so it may be combined again
-with another simultaneous expression (a half note) using
-@code{<<}, @code{\\}, and @code{>>}:
+Formatting rules are also preset variables: each object has
+variables containing procedures.  These procedures perform the
+actual formatting, and by substituting different ones, we can
+change the appearance of objects.  In the following example, the
+rule governing which note head objects are used to produce the
+note head symbol is changed during the music fragment.
 
-@example
-<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
-@end example
+@lilypond[quote,ragged-right]
+#(set-global-staff-size 30)
 
-@lilypond[quote,fragment,relative=2]
-\new Voice { << g2 \\ { f4 <<c d e>> } >> }
-@end lilypond
+#(define (mc-squared grob orig current)
+  (let* ((interfaces (ly:grob-interfaces grob))
+         (pos (ly:grob-property grob 'staff-position)))
+    (if (memq 'note-head-interface interfaces)
+        (begin
+          (ly:grob-set-property! grob 'stencil
+            (grob-interpret-markup grob
+              (make-lower-markup 0.5
+                (case pos
+                  ((-5) "m")
+                  ((-3) "c ")
+                  ((-2) (make-smaller-markup (make-bold-markup "2")))
+                  (else "bla")))))))))
 
-Such recursive structures can be specified neatly and formally in
-a context-free grammar.  The parsing code is also generated from
-this grammar.  In other words, the syntax of LilyPond is clearly
-and unambiguously defined.
+\new Voice \relative c' {
+  \stemUp
+  \set autoBeaming = ##f
+  \time 2/4
+  <d f g>4
+  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
+  \once \override NoteHead.font-size = #-7
+  \once \override NoteHead.font-family = #'sans
+  \once \override NoteHead.font-series = #'bold
+  <d f g>4
+  \once \override NoteHead.style = #'cross
+  <d f g>4
+  \applyOutput #'Voice #mc-squared
+  <d f g>4
+  <<
+    { d8[ es-( fis^^ g] fis2-) }
+    \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
+  >>
+}
+@end lilypond
 
-User-interfaces and syntax are what people see and deal with most.
-They are partly a matter of taste, and also the subject of much
-discussion.  Although discussions on taste do have their merit,
-they are not very productive.  In the larger picture of LilyPond,
-the importance of input syntax is small: inventing neat syntax is
-easy, while writing decent formatting code is much harder.  This
-is also illustrated by the line-counts for the respective
-components: parsing and representation take up less than 10% of
-the source code.
 
 
-@node Example applications
-@unnumberedsec Example applications
+@node Putting LilyPond to work
+@section Putting LilyPond to work
 
 @cindex simple examples
 @cindex examples, simple
@@ -1196,7 +1493,7 @@ By adding chord names and lyrics we obtain a lead sheet.
 Polyphonic notation and piano music can also be printed.  The
 following example combines some more exotic constructs.
 
-@lilypond[quote]
+@lilypond[quote,line-width=15.9\cm]
 \header {
   title = "Screech and boink"
   subtitle = "Random complex notation"
@@ -1209,7 +1506,7 @@ following example combines some more exotic constructs.
       \time 4/8
       \key c \minor
       << {
-        \revert Stem #'direction
+        \revert Stem.direction
         \change Staff = down
         \set subdivideBeams = ##t
         g16.[
@@ -1226,7 +1523,7 @@ following example combines some more exotic constructs.
         \set followVoice = ##t
         c'''32([ b''16 a''16 gis''16 g''32)]
       } \\ {
-        s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
+        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
       } \\ {
         s4 \autoBeamOff d''8.. f''32
       } \\ {
@@ -1238,30 +1535,27 @@ following example combines some more exotic constructs.
       \clef bass
       \key c \minor
       \set subdivideBeams = ##f
-      \override Stem  #'french-beaming = ##t
-      \override Beam  #'beam-thickness = #0.3
-      \override Stem  #'thickness = #4.0
+      \override Stem.french-beaming = ##t
+      \override Beam.beam-thickness = #0.3
+      \override Stem.thickness = #4.0
       g'16[ b16 fis16 g16]
       << \makeClusters {
         as16 <as b>
         <g b>
         <g cis>
       } \\ {
-        \override Staff.Arpeggio  #'arpeggio-direction =#down
+        \override Staff.Arpeggio.arpeggio-direction =#down
         <cis, e, gis, b, cis>4\arpeggio
       }
     >> }
   >>
   \midi {
-    \context {
-      \Score
-      tempoWholesPerMinute = #(ly:make-moment 60 8)
-    }
+    \tempo 8 = 60
   }
   \layout {
     \context {
       \Staff
-      \consists Horizontal_bracket_engraver
+      \consists "Horizontal_bracket_engraver"
     }
   }
 }
@@ -1274,21 +1568,23 @@ manipulate music.  For example, it can also be used to convert
 databases of musical fragments to images for use on websites and
 multimedia presentations.
 
-This manual also shows an application: the input format is text,
-and can therefore be easily embedded in other text-based formats
-such as @LaTeX{}, HTML, or in the case of this manual, Texinfo.
-By means of a special program, the input fragments can be replaced
-by music images in the resulting PDF or HTML output files.  This
-makes it easy to mix music and text in documents.
-
+This manual also shows an application: the input format is text, and can
+therefore be easily embedded in other text-based formats such as
+@LaTeX{}, HTML, or in the case of this manual, Texinfo.  Using the
+@command{lilypond-book} program, included with LilyPond, the input
+fragments can be replaced by music images in the resulting PDF or HTML
+output files.  Another example is the third-party OOoLilyPond extension
+for OpenOffice.org or LibreOffice, which makes it extremely easy to
+embed musical examples in documents.
 
-TODO: add extra chapter for computer aesthetics?
+For more examples of LilyPond in action, full documentation, and the
+software itself, see our main website: www.lilypond.org.
 
 @page
-@node Appendix
-@unnumberedsec Appendix
+@node Engraved examples (BWV 861)
+@section Engraved examples (BWV 861)
 
-This appendix contaions four reference engravings and two
+This section contains four reference engravings and two
 software-engraved versions of Bach's Fugue in G minor from the
 Well-Tempered Clavier, Book I, BWV 861 (the last seven measures).
 
@@ -1305,8 +1601,8 @@ Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
 
 @noindent
 Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
-1989), an alternate musical source. Aside from the textual differences,
-this demsontrates slight variations in the engraving decisions, even
+1989), an alternate musical source.  Aside from the textual differences,
+this demonstrates slight variations in the engraving decisions, even
 from the same publisher and edition:
 
 @iftex
@@ -1318,7 +1614,7 @@ from the same publisher and edition:
 
 @noindent
 Breitkopf & Härtel, edited by Ferruccio Busoni (Wiesbaden, 1894), also
-available from the Petrucci Music Library (IMSLP #22081). The editorial
+available from the Petrucci Music Library (IMSLP #22081).  The editorial
 markings (fingerings, articulations, etc.) have been removed for clearer
 comparison with the other editions here:
 
@@ -1330,7 +1626,7 @@ comparison with the other editions here:
 @end ifnottex
 
 @noindent
-Bach-Gessellschaft edition (Leipzig, 1866), available from the Petrucci
+Bach-Gesellschaft edition (Leipzig, 1866), available from the Petrucci
 Music Library (IMSPL #02221):
 
 @iftex
@@ -1350,6 +1646,7 @@ Finale 2008:
 @sourceimage{bwv861-finale2008a,,,png}
 @end ifnottex
 
+@sp 4
 @noindent
 LilyPond, version @version{}:
 
@@ -1361,9 +1658,9 @@ partI = \relative c' {
   fis8 d' ees g, fis4 g
   r8 a16 bes c8 bes16 a d8 r r4
   r2 r8 d16 ees f8 ees16 d
-  ees4 ~ ees16 d c bes a4 r8 ees'16 d
+  ees4 ~ 16 d c bes a4 r8 ees'16 d
   c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
-  a8 d, g f ees d c bes
+  8 d, g f ees d c bes
   a2 g\fermata \bar "|."
 }
 
@@ -1372,7 +1669,7 @@ partII = \relative c' {
   d4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
   r8 fis16 g a8 g16 fis g2 ~
-  g2 r8 d' ees g,
+  2 r8 d' ees g,
   fis4 g r8 a16 bes c8 bes16 a
   bes4. <g b>8 <a c> r <d, g> r
   <ees g>4 <d fis> d2
@@ -1380,7 +1677,7 @@ partII = \relative c' {
 partIII = \relative c' {
   \voiceOne
   r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
-  bes2 ~ bes8 b16 a g8 a16 b
+  bes2 ~ 8 b16 a g8 a16 b
   c4 r r2
   R1
   r8 d ees g, fis4 g
@@ -1391,7 +1688,7 @@ partIV = \relative c {
   d4 r r2
   r8 d ees g, fis4 a
   d,8 d'16 c bes8 c16 d ees2 ~
-  ees8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
+  8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
   d,8 d'16 c bes8 c16 d ees8 c a fis'
   g f ees d c bes a g
   c a d d, g2\fermata
@@ -1423,6 +1720,10 @@ partIV = \relative c {
       \Staff
       \remove "Time_signature_engraver"
     }
+    \context {
+      \PianoStaff
+      \override StaffGrouper.staff-staff-spacing.padding = #1
+    }
   }
 }
 @end lilypond