]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/essay/engraving.itely
Run scripts/auxiliar/update-with-convert-ly.sh
[lilypond.git] / Documentation / essay / engraving.itely
index c56e9e7938714432aaea21e02dc30e5ef2e424a6..53893fdc94ebaa8bb90854141029759670f45581 100644 (file)
@@ -4,44 +4,39 @@
     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.16.0"
 
 @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 remove 3mm eps bounding box left padding for Sarabande (This will
 @c     require adding a new snippet option to lilypond-book.py
 @c check formatting of HTML output
-@c
-
-@c Notes:
-@c Incorrect beaming in the Sarabande is a known bug.
 
 @menu
-* The LilyPond story::          
-* Engraving details::           
-* 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
@@ -60,15 +55,19 @@ 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
@@ -83,8 +82,8 @@ 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''
+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.
@@ -113,34 +112,32 @@ 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 note heads,
-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.
+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
@@ -182,7 +179,10 @@ 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.
+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
@@ -192,11 +192,11 @@ of traditional musical engraving practice.
 @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
@@ -292,7 +292,7 @@ vertical strokes are heavier.
 In spacing, the distribution of space should reflect the durations
 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?
 
@@ -305,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
@@ -367,33 +367,10 @@ the upper two measures, however, form down-stem/@/up-stem clumps of
 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
@@ -484,8 +461,9 @@ global = {
   \key c \minor
 }
 
-\new Score <<
-  \new Staff \with {
+\score {
+  <<
+    \new Staff \with {
       fontSize = #-4
       \override StaffSymbol #'staff-space = #(magstep -4)
       \override StaffSymbol #'thickness = #(magstep -3)
@@ -497,30 +475,33 @@ 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
 @end ignore
 
@@ -558,22 +539,19 @@ to see and love to play from.
 
 
 @node Automated engraving
-@unnumberedsec Automated engraving
+@section Automated engraving
 
 @cindex engraving, automated
 @cindex automated engraving
 
-This section describes what is required to create software that can
-mimic the layout of engraved scores: a method of explaining good
-layouts to the computer, detailed comparisons with real engravings,
-and enough flexibility to deal with the wide range of challenges
-that printed music can present.
+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::             
-* Improvement by benchmarking::  
-* Getting things right::        
-* Flexible architecture::       
+* Beauty contests::
+* Improvement by benchmarking::
+* Getting things right::
 @end menu
 
 @node Beauty contests
@@ -584,21 +562,21 @@ of the three configurations should we choose for the following slur?
 
 @lilypond
 \relative c {
-    \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
+  \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
 
 There are a few books on the art of music engraving
-available.  Unfortunately, they contain rules of simple thumbs and some
+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,
+hand-coded exceptions.  Doing all this case analysis is a lot of work,
 and often not all cases are covered completely:
 
 @quotation
@@ -619,14 +597,14 @@ for each possible configuration we compute an ugliness score and we
 choose the least ugly configuration.
 
 For example, here are three possible slur configurations, and LilyPond
-has given each one a score in `ugly points'.  The first example gets 15.39
-points for grazing one of the notes:
+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
+  \clef bass
+  \once \override Slur #'positions = #'(1.5 . 1)
+  e8[(_"15.39" f] g[ a b d,)] r4
 }
 @end lilypond
 
@@ -638,9 +616,9 @@ 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
+  \clef bass
+  \once \override Slur #'positions = #'(2 . 3)
+  e8[(_"13.08" f] g[ a b d,)] r4
 }
 @end lilypond
 
@@ -651,8 +629,8 @@ selects this one:
 
 @lilypond
 \relative c {
-    \clef bass
-    e8[(_"12.04" f] g[ a b d,)] r4
+  \clef bass
+  e8[(_"12.04" f] g[ a b d,)] r4
 }
 @end lilypond
 
@@ -729,17 +707,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
@@ -755,10 +737,10 @@ 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 their major rival and they appear to be
+in North America.  Sibelius is its major rival and appears to be
 especially strong in the European market.
 
-For our comparison we chose Bach's Fugue in G minor from the
+For our comparison we selected Bach's Fugue in G minor from the
 Well-Tempered Clavier, Book I, BWV 861, whose opening subject is
 
 @lilypond
@@ -777,7 +759,12 @@ We made our comparison by engraving the last seven measures of the piece
 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.
+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:
@@ -790,7 +777,7 @@ measures 28--29, as shown here with Finale first and LilyPond second:
 @end ifnottex
 
 @lilypond[staffsize=19.5,line-width=14\cm]
-global = {\key g \minor}
+global = { \key g \minor }
 
 partI = \relative c' {
   \voiceOne
@@ -803,10 +790,12 @@ partII = \relative c' {
   d4 r4 r8 d'16 c bes8 c16 d
   ees8 d c ees a, r r4
 }
+
 partIII = \relative c' {
   \voiceOne
   r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
 }
+
 partIV = \relative c {
   \voiceTwo
   d4 r r2
@@ -825,8 +814,8 @@ partIV = \relative c {
         \new Voice = "voiceI" { \partI }
         \new Voice = "voiceII" { \partII }
       >>
-
-      \new Staff = "LH" <<
+      \new Staff = "LH"
+      <<
         \clef "bass"
         \global
         \new Voice = "voiceIII" { \partIII }
@@ -841,7 +830,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'between-staff-spacing #'padding = #1
+      \override StaffGrouper #'staff-staff-spacing #'padding = #1
     }
   }
 }
@@ -852,8 +841,8 @@ Some shortcomings in the unedited Finale output include:
 @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 be easily improved
-with the Patterson Beams plug-in, but we elected to skip that step for
+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
@@ -861,16 +850,19 @@ lower voices exchange positions temporarily:
 
 @lilypond
 collide = \once \override NoteColumn #'force-hshift = #0
-\new Score <<
-  \new Voice = "sample" \relative c''{
-    \key g \minor
-    <<
-      {\voiceOne g4 \collide g4}
-      \new Voice {\voiceTwo bes \collide bes}
-    >>
-  }
-  \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" }
->>
+
+\score {
+  <<
+    \new Voice = "sample" \relative c''{
+      \key g \minor
+      <<
+        { \voiceOne g4 \collide g4 }
+        \new Voice { \voiceTwo bes \collide bes }
+      >>
+    }
+    \new Lyrics \lyricsto "sample" \lyricmode { "good " " bad" }
+  >>
+}
 @end lilypond
 
 @item Finale has placed all of the rests at fixed heights on the staff.
@@ -884,15 +876,15 @@ collision than Finale does.
 @end itemize
 
 This example is not intended to suggest that Finale cannot be used to
-produce beautiful 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 score writers is
+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.
 
-One particularly glaring omission we found in the Finale sample is a
-missing flat in measure 33:
+One particularly glaring omission we found from Finale is a missing flat
+in measure 33:
 
 @quotation
 @iftex
@@ -906,20 +898,19 @@ missing flat in measure 33:
 @noindent
 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.
-The user must not only remember to run a beaming plug-in and respace the
-note heads and rests, she must also check each measure for cross-voice
-accidentals if she is to avoid interrupting a rehearsal for an engraving
-error.
+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 in
-engravings by Finale and LilyPond 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.
+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
@@ -930,140 +921,209 @@ 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 Flexible architecture
-@unnumberedsubsec Flexible architecture
+@node Building software
+@section Building software
 
-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:
+This section describes some of the programming decisions that we made
+when designing LilyPond.
 
-@itemize
+@menu
+* Music representation::
+* What symbols to engrave?::
+* Flexible architecture::
+@end menu
 
-@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.
 
-@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.
+@node Music representation
+@unnumberedsubsec Music representation
 
-@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.
+@cindex syntax
+@cindex recursive structures
 
-@end itemize
+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.
 
-@cindex Scheme programming language
+The syntax is also the user-interface for LilyPond, hence it is
+easy to type:
 
-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
+@{
+  c'4 d'8
+@}
+@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).
+@noindent
+to create a quarter note on middle C (C1) and an eighth note on
+the D above middle C (D1).
 
-@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
+@lilypond[quote]
+{
+  c'4 d'8
 }
 @end lilypond
 
-@cindex score formatting
-@cindex formatting a score
-@cindex formatting rules
+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
-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.
+Simultaneous notes can be constructed by enclosing them with
+@code{<<} and @code{>>}:
 
-@lilypond[quote,ragged-right]
-fragment = {
-   \clef bass f8 as8
-   c'4-~ c'16 as g f e16 g bes c' des'4
-}
+@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 \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
+  \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
 
-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.
+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:
 
-@lilypond[quote,ragged-right]
-#(set-global-staff-size 30)
+@quotation
+@iftex
+@sourceimage{pdf/nestedboxes,,4cm,}
+@end iftex
+@ifnottex
+@sourceimage{nestedboxes,,,png}
+@end ifnottex
+@end quotation
 
-#(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")))))))))
+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:
 
-\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 }
-  >>
+@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
+      \times 6/7 { g8 g g g g g g }
+      \oneVoice
+      r4 <b,, fis' g bes> r4\fermata
+    }
+    \new Voice = "II" \relative c' {
+      \voiceTwo
+      c4
+      \times 4/5 {
+        <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
@@ -1240,18 +1300,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 {
@@ -1262,108 +1317,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
+      \override TimeSignature #'transparent = ##t
+    }
+  }
+}
 @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
@@ -1398,7 +1495,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"
@@ -1455,10 +1552,7 @@ following example combines some more exotic constructs.
     >> }
   >>
   \midi {
-    \context {
-      \Score
-      tempoWholesPerMinute = #(ly:make-moment 60 8)
-    }
+    \tempo 8 = 60
   }
   \layout {
     \context {
@@ -1476,21 +1570,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, 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 contains 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).
 
@@ -1628,7 +1724,7 @@ partIV = \relative c {
     }
     \context {
       \PianoStaff
-      \override StaffGrouper #'between-staff-spacing #'padding = #1
+      \override StaffGrouper #'staff-staff-spacing #'padding = #1
     }
   }
 }