]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/tex/refman.yo
release: 1.1.28
[lilypond.git] / Documentation / tex / refman.yo
index 826b4569e4a1b3115fcfbe3ee237b92a646e3765..6cad45cc87ed347f40e31edb0730287d4b364e8f 100644 (file)
@@ -1,18 +1,60 @@
+mailto(gnu-music-discuss@gnu.org)
 COMMENT(-*-text-*-)
 
 redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
     whenhtml(sc(ARG1)))
 
 
-redef(mycode)(1)(tt(ARG1))
+redef(code)(1)(tt(ARG1))
 
 
-COMMENT( This document contains Mudela fragments.  You need at least
-Yodl-1.30.18 to convert this to tex or html.
+COMMENT(
 
-TODO
+TODO:
+   the use of semicolons needs to be documented once it settles down
+   paper size?
+   the explanation of how lyrics mode parses words seems ridiculous.  
+     Is there a simple way to explain this, or is the behavior
+     too complicated for a reasonable explanation?
+   \relative and \tranpose and \times make it necessary to specify
+       an explicit \type staff, or bizarre things happen. 
+   catalan.ly
+   accordion symbols
+   extender*  (see extender.ly)
+   \repeat & \alternative  -> probably should have an example
+   properties:
+      unfoldRepeats
+      voltaVisibility
+   property: stemLeftBeamCount stemRightBeamCount
+   interstaff beams (beam-interstaff.ly)
+   interstaff slurs (see preludes-1.ly)
+   boolean property barAuto
+   property: noteheadStyle
+   harmonics: test/harmonics.fly
+   autobeamer
+   properties: beamAutoEndx ??? rational string "1/2"
+        beamAutoBegin
+        beamAutoEnd
+        beamAuto
+        ScriptPadding
+        Direction
+        chordNameStyle (banter)
+        chordInversionPreserve
+        createInitdefaultClef  
+        dynamicStyle   
+        singleStaffBracket
+        numberOfStaffLines
+
+
+       {Mark,BarNumber,Margin}{Direction,ScriptPadding}
+               
+       
+)
 
-in stead <-> instead
+
+COMMENT( 
+This document contains Mudela fragments.  You need at least
+Yodl-1.30.18 to convert this to tex or html.
 )
 
 htmlbodyopt(bgcolor)(white)
@@ -27,11 +69,10 @@ latexlayoutcmds(
 \input mudela-book
 )
 
-COMMENT(whenlatex(notableofcontents()))
 whentexinfo(notableofcontents())
 
-article(Mudela Reference Manual)
-      (Andrew Moriano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
+article(Mudela 1.0.14 / LilyPond 1.1.27 Reference Manual)
+      (Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
 
 COMMENT(
@@ -103,14 +144,19 @@ file(init.)var(ext) and process this file.  The file
 file(init.)var(ext) must contain the code(\maininput) keyword or LilyPond
 will not read the user specified file.
 
+When LilyPond processes file(filename.ly) it will produce file(filename.tex) as
+output.  If file(filename.ly) contains a second code(\paper) keyword, then
+LilyPond will produce file(filename-1.tex) as well.  Subsequent code(\paper)
+keywords will produces sequentially numbered file names.  Several files can be
+specified; they will each be processed independently.
 
 sect(Syntax)
 
 subsect(Basic Mudela)
 
 A Mudela file consists of keywords with arguments and identifier
-assignments separated by spaces, tabs or newlines.  (Semicolons are
-used by some keywords but are not generally required.)  A one line
+assignments separated by spaces, tabs or newlines.  Semicolons are
+used by some keywords but are not generally required.  A one line
 comment is introduced by a code(%) character.  Block comments are
 started by code(%{) and ended by code(%}).  They cannot be nested.
 
@@ -144,7 +190,7 @@ keywords: code(\mm), code(\pt), code(\in), or code(\cm).  Dimensions
 are converted immediately to a real which gives the dimension in
 points, so they can be mixed with reals, but the result is no longer
 of type dimension.  The keywords that require a dimension
-(code(\shape) and code(\symboltables)) will not accept this.
+(code(\shape)).
 
 dit(pitch) 
 A pitch is a string which is the name of a pitch.  Example: code(a).
@@ -203,16 +249,16 @@ will only be able to refer to identifiers whose names begin with a
 letter and are entirely alphanumeric.  It is also impossible to refer
 to an identifier whose name is the same as the name of a keyword.  The
 following words are keywords:
-verb(absdynamic   header         musicalpitch   score         transpose
-accepts             in             notenames      script        type     
-bar         include        notes          shape         version  
-cadenza             key            output         skip        
-clef        keysignature   paper          spandynamic 
-cm          lyric          partial        symboltables
-consists     maininput      penalty        table       
-duration     mark           property       tempo       
-font        midi           pt             time        
-grouping     mm             relative       translator)
+verb(absdynamic     duration        mark           property   skip       
+accepts        font            midi           pt         spandynamic
+alternative    grouping        mm             relative   tempo      
+bar            header          musicalpitch   remove     time       
+cadenza        in              name           repeat     times      
+chordmodifier  include         notenames      scm        translator 
+chords         key             notes          scmfile    transpose  
+clef           keysignature    paper          score      type       
+cm             lyrics          partial        script     version    
+consists       maininput       penalty        shape)
 
 The right hand side of an identifier assignment is parsed completely
 when the assignment is made.  It therefore must have any context
@@ -220,24 +266,29 @@ specified in the definition.  For example, you must write
 code(foo=\notes{a8 b c}) rather than code(foo={a8 b c}).  Even though
 the context is specified in the definition, you must refer to the
 identifier inside the correct context:
-verb(foo = \paper{ linewidth = 6.0\in }
+verb(foo = \paper{ linewidth = 6.0\in; }
 \score{
   \notes{ ... }
   \paper{ \foo }
 })
 If code(\foo) is used here without the surrounding code(\paper) then
-an error will result.
+an error will result.  Note however that the following is acceptible
+verb(foo = \notes { ... }
+\score{ \foo })  
+It is not necessary to specify code(\notes).
 
 Identifiers can be set equal to integers, reals, strings, music,
 durations (specified with code(\duration)), note ornaments (specified
-with code(\script), dynamics commands, or code(:)), translator
-definitions, the code(\paper) block, the code(\midi) block or the
-code(\score) block.  When identifiers are used for translators, the
-code(\paper), code(\midi), and code(\score) blocks, they may only be
-referred to as the first item in a block.  So code(\paper{\one \two})
-is illegal because the identifier code(\two) is not the first thing in
-the block.
-
+with code(\script), dynamics commands, or code(:)), note name tables
+(specified with code(\notenames), translator definitions, the
+code(\paper) block, the code(\midi) block or the code(\score) block.
+When identifiers are used for translators, the code(\paper),
+code(\midi), and code(\score) blocks, they may only be referred to as
+the first item in a block.  So code(\paper{\one \two}) is illegal
+because the identifier code(\two) is not the first thing in the block.
+Unlike other identifier definitions, translator identifier definitions
+can only appear within code(\midi) or code(\paper) blocks.  See
+Section ref(translators) for more information.
 
 
 COMMENT(
@@ -289,10 +340,14 @@ code(\notes).  In Note mode, words can only contain alphabetic
 characters.  If code(word) is encountered, LilyPond first checks for a
 notename of code(word).  If no notename is found, then code(word) is
 treated as a string.  If you mistype a notename, the parser will most
-likely complain that you should be in code(\lyric) mode to do lyrics. 
+likely complain that you should be in code(\lyrics) mode to do lyrics. 
+
+dit(Chord mode) Chord mode is instroduced by the keyword code(\chords).
+Very similar to Note mode.  
+COMMENT(I'm not sure how it differs)
 
 dit(Lyric mode) Lyrics mode is introduced by the keyword
-code(\lyric).  This mode is has rules that make it easy to include
+code(\lyrics).  This mode is has rules that make it easy to include
 punctuation and diacritical marks in words.  A word in Lyrics mode
 begins with: an alphabetic character, code(_),
 code(?), code(!), code(:), code('), 
@@ -310,13 +365,18 @@ Quoted words can also be used in lyrics mode to specify words that
 cannot be specified with the above rules.  Here are some examples.
 Not all of these words are printable by TeX().  
 verb(a&@&@&TSI|{[    % a word
-\'afoo}                % a word
+\'afoo}         % a word
 1THtrhortho     % not a word because it starts with a digit
 ``Hello''       % not a word because it starts with `
 Leise DOEXPAND(Fl\)DOEXPAND("u\)ss{}teren meine Sapfe       % 4 words
 _ _ _ _         % 4 words, each one a space
 ))
 
+It is possible to create words that break the rules by prefixing them with the
+dollar sign code($).  Regardless of the context, a word beginning with code($)
+extends until the next white space character.  Such words can contain numbers
+(even in Note mode), or other forbidden characters.  The dollar sign can be
+used to create and access identifiers that could not otherwise be used.  
 
 COMMENT(
 These modes are of a lexical nature. Normal and Note mode largely
@@ -332,7 +392,7 @@ label(notedesc)
 subsect(Basic Note Specification)
 
 A note specification has the form 
-var(pitch)[var(octavespec)][code(!)][var(duration)].
+var(pitch)[var(octavespec)][code(!)][code(?)][var(duration)].
 The pitch of the note is specified by the note's name.  
 
 LilyPond has predefined note names for various languages.  The default
@@ -380,9 +440,11 @@ will determine what accidentals to  typeset  depending on the  key and
 context.   
 A reminder accidental can be forced by
 using the  optional exclamation mark `code(!)'
-on a pitch.
+on the pitch.
+A cautionary accidental, i.e., an accidental within paranthesis
+can be obtained using the optional question mark `code(?)' on the pitch.
 mudela(fragment,verbatim,center)(
-cis' d' e' cis'  c'! d' e' c' 
+cis' d' e' cis'  c'? d' e' c'!  
 )
 
 
@@ -403,69 +465,65 @@ mudela(fragment,verbatim,center)(
 a'4. b'4.
 )
 
-In addition, the duration can be followed by a multiplier which is
-introduced with the asterisk code(*) and can be an integer or a
-fraction.  The multiplier changes the duration that LilyPond uses
-internally for the note, but for notes it 
-does not change the symbol that is printed.  
+Extra long notes can be obtained using the code(\breve) and
+code(longa) durations:
 mudela(fragment,verbatim,center)(
-c'4*2 c'4*2 d'8*2/3 d'8*2/3
+c'\breve gis'\longa
 )
+
+In order to get triplets and other tuplets, you must use the
+code(\times) keyword which multiplies the duration by a fraction.  The
+syntax is code(\times) var(fraction) var(music).  The length of all of
+the specified music will be multiplied by the fraction and the
+fraction's denominator will be printed over the notes.  The most
+common tuplet is the triplet in which 3 notes have the length of 2, so
+the notes are 2/3 their written length:
+mudela(fragment,verbatim,center)( b'4 \times 2/3 {c'4 c' c'} d'4 d'4 )
+If you try to use code(\times) as the first thing in your music, you
+may encounter the warning ``No one to print a tuplet start bracket''.
+This happens because the Tuplet-engraver is in Voice and no Voice has
+been created yet.  You must explicitly specify the Voice context in
+this situation 
+mudela(fragment,verbatim,center)( 
+\type Voice { \times 2/3 {c'4 d' e'}} 
+)
+
+A shorthand for code(\times) is to write code(*)var(fraction) after a
+duration.  This shorthand will not label triplets correctly, but
+it is convenient for long rests.  
 For long rests with durations equal to an integer number of whole notes,
 LilyPond produces output that indicates the duration of the rest.  If you use
 code(r) then one rest symbol will be printed and several measures left blank.
 If you use code(R) then all of the measure will be filled with whole rests.
+mudela(fragment,verbatim,center)(
+r1 r1*3 R1*3
+)
 If you set the code(Score.SkipBars) property, then only one measure will be
 printed; with code(R), a number indicating the length of the rest will be
 displayed.  
 mudela(fragment,verbatim,center)(
-r1*3 R1*3
 \property Score.SkipBars=1
-r1*3 R1*3)
-
-Extra long notes can be obtained using the code(\breve) and
-code(longa) durations:
+r1 r1*3 R1*3
+)
+Even though the code(\times) command is not explicit, it is still
+necessary to specify a code(Voice) context if the music begins with
+rests lengthened using code(*).  
+Otherwise, the following will result:
 mudela(fragment,verbatim,center)(
-c'\breve gis'\longa
+R1*3 c'1 d'
 )
 
-
-subsect(Note Spanners: Beams, Tuplets, Slurs and Ties)
+subsect(Note Spanners: Beams, Slurs and Ties)
 
 A beam is specified by surrounding the beamed notes with brackets
 code([) and code(]).  
 mudela(fragment,verbatim,center)(
-[a'8 a'] [a'16 a' a' a']
-)
-
-In order to create triplets, you must use a length multiplier after
-the brackets.  An open bracket code([) followed by a fraction
-instructs LilyPond to print a number over the beam, and it also
-starts multiplying all note lengths by the fraction.  The closing
-bracket code(]) should be followed by the fraction code(1/1) in order
-to restore normal note lengths.  To create a triplet without a beam,
-place a backslace code(\) before the opening and closing brackets. 
-
-For example, in an ordinary triplet, the notes have duration 2/3 as
-long as normal. 
-mudela(fragment,verbatim,center)(
-[2/3 a'8 a' a' ]1/1 \[2/3 b'4 b' b'\]1/1
+[a'8 a'] [a'16 a' a' a'] 
 )
-
-There is a shorthand that can be used when you 
-want notes lengths multiplied by 2/n.  
-The 2 can be omitted after the open bracket
-and the first 1 can be omitted after the closing bracket.  
-mudela(fragment,verbatim,center)(
-[/3 b'8 b' b' ]/1  \[/3 a'4 a'8\]/1
-)
-
-COMMENT(This next bit needs to be fixed...or the language needs to be
-fixed.)
-
-Here is a combination
+Some more elaborate constructions:
 mudela(fragment,verbatim,center)(
-[/3 a'8 a'16 a'] a'8 \]
+[a'16 <a' c''> c'' <a' c''>] 
+\times 2/3 { [e'8 f' g'] }
 )
 
 Another type of spanner is the slur.  Slurs connects chords and try to
@@ -475,20 +533,33 @@ in the slur.  The terminal code(CHAR(41)) apppears to the left of the first
 note in the slur.  This makes it possible to put a note in slurs from
 both sides:
 mudela(fragment,verbatim,center)(
-f'()g'()a' [a'8 b']( a'4 g' )f'
+f'()g'()a' [a'8 b'(] a'4 g' )f'
 )
 
 A tie connects two adjacent note heads.  When used with chords, it
 connects all of the note heads.  Ties are indicated using the tilde symbol
-code(~) by analogy with TeX()'s tie which connects words.  For ties
-between chords, the input convention is somewhat peculiar.  You cannot
-write code(<c g>~<c g>), but rather must put the tilde after
-a note within the first chord.  
+code(~) by analogy with TeX()'s tie which connects words.  
 
 mudela(fragment,verbatim,center)(
-e' ~ e' <c'~ e' g'><c' e' g'>
+e' ~ e' <c' e' g'> ~ <c' e' g'>
 )
 
+It is possible to create beams and slurs that cross staffs by switching the
+context:
+mudela(fragment,verbatim,center)(
+<
+\type Staff=one \notes\relative c'{
+  \stemup
+  [c8 c \translator Staff=two \stemup c c]
+  \translator Staff=one
+  d4( \translator Staff=two )a4
+  }
+\type Staff=two \notes{ \clef bass;}
+>
+)
+
+
+COMMENT(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
 
 subsect(Note Ornaments)
 
@@ -512,17 +583,17 @@ mudela()(
           c''-\open  c''-\flageolet  c''-\reverseturn 
           c''-\trill
           c''-\prall c''-\mordent c''-\prallprall  c''-\prallmordent
-          c''-\upprall c''-\downprall }
-  \type Lyrics \lyric{  
+          c''-\upprall c''-\downprall c''-\thumb }
+  \type Lyrics \lyrics{  
         accent      marcato      staccatissimo fermata stopped
            staccato tenuto upbow downbow lheel rheel ltoe rtoe  turn
            open  flageolet reverseturn 
              trill  prall
-           mordent prallprall prallmordent uprall  downprall }>
-  \paper{linewidth  = 5.875\in
-         indent = 0.0
-        }
-}
+           mordent prallprall prallmordent uprall  downprall thumb } 
+  >
+  \paper{ linewidth = 5.875\in;          
+          indent = 0.0;        }
+ }
 )
 
 COMMENT( The following are defined in script.ly but do not work:
@@ -551,12 +622,26 @@ mudela()(
 Dynamic marks are specified by using an identifier after a note
 without a dash: code(c4 \ff).  Note that this syntax is inconsistent
 with the syntax for other types of ornaments.  The available dynamic
-marks are: code(\ppp), code(\pp), code(\p), code(\mp), code(\mf),
-code(\f), code(\ff), code(\fff), code(\fp), code(sf), and code(\sfz).
+marks are: code(\pppppp), code(\ppppp), code (\pppp), code(\ppp), code(\pp), 
+code(\p), code(\mp), code(\mf), code(\f), code(\ff), code(\fff),
+code(\ffff), code(\fffff), code(\ffffff), 
+code(\fp), code(sf), code(\sff), code(\sp), code(\spp), (\sfz) and code (\rfz).
 
 A crescendo mark is started with code(\cr) and terminated with
 code(\rc).  A decrescendo mark is started with code(\decr) and
-terminated with code(\rced).
+terminated with code(\rced).  There are also shorthands for these
+marks.  A crescendo can be started with code(\<) and a decrescendo can
+be started with code(\>).  Either one can be terminated with code(\!).
+Note that code(\!) must go before the last note of the dynamic mark whereas
+code(\rc) and code(\rced) go after the last note.  Because these marks are
+bound to notes, if you want to get several marks during one note, you must use
+spacer notes. 
+mudela(fragment,verbatim,center)(
+c'' \< \! c''   d'' \decr e'' \rced 
+< f''1 {s4 \< \! s4 \> \! s2 } >)
+
+
+COMMENT(Broken!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
 
 Tremolo marks can be printed by a note by adding code(:)[var(length)]
 after the note.  The length must be at least 8.  A var(length) value
@@ -567,18 +652,21 @@ property if there was no last value.  To place tremolo marks in
 between two notes, begin with code([:)var(length) and end with code(]).
 The tremolo marks will appear instead of beams.  Putting more than two
 notes in such a construction will produce odd effects. 
-mudela(fragment,verbatim,center)(
+
+[TREMOLO BEAMS TEMPORARILY OUT OF ORDER]
+
+COMMENT(mudela (fragment,verbatim,center)(
 c'2:8 c':32 [:16 e'1 g'] [:8 e'4 f']
-)
+))
 
 COMMENT(
 Is the last paragraph correct?  Is it called "tremolo"?  Why is
 "abbreviation" used?  (What is the unabreviated form?)
 
-
-mudela(fragment,verbatim,center)(
+COMMENT(
+mudela (fragment,verbatim,center)(
 c'4:32 [:16 c'8 d'8]
-)
+))
 
 )
 
@@ -666,6 +754,101 @@ code(\transpose) first.  Any code(\relative) keywords that are outside the
 code(\transpose) have no effect on notes that appear inside the
 code(\transpose).  
 
+sect(Chords)
+
+Chords can be entered either by name or by listing the notes in angle brackets.
+Chords can be displayed either as notes or by name.  To enter chords by name,
+either place them inside the code(\chords) keyword, or use
+code(\notes) and surround them with
+code(@) characters. 
+Chord names have the form
+var(tonic)[var(duration)][code(-)var(modifier)][code(^)var(subtractions)][code(/)var(inversion)]
+The var(tonic) should be the tonic note of the chord, and the var(duration) is
+the chord duration in the usual notation.  There are two kinds of modifiers.
+One type is chord additions, which are obtained by listing intervals separated
+by dots.  An interval is written by its number with an optional code(+) or
+code(-) to indicate raising or lowering by half a step.  A chord additions has
+two effects:  it adds the specified interval and all lower odd numbered
+intervals to the chord, and it may lower or raise the specified interval.
+Intervals can be separated by a dot (code(.)) if you need to list
+several unmodified intervals.
+Repeating a code(-) character will remove a half step from the preceeding
+interval.  
+mudela(fragment,verbatim,center)(
+\transpose c''{ 
+\chords{
+  c1 c-3- c-7 c-8 c-9  
+  c-9-5+7+ c-3-5- c-4.6.8
+}}) 
+The second type of modifier that may appear after the code(-) is 
+a named modifier. 
+Named modifiers are listed in the file file(chord-modifiers.ly).  The
+available modifiers are code(m) and code(min) which lower
+the 3rd half a step, code(aug) which raises the 5th, code(dim) which lowers
+the 5th, code(maj) which adds a raised 7th, and code(sus) which replaces the
+5th with a 4th.  
+mudela(fragment,verbatim,center)(
+\transpose c''{ 
+\chords{
+  c1-m c-min c-maj c-aug c-dim c-sus
+}}) 
+
+Chord subtractions are used to eliminate notes from a chord.  The notes to be
+subtracted are listed after a code(^) character, separated by dots.  
+mudela(fragment,verbatim,center)(
+\transpose c''{ 
+\chords{
+  c1^3 c-7^5.3 c-8^7
+}}) 
+
+Chord inversions can be specified by appending code(/) and the name of a
+single note to a chord.  This has the effect of lowering the specified note by
+an octave so it becomes the lowest note in the chord.  If the
+specified note is not in the chord then a warning will be printed.  
+mudela(fragment,verbatim,center)(
+\transpose c'''{ 
+ @c1@ @c/e@ @c/g@ @c-7/e@
+}) 
+Throughout these examples, chords have been shifted around the staff
+using code(\transpose).  The code(\relative) keyword has odd effects
+when combined with named chords.  
+
+For displaying printed chord names, use the code(ChordNames) context.  
+The chords may be entered either using the notation described above,
+or directly using angle brackets. 
+mudela(fragment,verbatim)(
+<
+  \type ChordNames { \chords{ a b c} \notes{ < d f g >  < e g b > } }
+  \type Staff \notes{ a b c' d' e' }
+>
+)
+Lilypond examines chords specified as lists of notes to determine a
+name to give the chord.  By default, LilyPond will not try to identify
+chord inversions:
+mudela(fragment,verbatim,center)(
+<
+  \type ChordNames { 
+     \notes{ < e' g' c'' > } }
+  \type Staff \notes{ c' } 
+>)
+If you want inversions to be recognized, you must set the property
+code(Score.chordInversion): 
+mudela(fragment,verbatim,center)(
+<
+  \property Score.chordInversion = 1
+  \type ChordNames { 
+       \notes{ < e' g' c'' > } }
+  \type Staff \notes{ c' } 
+>)
+
+COMMENT(
+  Two other properties
+     chordInversionPreserve
+ and chordNameStyle = Banter
+ exist.  What do these do?
+)
+
+
 sect(Lyrics)
 
 Lyrics are entered like notes, with pitches replaced
@@ -676,7 +859,7 @@ See Section ref(modes) for a description of what is interpreted as a lyric.
 
 In order to instruct LilyPond to write lyrics underneath the
 staff, you must enter the lyrics context with code(\type Lyrics).  
-Lyrics should be entered in lyrics mode which is entered with code(\lyric).
+Lyrics should be entered in lyrics mode which is entered with code(\lyrics).
 
 Spaces can be introduced into a lyric either by using quotes (code("))
 or by using an underscore without quotes: code(He_could4 not4).  All
@@ -684,7 +867,7 @@ unquoted underscores are converted to spaces.  Here is a full example:
 mudela(verbatim)(\score{
   <  \notes \transpose c'' {c d e c | c d e c | e f g'2 | 
                               e'4 f g'2 \bar "|."; }
-     \type Lyrics \lyric { 
+     \type Lyrics \lyrics { 
               DOEXPAND(Fr\)`e-4 re Ja- que DOEXPAND(Fr\)`e- re Ja- que
               Dor- mez vous?2 Dor-4 mez vous?2  }
   >
@@ -697,39 +880,29 @@ URG
 Why does this warrant an URG?
 )
 
+When one word is attached to many notes, you may 
+want a  continuous line after the lyric to show  this.   To achieve
+this effect, add a code(__) lyric after the lyric to be extended.  
+This will create
+an extender, a line  that extends over the entire duration of 
+the lyric.   There must be a lyric after the code(__), so if you want
+to extend the final lyric, you will have to end with a blank lyric. 
+mudela(verbatim,center)(
+\score{
+< \notes \relative c''{ 
+     a4()b()c()d c()d()b()a }
+   \type Lyrics \lyrics {
+     foo1 __  bar2. __ _ }
+> })
+     
 
-COMMENT(
-
-sect(Chords and Voices)
-
-Here's a simple chord
-mudela(fragment,verbatim,center)(
-<c e g>
-)
-
-here are a few
-mudela(fragment,verbatim,center)(
-<
-        { c'()d'()c' }
-        { e'()f'()e' }
-        { g'()a'()g' }
->
-)
-
-and similarly voices
-mudela(fragment,verbatim)(
-<
-        { \voiceone c'4 g' c' g' }
-        { \voicetwo c2 g2 }
->
-)
+COMMENT(Broken!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
 
-)
 
 sect(Time)  
 
 LilyPond aligns all musical objects according to the amount of time
-they occupy.  All of these objects have a duration.  When music is
+they occupy.  All musical objects have a duration.  When music is
 written sequentially using braces the duration is the sum of the 
 durations of the elements.  When music is stacked into simultaneous music 
 using angle
@@ -826,6 +999,30 @@ verb(
 )
 
 
+sect(Repeats)
+
+In order to specify repeats, use the code(\repeat) keyword.  By
+default, repeats are printed with repeat symbols.  
+mudela(fragment,verbatim,center)(
+c'1
+\repeat 2 { c'4 d' e' f' }
+\repeat 2 { f' e' d' c' })
+In order to specify alternate endings, use the code(\alternative)
+keyword.  
+mudela(fragment,verbatim,center)(
+c'1
+\repeat 2 {c'4 d' e' f'} 
+\alternative { {d'2 d'} {f' f} })
+When the repeats involve partial measures, it will be necessary to use
+code(\partial) keywords to indicate which measures are short.  
+mudela(fragment,verbatim)(
+\type Staff { \relative c'{
+  \repeat 2 { \partial 4; e | c2 d2 | e2 f2 | }
+  \alternative { { g4 g g } {\partial 2.; a a a a | b1 } }
+}})
+Repeats can be unfolded by setting the unfoldRepeats 
+
+
 sect(Keywords)
 
 Keywords sometimes appear alone, but usually they require arguments.
@@ -849,6 +1046,9 @@ dit(code(\accepts) var(string)code(;)) This keyword can appear only within a
 code(\translator) block.  It specifies what contexts are allowed with the
 context that is being defined.  See Section ref(translators).  
 
+dit(code(\alternative) code({) var(music1) var(music2) ... code(}))
+Specifies alternative endings.  Must come after a code(\repeat) keyword.  
+
 dit(code(\bar) var(bartype)code(;)) Prints a special bar symbol, or at
 measure boundaries, replaces the regular bar symbol with a special
 symbol.  The argument var(bartype) is a string which specifies the
@@ -860,7 +1060,7 @@ If var(bartype) is set to code("empty") then nothing is printed, but a
 line break is allowed at that spot.  Note that the printing of special bars
 has no effect on the MIDI output.
 
-dit(mycode(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
+dit(code(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
 of bar lines.  If var(togglevalue) is 0 then bar line generation is
 turne off.   If var(togglevalue) is  1  then a bar is  immediately
 printed and bar generation is turned  on.
@@ -881,17 +1081,18 @@ mudela(center)(
            \clef varbaritone; c'4^"\kern -10mm varbaritone"
            \clef tenor;     c'4_"\kern -10mm tenor"
            \clef "G_8";   c'4^"\kern -6mm G\_8"  }  
-   \paper{ linewidth= 4.5 \in }
+   \paper{ linewidth= 4.5 \in; }
 }
 )
 mudela(center)(
 \score{
   \notes{\cadenza 1; \clef alto;    c'4_"\kern -10mm alto"
+      %     \clef scarlatti;    c'4_"\kern -4mm scarlatti"
            \clef mezzosoprano; c'4^"\kern -10mm mezzosoprano"
            \clef soprano;  c'4_"\kern -10mm soprano"
            \clef treble;  c'4^"\kern -6mm treble"
            \clef french;  c'4_"\kern -10mm french" }  
-  \paper{ linewidth= 4.5 \in }
+  \paper{ linewidth= 4.5 \in; }
 }
 )
 The treble  clef  can also  be obtained using  the  names code(G) or
@@ -900,8 +1101,9 @@ code(violin).  The bass clef is also available by code(\clef  F).
 dit(code(\cm)) Specify a dimension in centimeters. 
 
 dit(code(\consists) var(string)code(;)) This keyword can appear only within a
-code(\translator) block.  It specifies that an engraver named
-var(string) should be added to the translator.  See Section ref(translators).
+code(\translator) block.  It specifies that an engraver or performer named
+var(string) should be added to the translator.  See Section
+ref(translators).
 
 dit(code(\duration) code({) var(length) var(dotcount) code(})) Specify note
 duration.  The parameter var(length) is the negative logarithm (base
@@ -910,9 +1112,9 @@ note, etc.  The number of dots  after  the  note is given by
 var(dotcount). 
 
 dit(code(\font) var(string)) Internal keyword.  Used within
-code(\symboltables) to specify the font.
+code(\paper) to specify the font.
 
-dit(code(\grouping) var(durationseq))  Sets  the  metric structure of
+dit(code(\grouping) var(durationseq)code(;))  Sets  the  metric structure of
 the measure.  Each argument specifies the duration of one metric unit.
 For example, code(\duration 16*5;) specifies a grouping of five beats
 together in 5/16 time.  The default grouping is to have as many groups
@@ -923,35 +1125,45 @@ Specifies information about the music.  A header should appear at the
 top of the file describing the file's contents.  If a file has
 multiple code(\score) blocks, then a header should appear in
 each score block describing its contents.  Tools like code(ly2dvi) can
-use this information for generating titles.   Some possible key values
-are: title, opus, description, composer, enteredby, and copyright.
+use this information for generating titles.   Key values that are used
+by ly2dvi are: title, subtitle, composer, opus, poet, instrument,
+metre, arranger, and piece.  
 
 dit(code(\in)) Specify a dimension in inches.  
 
 dit(code(\include) var(file)) Include the specified file.  The
 argument var(file) is a string.  The full filename including the
-file(.ly) extension must be given. 
-
-dit(code(\key) var(pitch)) Change key signature to that of
-var(pitch)-major.
-
-dit(code(\keysignature) var(pitchseq);)
+file(.ly) extension must be given, and the filename must be quoted.
+(An unquoted string will not work here.)
+
+dit(code(\key) var(pitch) var(type) code(;)) Change the key signature. 
+var(type) should be code(\major) or code(\minor) to get
+var(pitch)-major or var(pitch)-minor, respectively. The second
+argument is optional, the default is major keys. 
+The var(\type) argument can also be given as an integer, which tells
+the number of semitones that should be added to the pitch given in the
+subsequent code(\key) commands to get the corresponding major key,
+e.g. code(\minor) is defined as 3.
+
+dit(code(\keysignature) var(pitchseq)code(;))
 Specify an arbitrary key signature.  The pitches from var(pitch) will
 be printed in the key signature in the order that they appear on the list.
 
-dit(code(\lyric) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
+dit(code(\lyrics) var(lyriclist)) Parse var(lyriclist) in lyrics mode.
 
 dit(code(\maininput)) Internal command.  This command is used for creating init
 files like file(init.fly) that read the user file into the middle of another
-file.  Using it in a user file will lead to an infinite loop.
+file.  It is illegal to use this command in a user file.  
         
-dit(code(\mark) var(unsigned) or code(\mark) var(string)) Allowed in
-music only.  Prints a mark over or under (?) the staff.  You must add
-code(Mark_engraver) to the Score context and it only seems to work if the
-mark appears at the beginning of a line.  
+dit(code(\mark) var(unsigned)code(;) or code(\mark) var(string)code(;)) 
+Allowed in music only.  Prints a mark over or under (depending on the
+code(markDirection) property) the staff.
+You must add code(Mark_engraver) to the Score context.
 
 dit(code(\midi) var(statementlist)) Appears in a score block to
-indicate that musical output should be produced.  See code(\tempo).
+indicate that musical output should be produced and to set output
+parameters.  Can also appear at the top level to set default output
+parameters.  See code(\tempo).
 
 dit(code(\mm)) Specify a dimension in millimeters. 
 
@@ -962,7 +1174,12 @@ to 7, with 0 corresponding to C and 7 corresponding to B.  The shift
 is zero for a natural, negative to add flats, or positive to add
 sharps.
 
-dit(code(\notenames) var(assignmentlist)) Define new note names.  
+dit(code(\name) var(context)code(;)) Appears within code(\translator) to
+specify the name of the context that the translator handles. See Section
+ref(translators).   
+
+dit(code(\notenames) var(assignmentlist)) Define new note names.  This
+keyword can appear only at the top level. 
 The argument is a list of definitions of  the form
 var(name) = var(pitch),  where var(pitch) is specified with the
 code(\musicalpitch) keyword.  
@@ -970,26 +1187,25 @@ code(\musicalpitch) keyword.
 dit(code(\notes) var(music)) Enter note mode and process the
 specified music. 
 
-dit(code(\)code(output) var(string)code(;)) Allowed only in
-code(\paper) block.  The parameter var(string) specifies an alternate
-name for the TeX() output.  A file(.tex) extension will be added to
-var(string) to produce the output file name.
-
 dit(code(\paper) var(statmentlist)) 
-Appears in a score block to indicate that the music should be printed.
+Appears in a score block to indicate that the music should be printed
+or to set output parameters.  Can also appear at the top level to set
+default output parameters for all of the score blocks.  
 The var(statmentlist) contains statements that change features of the
 output.  See Section ref(paper).  
 
-dit(code(\partial) var(duration)) Specify that the first measure of
+dit(code(\partial) var(duration)code(;)) Specify that the first measure of
 the music lasts only for the specified duration.
 
-dit(code(\penalty) code(=) var(int)) Allowed only in music.
+dit(code(\penalty) code(=) var(int)code(;)) Allowed only in music.
 Discourage or encourage line breaks.  See identifiers code(\break) and
 code(\nobreak) in Section ref(ident). 
 
 dit(code(\property) var(contextname)code(.)var(propname) code(=) var(value))
 Sets the var(propname) property of the context var(contextname) to the
-specified var(value).  All three arguments are strings.
+specified var(value).  All three arguments are strings.  Depending on
+the context it may be necessary to quote the strings or to leave space
+on both sides of the dot. 
 
 dit(code(\pt)) Specify a dimension in points. 
 
@@ -1002,6 +1218,20 @@ the starting pitch for this comparision.  In the case of chords, the
 first note of a chord is used as the base for the first pitches in the next
 chord.  See Section ref(relative).
 
+dit(code(\remove) var(string)code(;)) Can appear only in a
+code(\translator) block.  Specifies that a performer or engraver named
+var(string) should be removed.  See Section ref(translators).  
+
+dit(code(\repeat) var(count) code({) var(music) code(}))
+Repeats the specified
+music var(count) times.  Alternative endings can be specified by adding a
+code(\alternative) keyword after the code(\repeat).  
+
+dit(code(\scm) var(scheme)code(;)) Embeds specified Scheme code.  
+
+dit(code(\scmfile) var(filename)code(;)) Reads Scheme code from the specified
+file.  
+
 dit(code(\score) var(statementlist)) Create a Score context.  This
 is the top level notation context.  
 COMMENT(this still needs work)
@@ -1033,7 +1263,7 @@ lines beyond those explicitly specified.
 COMMENT(First pair of dimensions seems to be skipped.  At least it is
 in the example file denneboom.ly.)
 
-dit(code(\skip) var(duration)) Skips the amount of time specified by
+dit(code(\skip) var(duration)code(;)) Skips the amount of time specified by
 var(duration).  A gap will be left for the skipped time with no notes
 printed.  It works in Note Mode or Lyrics Mode (but generates a
 mysterious error in lyrics).
@@ -1045,22 +1275,18 @@ second parameter is set to 1 to start the mark and 2 to stop it.
 Users should use the abbreviations which are defined in the
 initialization file file(dynamic.ly).
 
-dit(code(\symboltables)) Internal keyword.  Used to create symbol
-tables.  See initialization files file(paper*.ly), file(feta*.ly), and
-file(table*.ly).  
-
-dit(code(\table)) Internal keyword.  Used within code(\symboltables)
-to specify the tables.  See initialization files. 
-
-dit(code(\tempo) var(duration) = var(perminute)) Used within
-code(\midi) to specify the tempo.  For example, 
-`code(\midi { \tempo 4 = 76})' requests output with 76 quarter notes
-per minute. 
-
+dit(code(\tempo) var(duration) = var(perminute)code(;)) Used within
+code(\midi) or within music to specify the tempo.  For example, 
+`code(\midi { \tempo 4 = 76;})' requests output with 76 quarter notes
+per minute.  Note that if the music contains several tempo commands,
+only the last one is used to set the tempo for the entire MIDI output. 
+COMMENT(Is this true?)
 
-dit(code(\time) var(numerator)code(/)var(denominator)) Change the time
-signature.  The default time signature  is 4/4.  
+dit(code(\time) var(numerator)code(/)var(denominator)code(;)) Change the time
+signature.  The default time signature is 4/4.  
 
+dit(code(\times) var(numerator)code(/)var(denominator) var(music))
+Multiply the duration of var(music) by the specified fraction.
 
 dit(code(\translator) var(statements) or code(\translator)
 var(context) = var(name)) The first variant appears only within
@@ -1115,6 +1341,12 @@ dit(code(Voice)) Corresponds to a voice on a staff.
   This context handles the conversion of noteheads,
   dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests.
 
+dit(code(ChordNamesVoice)) A voice with chord names.  Handles printing
+of a line of chord names.  
+
+dit(code(ChordNames))  Typesets chord names.  Can contain
+code(ChordNamesVoice) contexts.  
+
 dit(code(Lyrics)) Typesets lyrics.  It can contain code(LyricVoice) contexts.
 
 dit(code(Staff)) Handles clefs, bar lines, keys,
@@ -1129,6 +1361,10 @@ contexts.  It adds a brace on the left side grouping the staffs
 together. The bar lines of the contained staffs are connected vertically.
 It can contain code(Staff) contexts.
 
+dit(code(PianoStaff)) Just like code(GrandStaff) but with
+code(minVerticalAlign) set equal to code(maxVerticalAlign) so that
+interstaff beaming and slurring can be used.  
+
 dit(code(StaffGroup)) Contains code(Staff) or code(RhythmicStaff)
 contexsts.  Adds a bracket on the left side, grouping the staffs
 together.  The bar lines of the contained staffs are connected vertically.
@@ -1173,17 +1409,16 @@ subsubsubsect(Lyrics properties)
 description(
 
 dit(code(textstyle)) Set the font for lyrics.  The available font
-choices are code(normaltext), code(roman), code(italic), code(bold)
-code(normaltext), code(large), code(Large), code(huge), and
-code(finger).  The code(finger) font can only display numbers.  Note
-also that you must be careful when using code(\property) in Lyrics
-mode.  Because of the way strings are parsed, either put quotes around
-the arguments to code(\property) or be sure to leave a space on both
-sides of the dot.
-
-dit(code(textalignment)) Controls alignment of lyrics.  Set to \left
-to align the left end of the lyric with the note; set to \right to
-align the right end of the lyric with the note.  Set to \center to
+choices are code(roman), code(italic), code(bold), code(large),
+code(Large), code(typewriter), and code(finger).  The code(finger)
+font can only display numbers.  Note also that you must be careful
+when using code(\property) in Lyrics mode.  Because of the way strings
+are parsed, either put quotes around the arguments to code(\property)
+or be sure to leave a space on both sides of the dot.
+
+dit(code(textalignment)) Controls alignment of lyrics.  Set to code(\left)
+to align the left end of the lyric with the note; set to code(\right) to
+align the right end of the lyric with the note.  Set to code(\center) to
 align the center of the lyric with the note.  
 
 )
@@ -1192,7 +1427,12 @@ subsubsubsect(Voice properties)
 
 description(  
 
-dit(code(midi_instrument)) Sets  the  instrument for MIDI  output. 
+dit(code("midi_instrument")) Sets the instrument for MIDI output.  This
+property name must be quoted because of the embedded underscore.  If
+this property is not set then LilyPond will use the code(instrument)
+property.  This must be set to one of the strings on the list of MIDI
+instruments that appears in Section ref(midilist).  If you use a
+string which is not listed, LilyPond will silently substitute piano. 
 
 dit(code(transposing)) Tranpose the MIDI output.  Set this property to
 the number of half-steps to transpose by.
@@ -1210,6 +1450,10 @@ direction, set to code(\up) to force slurs up, set to code(\down) to
 force slurs down.  The shorthands code(\slurup), code(\slurdown), and
 code(\slurboth) are available.
 
+dit(code(tieydirection)) Set to code(\free) for free choice of tie
+direction, set to code(\up) to force ties up, set to code(\down) to
+force ties down.  
+
 dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs, and
 a larger value for dashed slurs.  Identifiers code(\slurnormal) and
 code(\slurdotted) are predefined to set the first two settings.
@@ -1219,7 +1463,7 @@ horizontally if they collide with other notes.  This is useful when
 typesetting many voices on one staff.  The identifier code(\shift) is
 defined to enable this.
 
-dit(code(dynamicdir)) Determines location of dynamic marks.  Set to
+dit(code(dynamicDir)) Determines location of dynamic marks.  Set to
 code(\up) to print marks above the staff; set to code(\down) to print
 marks below the staff.
 
@@ -1241,13 +1485,20 @@ setting to 2 shows a number and a bracket if there is no beam; setting
 to 3 shows a number, and if there is no beam it adds a bracket;
 setting to 4 shows both a number and a bracket unconditionally.  
 
+dit(code(markScriptPadding)) Determines the extra space added between
+the mark and the closest staff line or note.
+
+dit(code(markDirection)) Determines if marks should be printed above
+or below the staff. Set to code(\up) to print marks above the staff;
+set to code(\down) to print marks below the staff.
+
 )
 
 subsubsubsect(Staff properties)
 
 description(
  
-dit(code(defaultclef)) Determines the default clef.  See code(\clef)
+dit(code(defaultClef)) Determines the default clef.  See code(\clef)
 keyword.
 
 dit(code(nolines)) Sets the number of lines that the staff has.
@@ -1257,9 +1508,6 @@ dit(code(barAlways)) If set to 1 a bar line is drawn after each note.
 dit(code(defaultBarType)) Sets the default type of bar line.  See
 code(\bar) keyword.
 
-
-
-
 dit(code(keyoctaviation)) If set to 1, then keys are the same in all
 octaves.  If set to 0 then the key signature for different octaves can
 be different and is specified independently: code(\keysignature bes
@@ -1269,7 +1517,9 @@ code(\specialkey) or reset to 1 with code(\normalkey).
 dit(code(instrument) and code(instr)) If code(Staff_margin_engraver)
 is added to the Staff translator, then the code(instrument) property
 is used to label the first line of the staff and the code(instr)
-property is used to label subsequent lines.
+property is used to label subsequent lines.  If the
+code(midi_instrument) property is not set then code(instrument) is
+used to determine the instrument for MIDI output.
 COMMENT(This prints the instrument name on top of the staff lines.)
 
 dit(code(abbrev)) Set length for tremolo to be used if no length is
@@ -1283,37 +1533,41 @@ default) if you do not want key signatures printed.
 dit(code(timeSignatureStyle)) Changes the default two-digit layout
    for time signatures. The following values are recognized:
    description(
-      dit(code(C)): 4/4 and 2/2 are typeset as C and struck C,
+      dit(code(C)) 4/4 and 2/2 are typeset as C and struck C,
       respectively. All other time signatures are written with two digits.
-      dit(code(old)): 2/2, 3/2, 3/4, 4/4, 6/4 and 9/4 are typeset with
+      dit(code(old)) 2/2, 3/2, 3/4, 4/4, 6/4 and 9/4 are typeset with
       old-style mensuration marks. All other time signatures are 
       written with two digits.
-      dit(code(1)): All time signatures are typeset with a single
+      dit(code(1)) All time signatures are typeset with a single
       digit, e.g. 3/2 is written as 3.
-      dit(code(C2/2,C4/4, old2/2, old3/2, old3/4, old4/4, old6/4 or
-      old9/4)): Tells Lilypond to use a specific symbol as time
+      dit(code(C2/2), code(C4/4), code(old2/2), code(old3/2),
+      code(old3/4), code(old4/4), code(old6/4) or
+      code(old9/4)) Tells Lilypond to use a specific symbol as time
       signature.
    )
-
 The different time signature characters are shown below with
 their names:
 mudela(fragment,center)(
 \relative c'' {
 \property Voice.textstyle = typewriter
-\property Staff.timeSignatureStyle = "C"
-\time 2/2; a2^"C" a2 \time 2/2;
-\property Staff.timeSignatureStyle = "old3_2"
-a2_"old3\_2" a2 \time 2/2;
-\property Staff.timeSignatureStyle = "oldC"
-a2^"oldC" a2 \time 2/2;
-\property Staff.timeSignatureStyle = "old6_4"
-a2_"old6\_4" a2 \time 2/2;
-\property Staff.timeSignatureStyle = "old9_4"
-a2^"old9\_4" a2
+\property Staff.timeSignatureStyle = "C2/2"
+\time 2/2; a2^"C2/2" a2 
+\property Staff.timeSignatureStyle = "C4/4"
+\time 2/2; a2^"C4/4" a2 
+\property Staff.timeSignatureStyle = "old2/2"
+\time 2/2; a2^"old2/2" a2 
+\property Staff.timeSignatureStyle = "old3/2"
+\time 2/2; a2^"old3/2" a2 
+\property Staff.timeSignatureStyle = "old4/4"
+\time 2/2; a2^"old4/4" a2 
+\property Staff.timeSignatureStyle = "old6/4"
+\time 2/2; a2^"old6/4" a2 
+\property Staff.timeSignatureStyle = "old9/4"
+\time 2/2; a2^"old9/4" a2 
 }
 )
 
-COMMENT( timeSignatureSymbol?  timeSignatureChar? )
+COMMENT(Broken!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
 
 
 )
@@ -1356,20 +1610,19 @@ beams with zero slope.  The identifiers code(\beamslopeproportional),
 code(\beamslopedamped), and code(\beamslopezero) each set the
 corresponding value.
 
+dit(code(chordInversion)) Determines whether LilyPond should look for
+chord inversions when translating from notes to chord names.  Set to 1
+to find inversions.  The default is 0 which does not look for inversions.
+
 )
-       
+
 
 COMMENT(
 
 Mystery properties:
 
 bar-number-engraver.cc:  "barScriptPadding"  vertical space for numbers
-mark-engraver.cc:        "markScriptPadding" vertical space for marks
 span-bar-engraver.cc:    "singleStaffBracket" do single staffs get a bracket?
-bar-column-engraver.cc:  "barColumnPriority"        
-bar-number-engraver.cc:  "barNumberBreakPriority"   Control horizontal ordering
-mark-engraver.cc:        "markBreakPriority"      of bars, clefs, keysig
-staff-margin-engraver.cc:"marginBreakPriority"    etc.  Slated for revision
 )
 
 sect(Pre-defined Identifiers)
@@ -1389,6 +1642,9 @@ equal to -1.
 dit(code(\f)) Print forte symbol on the preceeding note.
 dit(code(\ff)) Print fortissimo symbol on the preceeding note. 
 dit(code(\fff)) Print fortississimo symbol on preceeding note. 
+dit(code(\ffff)) Print fortissississimo symbol on preceeding note.
+dit(code(\fffff)) Print fffff symbol on preceeding note.
+dit(code(\ffffff)) Print ffffff symbol on preceeding note.
 dit(code(\fp)) Print fortepiano symbol on preceeding note. 
 dit(code(\free)) Used for setting direction setting properties.  Is
 equal to 0.  
@@ -1397,6 +1653,10 @@ code(castingalgorithm).  Is equal to 1.0.
 dit(code(\infinity)) Used for setting the Score.beamslopedamping
 property.  Is actually equal to 10000.  
 dit(code(\left)) Used for setting textalignment property.  Is equal to -1.
+dit(code(\major)) Used as the second argument of the code(\key)
+command to get a major key.
+dit(code(\minor)) Used as the second argument of the code(\key)
+command to get a minor key.
 dit(code(\mf)) Print mezzoforte symbol on preceeding note. 
 dit(code(\mp)) Print mezzopiano symbol on preceeding note. 
 dit(code(\nobreak)) Prevent a line break in music by using a large
@@ -1410,11 +1670,16 @@ has the same key signature.  This sets the Staff.keyoctaviation property.
 dit(code(\p)) Print a piano symbol on preceeding note. 
 dit(code(\pp)) Print pianissimo symbol on preceeding note. 
 dit(code(\ppp)) Print pianississimo symbol on preceeding note. 
+dit(code(\pppp)) Print pianissississimo symbol on preceeding note.
+dit(code(\ppppp)) Print ppppp symbol on preceeding note.
+dir(code(\pppppp)) Print pppppp symbol on preceeding note.
 dit(code(\rc)) Terminate a crescendo. 
 dit(code(\rced)) Terminate a decrescendo
+dit(code(\rfz)) Print a rinforzato symbol on preceeding note.
 dit(code(\right)) Used for setting textalignment property.  Is set to 1.
-dit(code(\sf)) Print a ?? symbol on preceeding note. 
-dit(code(\sfz)) Print a ?? symbol on preceeding note. 
+dit(code(\sf)) Print a subito-forte symbol on preceeding note. 
+dit(code(\sff)) Print a subito-fortissimo symbol on preceeding note.
+dit(code(\sfz)) Print a sforzato symbol on preceeding note. 
 dit(code(\shiftoff)) Disable horizontal shifting of note heads that collide.  
 Sets the Voice.hshift property.
 dit(code(\shifton)) Enable note heads that collide with other note heads
@@ -1425,6 +1690,8 @@ dit(code(\slurdown)) Force slurs to be below notes. This sets the
 Voice.slurydirection property. 
 dit(code(\slurup)) Force slurs to be above notes.  This sets the
 Voice.slurydirection property.  
+dit(code(\sp)) Print a subito-piano symbol on preceeding note.
+dit(code(\spp)) Print a subito-forte symbol on preceeding note.
 dit(code(\specialkey)) Allow keys signatures do differ in different
 octaves.  This sets the Staff.keyoctaviation property.  
 dit(code(\stemboth)) Allow stems, beams, and slurs to point either
@@ -1450,35 +1717,75 @@ code(castingalgorithm).  Equal to 0.0.
 )
 
 
-sect(The code(\paper) Block)
+sect(Output)
+label(output)
 label(paper)
 
-The code(\paper) block may begin with an optional identifier reference.  No
+The output produced by LilyPond is controlled by the code(\paper) and
+code(\midi) keywords.  These keywords appear in the code(\score) block
+to indicate that printed or musical output should be produced.  If
+neither keyword appears in a code(\score) block, then paper output is
+produced but MIDI output is not produced.  
+
+The contents of the code(\paper) and code(\midi) blocks can change the
+output in various ways.  These blocks can appear at the top level of a
+Mudela file to set default parameters for each type of output.  It is
+still necessary to explicitly specify the output type in the
+code(\score) blocks if you don't want the default behavior of
+producing only paper output.  
+
+The code(\paper) and code(\midi) blocks 
+may begin with an optional identifier reference.  No
 identifier references are allowed anywhere else in the block.  
-The keywords code(\shape), code(\)code(output) and code(\translator) may
-appear in this block.  In addition, variable assignments may appear.  
-The variables control layout details and are set to reasonable
-defaults that depend on the font size in use.  The only way to find out what
-variables are supported is to search the source code for code(get_var). 
+The code(\paper) block can contain the code(\shape) keyword; the
+code(\midi) block can contain the code(\tempo) keyword.  Both of them
+can contain code(\translator) keywords.  The code(\paper) block can
+also contain identifier assignments and parameter assignments.  Unlike
+at the top level, these assignments must be terminated by a semicolon.
+
 
 subsect(Paper variables)
 
-There are a large number of paper variables that are used to set internal
-details of the layout.  Usually you will not want to change these variables.
-Two variables that you may want to change are code(linewidth) and code(indent).
+Warning: this section is outdated and inaccurate.  
+
+There are a large number of paper variables that are used to control
+details of the layout.  Usually you will not want to change these
+variables; they are set by default to vaules that depend on the font
+size in use.  The only way to find out what variables are supported is
+to search the source code for code(get_var).  Two variables that you
+may want to change are code(linewidth) and code(indent).
+
+In order to change the font size used for the output, many variables
+need to be changed.  Some identifiers and initialization files can
+simplify this process.  The default size is 20pt.  In order to select
+a different size, you must do two things.  At the top level, do
+code(\include "paper)var(SZ)code(.ly") where var(SZ) is the height of
+the staff in points.  Values presently allowed are 11, 13, 16, 20, and
+26.  This loads some definitions, but does not cause them to take
+effect.  In order to actually change the size, you must use one of the
+identifiers: code(\paper_eleven), code(\paper_thirteen),
+code(\paper_sixteen), code(\paper_twenty) or code(\paper_twentysix)
+inside a code(\paper) block.
+
 
 description(
   dit(var(integer)) If an integer appears on the left side of an
-assignment then a code(\symboltables) keyword must appear on the right
+assignment then a code(\font) keyword must appear on the right
 side.  This defines a music font at a particular size.  See Voice
 property code(\fontsize).
 
 dit(code(arithmetic_basicspace) and code(arithmetic_multiplier))
 The space taken by a note is determined by the formula 
-verb(arithmetic_multiplier * ( c + time ))
-where code(time) is the amount of time a note occupies.  The value of
-code(c) is affected by code(arithmetic_basicspace).  Increasing
-code(arithmetic_basicspace) will increase code(c).
+COMMENT(
+
+)verb(arithmetic_multiplier * ( c + log2 (time) ))COMMENT(
+
+) where code(time) is the amount of time a note occupies.  The value
+of code(c) is chosen such that the smallest space within a measure is
+arithmetic_basicspace.  The smallest space is the one following the
+shortest note in the measure.  Typically arithmetic_basicspace is set
+to the width of a quarter note head.
+
 dit(code(barsize)) Specify height of bars.  This value may need to be
 adjusted if you change the number of lines in the staff.
 dit(code(beam_dir_algorithm)) Specify algorithm for determining
@@ -1486,17 +1793,10 @@ whether beams go up or down.  It is real valued.  If set to 2.0 then
 majority selection is used.  If set to 3.0, then mean selection is
 used based on the mean center distance.  If set to 4.0 then median
 selection is used, based on the median center distance.  
-dit(code(beam_ideal_stem1))
-dit(code(beam_ideal_stem2))
-dit(code(beam_minimum_stem1))
-dit(code(beam_minimum_stem2))
-dit(code(beam_multiple_break))
-dit(code(beam_slope_damp_correct_factor))
-dit(code(beam_thickness)) Specify the thickness of beams.
 dit(code(castingalgorithm)) 
 dit(code(forced_stem_shorten)) Stems that have been forced to go the
 unnatural direction are shortened by this amount.  Equal to
-code(\interline) by default.  
+dit(code(forced_stem_shorten0))
 dit(code(gourlay_energybound))
 dit(code(gourlay_maxmeasures)) Maximum number of measures per line
 when using Gourlay method.
@@ -1509,16 +1809,24 @@ lines, calculated from the center of the lines.
 dit(code(linewidth))  Sets the width of the lines.  If it is set to
 -1.0, then a single unjustified line is produced.  
 dit(code(notewidth)) Width of an average note head.  
+dit(code(output)) Specifies an alternate
+name for the TeX() output.  A file(.tex) extension will be added to
+the string you specify.
 dit(code(rulethickness)) Determines thickness of staff lines and bars. 
 dit(code(slur_clip_angle))
 dit(code(slur_clip_height))
 dit(code(slur_clip_ratio))
-dit(code(slur_height_limit))
-dit(code(slur_ratio))
+dit(code(slur_height_limit)) Specifies the maximum height of slurs.
+Normally equal to staff_height.
+dit(code(slur_ratio)) Specifes the ratio of slur hight to slur width
+to aim for.  Default value is 0.3.  
 dit(code(slur_rc_factor))
-dit(code(slur_slope_damping))
-dit(code(slur_thickness))
-dit(code(slur_x_gap))
+dit(code(slur_slope_damping)) Allows slurs to start and end at
+different heights ????  Default value is 0.5.
+dit(code(slur_thickness)) Specify slur thickness.  Equal to code(1.4 *
+\staffline) by default.  
+dit(code(slur_x_gap)) Horizontal space between note and slur.  Set to
+code(\interline / 5) by default.  
 dit(code(slur_x_minimum))
 dit(code(staffheight)) The height of the staff from the center of the
 bottom line to the center of the top line.  Equal to to code(4 * \interline).
@@ -1529,20 +1837,134 @@ dit(code(tie_slope_damping))
 dit(code(tie_x_minimum))
 )
 
+
+subsect(MIDI Instrument Names)
+label(midilist)
+
+The MIDI instrument name is set by the code(Staff."midi_instrument")
+property or, if that property is not set, the code(Staff.instrument)
+property.  The instrument name should be chosen from this list.  If
+string does not exactly match one from this list then LilyPond uses
+the default piano.
+
+COMMENT( acordina = accordion, tango accordian = concertina
+         distortion guitar = distorted guitar
+         orchestral strings = harp 
+         pan flute = wood flute? )
+
+verb("acoustic grand"               "contrabass"             "lead 7 (fifths)"
+"bright acoustic"              "tremolo strings"        "lead 8 (bass+lead)"
+"electric grand"               "pizzicato strings"      "pad 1 (new age)"
+"honky-tonk"                   "orchestral strings"     "pad 2 (warm)"
+"electric piano 1"             "timpani"                "pad 3 (polysynth)"
+"electric piano 2"             "string ensemble 1"      "pad 4 (choir)"
+"harpsichord"                  "string ensemble 2"      "pad 5 (bowed)"
+"clav"                         "synthstrings 1"         "pad 6 (metallic)"
+"celesta"                      "synthstrings 2"         "pad 7 (halo)"
+"glockenspiel"                 "choir aahs"             "pad 8 (sweep)"
+"music box"                    "voice oohs"             "fx 1 (rain)"
+"vibraphone"                   "synth voice"            "fx 2 (soundtrack)"
+"marimba"                      "orchestra hit"          "fx 3 (crystal)"
+"xylophone"                    "trumpet"                "fx 4 (atmosphere)"
+"tubular bells"                "trombone"               "fx 5 (brightness)"
+"dulcimer"                     "tuba"                   "fx 6 (goblins)"
+"drawbar organ"                "muted trumpet"          "fx 7 (echoes)"
+"percussive organ"             "french horn"            "fx 8 (sci-fi)"
+"rock organ"                   "brass section"          "sitar"
+"church organ"                 "synthbrass 1"           "banjo"
+"reed organ"                   "synthbrass 2"           "shamisen"
+"accordion"                    "soprano sax"            "koto"
+"harmonica"                    "alto sax"               "kalimba"
+"concertina"                   "tenor sax"              "bagpipe"
+"acoustic guitar (nylon)"      "baritone sax"           "fiddle"
+"acoustic guitar (steel)"      "oboe"                   "shanai"
+"electric guitar (jazz)"       "english horn"           "tinkle bell"
+"electric guitar (clean)"      "bassoon"                "agogo"
+"electric guitar (muted)"      "clarinet"               "steel drums"
+"overdriven guitar"            "piccolo"                "woodblock"
+"distorted guitar"             "flute"                  "taiko drum"
+"guitar harmonics"             "recorder"               "melodic tom"
+"acoustic bass"                "pan flute"              "synth drum"
+"electric bass (finger)"       "blown bottle"           "reverse cymbal"
+"electric bass (pick)"         "skakuhachi"             "guitar fret noise"
+"fretless bass"                "whistle"                "breath noise"
+"slap bass 1"                  "ocarina"                "seashore"
+"slap bass 2"                  "lead 1 (square)"        "bird tweet"
+"synth bass 1"                 "lead 2 (sawtooth)"      "telephone ring"
+"synth bass 2"                 "lead 3 (calliope)"      "helicopter"
+"violin"                       "lead 4 (chiff)"         "applause"
+"viola"                        "lead 5 (charang)"       "gunshot"
+"cello"                        "lead 6 (voice)")
+
+
+
 subsect(Translators)
 label(translators)
 
 The behavior of notation contexts is defined by the translators for
 those contexts.  The translator for a context specifies what notations
 are handled by the context, it specifies what other contexts the
-context can contain, and it sets property values for the context.  The
-default contexts are all defined in file(engraver.ly).  An easy way to
-change the behavior of a context is to copy the definition from that
-file and modify it.  
-
-The first thing that appears inside a code(\translator)
-definition is the type of the context being created.  There are 
-four types:
+context can contain, and it sets property values for the context.  
+There are different translators for each type of output.  The
+translators for paper output are defined in file(engraver.ly).  The
+translators for MIDI output are defined in file(performer.ly).  
+
+The first thing that appears inside a code(\translator) definition is
+the type of the context being created.  This is specified with the
+code(\type) keyword: code(\type) var(typename)code(;).  After the type
+of the context is specified, property assignments, the code(\name)
+keyword and code(\consists), code(\accepts), and code(\remove)
+keywords can appear in any order.  The code(\name) keyword specifies
+the name of the context that is handled by the translator.  If the
+name is not specified, the translator won't do anything.  Each
+code(\accepts) keyword specifies what contexts can be contained inside
+this one.  The code(\consists) keywords specify which notations are
+handled by the context.  Each code(\consists) keyword specifies the
+name of an engraver (for paper ouput) or performer (for MIDI output)
+which handles a certain notation.  The code(\remove) keyword can be
+used to remove a performer or engraver from the translator.
+
+In the code(\paper) block, it is also possible to define translator
+identifiers.  Like other block identifiers, the identifier can only
+be used as the very first item of a translator.  In order to define
+such an identifier outside of code(\score), you must do
+verb(\paper{ foo=\translator{ ... }
+\score{
+  \notes{ ... }
+  \paper{ \translator{ \foo ... } }
+})
+
+Some All of the standard translators have predefined identifiers,  making
+it easy to redefine these contexts by adding or removing items. 
+The predefined identifiers are:  code(StaffContext),
+code(RhythmicStaffContext),  code(VoiceContext),  code(ScoreContext), code(ScoreWithNumbers)
+
+
+subsubsect(Paper Types and Engravers and Pre-defined Translators)
+
+Some pre-defined identifiers can simplify modification of translators.
+The pre-defined identifiers are:  
+description(
+dit(code(StaffContext)) Default Staff  context. 
+dit(code(RhythmicStaffContext)) Default RhythmicStaff  context. 
+dit(code(VoiceContext)) Default Voice  context.  
+dit(code(ScoreContext))  Default  Score context. 
+dit(code(ScoreWithNumbers)) Score  context with numbering at  the
+Score level.   
+dit(code(BarNumberingStaffContext)) Staff context with numbering  at
+the Staff level.  
+dit(code(HaraKiriStaffContext))  
+dit(code(OrchestralPartStaffContext))
+dit(code(OrchestralScoreContext))
+)
+Using these pre-defined values, you can remove  or add items to the
+translator verb(\paper{ \translator{ \StaffContext
+                     \remove Some_engraver;
+                     \consists Different_engraver;  }})
+      
+
+
+There are four types for paper translators:
 description(
   dit(code(Engraver_group_engraver))
   dit(code(Hara_kiri_line_group_engraver))
@@ -1551,20 +1973,10 @@ description(
 )
 COMMENT( The names of these types seem somewhat confusing. )
 
-After the type of the context is specified, property assignments and
-code(\consists) and code(\accepts) keywords can appear in any order.  
-Each code(\accepts) keyword specifies what contexts can be contained
-inside this one.  
-
-The code(\consists) keywords specify which notations are
-handled by the context.  Each code(\consists) keyword specifies the
-name of an engraver which handles a certain notation.  
-Here is a list
-of the engravers. 
+The engravers for paper output are:
 
 description(
 dit(code(Abbreviation_beam_engraver))
-dit(code(Bar_column_engraver)) 
 dit(code(Bar_engraver)) Engraves bar lines.  Normally in code(Staff) and
 code(RhythmicStaff).  
 dit(code(Bar_number_engraver)) Engrave bar numbers.  These numbers
@@ -1578,6 +1990,8 @@ with flags instead of beams.
 
 dit(code(Beam_req_swallow_translator)) Swallows beam requests.  In
 code(LyricVoice).  
+dit(code(Chord_name_engraver)) Engraves chord names.  Normally in
+code(ChordNameVoice) 
 dit(code(Clef_engraver)) Engraves the clef symbol.  Normally in code(Staff).
 dit(code(Collision_engraver))
 dit(code(Dot_column_engraver)) Engraves dots on dotted notes shifted to the
@@ -1590,19 +2004,13 @@ dit(code(Local_key_engraver))
 dit(code(Lyric_engraver)) Engraves lyrics.  Normally in code(LyricVoice).
 dit(code(Multi_measure_rest_engraver)) Engraves multi-measure rests that are
 produced with code(R).  Normally in code(Voice).
-dit(code(Note_heads_engraver)) Engraves note heads.  Normally in code(Voice).
-Removing this gives a fatal error.  
-COMMENT(Perhaps should be Note_head_engraver)
 dit(code(Piano_bar_engraver))
 dit(code(Pitch_squash_engraver)) Treat all pitches as middle C.  Used in
 code(RhythmicStaff).  Note that the notes move, but the locations of
 accidentals stay the same. 
-dit(code(Plet_engraver)) Engraves brackets and the number over tuplets.  In
-code(Voice).  
-dit(code(Plet_swallow_engraver)) Swallows tuplet requests without any output.
-In code(LyricVoice).  
-COMMENT( Should this be named Plet_req_swallow_translator? )
 dit(code(Priority_horizontal_align_engraver))
+dit(code(Repeat_engraver)) Handles repeats? In code(Staff) and 
+   code(RhythmicStaff).
 dit(code(Rest_collision_engraver)) Handles collisions of rests. In code(Staff).
 dit(code(Rest_engraver)) Engraves rests.  Normally in code(Voice).
 dit(code(Rhythmic_column_engraver))
@@ -1623,12 +2031,31 @@ left of the staff.
 dit(code(Staff_sym_engraver))
 dit(code(Stem_engraver)) Engraves stems.  Normally in code(Voice).
 dit(code(Ties_engraver)) Engraves ties.  Normally in code(Voice).
-COMMENT(perhaps should be named Tie_engraver?)
 dit(code(Time_signature_engraver)) Engraves the time signature.  Normally in
 code(Staff) and code(RhythmicStaff).
 dit(code(Timing_engraver)) Responsible for synchronizing timing information
 from staffs.  Normally in code(Score).  In order to create polyrhythmic music,
 this engraver should be removed from code(Score) and placed in code(Staff).
+dit(code(Tuplet_engraver)) Engraves tuplet brackets?  In code(Staff).
 dit(code(Vertical_align_engraver)) 
 )
 
+
+subsubsect(MIDI Types and Performers)
+
+The types available for  MIDI translators are:
+description(
+dit(code(Performer_group_performer))
+dit(code(Score_performer))
+dit(code(Staff_performer))
+)
+
+The performers for MIDI translators are:
+description(
+dit(code(Key_performer))
+dit(code(Time_signature_performer))
+dit(code(Note_performer))
+dit(code(Lyric_performer))
+dit(code(Swallow_performer))
+)
+