]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.145
authorfred <fred>
Wed, 27 Mar 2002 01:00:06 +0000 (01:00 +0000)
committerfred <fred>
Wed, 27 Mar 2002 01:00:06 +0000 (01:00 +0000)
CHANGES
Documentation/user/refman.itely
Documentation/user/tutorial.itely
lily/clef-engraver.cc
lily/custos-engraver.cc
lily/local-key-engraver.cc
lily/note-heads-engraver.cc
scm/translator-description.scm

diff --git a/CHANGES b/CHANGES
index 61b66fd97076243637494a5a7e3ae34e9802080f..9d10d4a5a6b9b547c5a6a74ccdcaae105e45f3fa 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,90 @@
-1.3.143.jcn3
+1.3.144.jcn4
 ============
 
+* Build fixes for icon, this fixes 'rpm' target.  Tried to reinclude
+in rpm using (.png and) .xpm, but latest LinuxPPC release's rpm
+(3.0.6) Icon: tag handling is broken.
+
+* Fixes for update-lily script.
+
+* Bugfixes: refman, changed Ascii to ASCII.
+
+* Fixed ascii art output.  Started some doco on different output formats.
+
+* Fixed scheme font lookup to handle new font lists with wildcards.
+
+* Fixes to point-and-click doco (Thanks, Laura Conrad).
+
+* Bugfixes: changed several (eval to (ly-eval for guile 1.4/1.4.x
+compatibility.
+
+* Fixes to buildscripts/clean-fonts.sh.
+
+1.3.144.hwn1
+============
+
+* Tutorial updates
+
+* Change interaction between clef-engraver and positioned items: do
+not use acknowledge/announce () to get position relative to c0, but
+use centralCPosition directly after grob creation.
+
+Side-effect: Pitch_squash_engraver now puts notes on position in
+staff, not on specific pitch.
+
+* Bugfixes: yet more create_grobs () -> process_music() reverts.
+
+* Tutorial updates
+
+* Don't give unbound spanner warnings for isolated dynamics on space
+rests.
+
+* cleaned up debug stuff.
+
+* cleaned up INSTALL document.
+
+* Key_change_req::do_equal_b(), keychange merge.
+
+* per octave key signatures. See
+input/regression/key-signature-scordatura.ly
+
+* moved tricks/ directory into test/.
+
+* Rename {Staff,Lyrics,etc}VerticalExtent and friends into
+VerticalExtent. Use predefined props to prevent inheritance.
+
+* Multi_measure_rest_engraver now uses whichBar property to detect
+barlines.  Hence, no need to keep Bar_engraver and
+Multi_measure_rest_engraver together.
+
+* Revised syntax for multiplied durations. Multiplied durations must
+now directly follow the number +dots. example:
+
+       c4*3/4 -\f (                    % valid
+       c4-\f ( *3/4                    % invalid
+
+* Halt configure if kpathsea not found. 
+
+* Small refman fixes.
+
+* Prevent tie - dot collisions.
+
+* Bugfix: don't crash if hyphen spanner bounds are empty.
+
+* Spanish glossary, courtesy David Gonzalez.
+
+* Bugfix: all-font-metrics.cc: only lookup .tfm and check checksum if
+the AFM file has a CheckSum field.
+
+
+1.3.144.mb1
+============
+
+* Fix ps specials to work together with \usepackage[french]{babel}
+
+1.3.144
+=======
+
 * LilyPond-mode: show what's going on (font building) in *view* buffer.
 
 * Added environment settings to ly2dvi and lilypond-book.
index 4f3e0a3fab7914daf0f05f51c4a419f5a18f59b7..dc98e0196ca1eef55002a6ecb18b20e08d2d88c7 100644 (file)
@@ -19,7 +19,7 @@
 @chapter Reference Manual
 
 This document describes GNU LilyPond and its input format. The last
-revision of this document was for LilyPond 1.3.141.
+revision of this document was made for LilyPond 1.3.145.
 
 
 @menu
@@ -39,6 +39,7 @@ revision of this document was for LilyPond 1.3.141.
 * Custodes::                    
 * Tuning output::               
 * Page layout::                 
+* Output formats::              
 * Sound::                       
 * Music entry::                 
 * Skipping corrected music::    
@@ -61,7 +62,7 @@ by `music compiler' or `music to notation compiler'.
 
 LilyPond is linked to GUILE, GNU's Scheme library for extension. The
 Scheme library provides the glue that holds together the low-level
-routines and separate modules general, which are C++.
+routines and separate modules which are written in C++.
 
 When lilypond is run to typeset sheet music, the following happens:
 @itemize @bullet
@@ -70,13 +71,14 @@ When lilypond is run to typeset sheet music, the following happens:
 then the user @file{ly} file is read.
 @item interpretation: the music in the file is processed ``in playing
 order'', i.e. the order that  you  use to read sheet music, or the
-order in which notes are played.
+order in which notes are played. The result of this step is a typesetting
+specification.
 
 @item typesetting:
-in this step, the results of the interpretation, a typesetting
-specification, is solved.
+The typesetting specification is solved: positions and formatting is
+calculated.
 
-@item the visible results ("virtual ink") is written to the output file.
+@item the visible results ("virtual ink") are written to the output file.
 @end itemize
 
 During these stages different types of data play the the main role:
@@ -116,7 +118,6 @@ brevity we omit obligotary lint such as @code{\score} blocks and
 * Tuplets::                     
 * Rests::                       
 * Skip::                        
-* Note mode::                   
 @end menu
 
 @c .  {Pitches}
@@ -215,18 +216,16 @@ The syntax for a verbose duration specification is
 @example
  \duration @var{scmduration}
 @end example
-Here, @var{scmduration} is a Scheme object of type Duration. See
+Here, @var{scmduration} is a Scheme object of type @code{Duration}. See
 @ref{Duration} for more information.
 
 
 In Note, Chord, and Lyrics mode, durations may be designated by numbers
 and dots: durations are entered as their reciprocal values.  For notes
-longer than a whole note, use identifiers.
-
-@quotation
+longer than a whole note you must use identifiers.
 
 @example 
-c'\longa c'\breve  
+ c'\breve  
 c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 
 r\longa r\breve  
 r1 r2 r4 r8 r16 r32 r64 r64 
@@ -236,7 +235,7 @@ r1 r2 r4 r8 r16 r32 r64 r64
 @lilypond[]
 \score {
   \notes \relative c'' {
-    a\longa a\breve  \autoBeamOff
+  \breve  \autoBeamOff
     a1 a2 a4 a8 a16 a32 a64 a64 
     r\longa r\breve  
     r1 r2 r4 r8 r16 r32 r64 r64 
@@ -252,11 +251,15 @@ r1 r2 r4 r8 r16 r32 r64 r64
   }
 }
 @end lilypond
-@end quotation
 
-As you can see, the longa is not printed. To get a longa note head, you
-have to use a mensural note heads. This is done accomplished by setting
-the @code{style} property of the NoteHead grob to @code{mensural}.
+ To get a longa note head, you have to use a mensural note heads. This
+is done accomplished by setting the @code{style} property of the
+NoteHead grob to @code{mensural}.
+
+@lilypond[fragment,singleline,verbatim]
+ \property Voice.NoteHead \set #'style = #'mensural
+ a'\longa
+@end lilypond
 
 If the duration is omitted then it is set to the previous duration
 entered.  At the start of parsing a quarter note is assumed.  The
@@ -281,12 +284,12 @@ notes or rests produced.
 A note specification has the form
 
 @example
-  @var{pitch}[@var{octavespec}][!][?][@var{duration}]
+  @var{pitch}[!][?][@var{duration}]
 @end example
 
-LilyPond will determine what accidentals to typeset depending on the key
-and context. The alteration refers to what note is heard, not to whether
-an accidental is printed.  A reminder accidental
+The alteration refers to what note is heard, not to whether an
+accidental is printed. This is done depending on the key and context.
+A reminder accidental
 @cindex reminder accidental
 @cindex @code{?}
 can be forced by adding an exclamation mark @code{!} after the pitch.  A
@@ -311,7 +314,7 @@ note head that includes a note name.  It is used in some publications by
 Hal-Leonard Inc.  music publishers.
 
 @lilypond[singleline,verbatim]
-\include "paper26.ly"
+\include "paper23.ly"
 \score {
         \notes { c'2 e'4 f' | g'1 }
         \paper { \translator { \EasyNotation } } 
@@ -339,9 +342,9 @@ the @code{-f ps} option of lilypond will produce the desired result.
 
 A tie connects two adjacent note heads of the same pitch.  When used
 with chords, it connects all of the note heads whose pitches match.
-Ties are indicated using the tilde symbol `@code{~}'.
-If you try to tie together chords which have no common pitches, a
-warning message will appear and no ties will be created.
+Ties are indicated using the tilde symbol `@code{~}'.  If you try to tie
+together chords which have no common pitches then no ties will be
+created.
 
 @lilypond[fragment,verbatim,center]
   e' ~ e' <c' e' g'> ~ <c' e' g'>
@@ -356,12 +359,16 @@ ties:
 @end lilypond
 
 In its meaning a tie is just a way of extending a note duration, similar
-to the augmentation dot: the following example are three ways of notating
+to the augmentation dot: the following example are two ways of notating
 exactly the same concept.
+@c
 @lilypond[fragment, singleline]
 c'2 c'4 ~ c'4
 @end lilypond
 
+
+Ties are printed through the @code{Tie} grob.
+
 @refbugs
 
 At present, the tie is implemented as a separate thing, temporally
@@ -370,7 +377,7 @@ between tied notes, dotted notes and plain notes.
 
 Tieing only a subset of the note heads of a chord is not supported in a
 simple way.  It can be achieved by moving the tie-engraver into Thread
-context and turning off ties per Thread.
+context and turning on an off ties per Thread.
 
 
 @node Tuplets
@@ -408,12 +415,24 @@ of tuplets.
 \times 2/3 { c''8 c c c c c }
 @end lilypond
 
+The format of the number is determined by the property
+@code{tupletNumberFormatFunction}. The default prints only the
+denominator, but if you set it to the Scheme function
+@code{fraction-tuplet-formatter} will print @var{num}:@var{den} instead.
+
+@cindex @code{tupletNumberFormatFunction}
+@cindex tuplet formatting 
+
+Tuplet brackets are printed as @code{TupletBracket} grobs
+
+
 @c .  {Rests}
 @node  Rests
 @subsection Rests
 @cindex Rests
 
-Rests are entered like notes, with note name `@code{r}'.
+Rests are entered like notes, with note name `@code{r}'. The grob is
+@code{Rest}.
 
 
 @c .  {Skip}
@@ -434,29 +453,6 @@ printed.  The shorthand is only available in Note and Chord mode.
 
 
 
-@node Note mode
-@subsection Note mode
-
-
-
-@cindex note mode
-@cindex @code{\notes}
-
-Note mode is the lexical mode generally used for inputting notes. The
-syntax is
-@example
-\notes @var{expr}
-@end example
-
-This instructs the tokenizer to interpret @var{expr} in note mode.  If a
-a sequence of alfabetical characters, like @code{foobar}, LilyPond first
-checks if @code{foobar} is a pitch name.  If it is not a pitch name,
-then it is treated as a string.
-
-Numbers and dots indicate durations, so you can enter floating point
-numbers in this mode.
-
-
 @node Staff notation
 @section Staff notation
 
@@ -505,6 +501,8 @@ semitones that should be added to the pitch given in the subsequent
 
 This command sets context property @code{Staff.keySignature}.
 
+The printed signature is a @code{KeySignature} grob.
+
 @cindex @code{keySignature}
 
 @c .  {Clef}
@@ -523,6 +521,8 @@ Shortcut for
   \property Staff.clefOctavation = @var{extra pitch of clefname}
 @end example
 
+Any change in these properties creates a clef (a @code{Clef} grob).
+
 Supported clef-names include 
 
 @itemize @bullet
@@ -587,7 +587,9 @@ Internally, this is a shortcut for doing
      \property Score.timeSignatureFraction = #'(@var{numerator} . @var{denominator})
 @end example
 
-[TODO: discuss options for layout]
+The grob is @code{TimeSignature}.  There are many options for the layout
+of this grob. They are selected through the @code{style} grob
+property. See @file{input/test/time.ly} for examples.
 
 @c .   {Partial}
 @subsection Partial
@@ -660,7 +662,7 @@ documentation.
 @cindex repeatCommands
 @cindex defaultBarType
 
-Bar lines are created by the @code{Bar_line_engraver}. That engraver examines
+Bar lines are created by the @code{Bar_engraver}. That engraver examines
 @code{whichBar} at every moment. Whenever it is set to a string, it will
 create a bar with that type.  @code{whichBar} is usually set
 automatically: at the start of a measure it is set to
@@ -671,6 +673,7 @@ override default measure bars.
 @code{\bar ; }.  These settings take precedence over automatic @code{whichBar}
 settings. 
 
+@code{Bar_engraver} creates @code{BarLine} grobs.
 
 @c .   {Polyphony}
 @node Polyphony
@@ -704,7 +707,7 @@ in @code{NoteColumn}).
          \shiftOnn \stemUp ais
        }
        \context Voice=four {
-         \shiftOnnn \stemUp fis-2
+         \shiftOnnn \stemUp fis
        }
   >
 @end lilypond
@@ -720,7 +723,6 @@ correct manner.
   \context Voice = VC { \voiceTwo fis4~  fis4 f ~ f  } >
 @end lilypond
 
-
 LilyPond also vertically shifts rests that are opposite of a stem. 
 
 @lilypond[singleline,verbatim]
@@ -745,8 +747,6 @@ handles a few situations. When it can not cope, you are advised to use
 @code{force-hshift} of the NoteColumn grob and @code{staff-position} of
 the Rest grob to override typesetting decisions.
 
-[TODO: doc merge-differently-dotted]
-
 @node Beaming
 @section Beaming
 
@@ -884,9 +884,11 @@ control the number of beams through the properties
 @end lilypond
 @cindex @code{stemRightBeamCount}
 
-The beam symbol can be tweaked through @code{Voice.Beam}'s
-grob-properties @code{height} and @code{staff-position},
-in staff-spaces.
+The beam symbol (grob @code{Voice.Beam}, both for automatic and manual
+beams) can be tweaked through grob-properties @code{height} and
+@code{staff-position}, which are both measured  staff-spaces.
+
+[TODO: check: halfspaces?]
 
 Set @code{height} to zero, to get horizontal beams:
 
@@ -934,9 +936,6 @@ possible.  In some instances involving beams slurs may be attached to a
 stem end.  If you want to override this layout you can do this through
 @code{Voice.Slur}'s grob-property @code{attachment}:
 
-Maybe reinclude other slur features and move back to tricks?  Esp. the
-second example, how to fix, can be very helpful.
-
 @lilypond[fragment,relative,verbatim]
   \property Voice.Slur \set #'direction = #1
   \property Voice.Stem \set #'length = #5.5
@@ -1037,7 +1036,8 @@ output with 76 quarter notes per minute.
 @refbugs
   
 The tempo setting is not printed, but is currently only used in the MIDI
-output.
+output. You can trick lily into producing a metronome mark,
+though. Details   are in @ref{Text markup}.
   
 
 
@@ -1169,6 +1169,7 @@ helpful identifier definitions appear in @file{script.ly}.
 
 For information on how to add scripts, consult @file{scm/script.scm}.
 
+Grobs for these objects are @code{Script} and @code{Fingering}.
 
 @refbugs
 
@@ -1297,8 +1298,8 @@ also be implemented.
 
 @cindex @code{\glissando}
 
-A glissando line can be requested by attaching a @code{\glissando} to a
-note:
+A glissando line (grob @code{Voice.Glissando}) can be requested by attaching a
+@code{\glissando} to a note:
 
 @lilypond[fragment,relative,verbatim]
   c'' \glissando c'
@@ -1385,6 +1386,10 @@ is an example how to do it:
 @end lilypond
 
 
+Dynamics are grobs of @code{Voice.DynamicText} and
+@code{Voice.Hairpin}. They are put together on
+@code{Voice.DynamicLineSpanner} to align them vertically.
+
 
 @c .  {Repeats}
 @node Repeats
@@ -1459,10 +1464,8 @@ With alternative endings:
   \alternative { {d'2 d'} {f' f} }
 @end lilypond
 
-Folded repeats look like this:@footnote{Folded repeats offer little
-more over simultaneous music.  However, it is to be expected that
-more functionality -- especially for the MIDI backend -- will be
-implemented at some point in the future.}
+Folded repeats look like this:
+
 
 @lilypond[fragment,verbatim]
   c'1
@@ -1496,6 +1499,10 @@ after 1.4.
 It is possible to nest @code{\repeat}, although it probably is only
 meaningful for unfolded repeats.
 
+Folded repeats offer little more over simultaneous music.  However, it
+is to be expected that more functionality -- especially for the MIDI
+backend -- will be implemented at some point in the future.
+
 @node Manual repeat commands
 @subsection Manual repeat commands
 
@@ -1525,6 +1532,8 @@ command can be
 @end lilypond
 
 
+Repeats brackets are @code{Staff.VoltaBracket} grobs.
+
 @node Tremolo repeats
 @subsection Tremolo repeats
 @cindex tremolo beams
@@ -1542,6 +1551,9 @@ style.
 }
 @end lilypond
 
+Tremolo beams are @code{Voice.Beam} grobs. Single stem tremolos are
+@code{Voice.StemTremolo}.
+
 @refbugs
 
 
@@ -1586,9 +1598,12 @@ printed once, and then the pattern is replaced with a special sign.
 }
 @end lilypond
 
+The signs are represented by these grobs: @code{Voice.RepeatSlash} and
+@code{Voice.PercentRepeat} and @code{Voice.DoublePercentRepeat}.
+
 @refbugs
 
-You can not nest percent repeats, filling in the first measure with
+You can not nest percent repeats, e.g. filling in the first measure with
 slashes, and repeating that measure with percents.
 
 @node Rhythmic music
@@ -1743,12 +1758,13 @@ to the chords in both staffs, and set
   >  
 @end lilypond
 
-This command creates @code{Arpeggio} grobs. 
+This command creates @code{Voice.Arpeggio} grobs.  Cross staff arpeggios
+are @code{PianoStaff.Arpeggio}.
 
 @refbugs
 
- It is not possible to mix
-connected arpeggios and unconnected arpeggios at the same time.
+It is not possible to mix connected arpeggios and unconnected arpeggios
+at the same time.
 
 
 @c .    {VoiceFollower}
@@ -1777,6 +1793,7 @@ can be printed automatically. This is enabled if the property
   >  
 @end lilypond
 
+The associated grob is @code{Voice.VoiceFollower}.
 
 @c . {Lyrics}
 @node Lyrics
@@ -1846,6 +1863,8 @@ interpreted as melismata. Lyric syllables must be interpreted within a
        share the so -- ftware; }
 @end lilypond
 
+The Lyric syllables are @code{LyricsVoice.LyricSyllable} grobs.
+
 @cindex extender
 @cindex lyric extender
 @cindex melisma
@@ -1854,6 +1873,8 @@ As you can see, extender lines are entered as @code{__}.  This will
 create an extender, a line that extends over the entire duration of the
 lyric.  This line will run all the way to the start of the next lyric,
 so you may want to shorten it by using a blank lyric (using @code{_}).
+The grob for this symbol is @code{LyricsVoice.LyricExtender}.
+
 
 @cindex hyphen
 
@@ -1862,6 +1883,7 @@ attached to the end of the first syllable) you can use the special
 `@code{-}@code{-}' lyric as a separate word between syllables.  This
 will result in a hyphen which length varies depending on the space
 between syllables, and which will be centered between the syllables. 
+The grob for this symbol is @code{LyricsVoice.LyricHyphen}.
 
 @cindex Lyric hyphen
 
@@ -2595,7 +2617,8 @@ grob property.
 * What to tune?::               
 * Font selection::              
 * Text markup::                 
-* Embedded @TeX{}::             
+* Invisible grobs::             
+* Embedded TeX::                
 @end menu
 
 @node Tuning groups of grobs 
@@ -2616,6 +2639,8 @@ the Stem object. One of the effects is that property specifying how it
 should be printed is erased, with the effect of rendering it invisible.
 The above assignment is available as a standard identifier, lest you
 find this useful:
+
+@c FIXME: doesn't work well for eg StaffSymbol
 @example
   \property Voice.Stem = \turnOff
 @end example
@@ -2948,7 +2973,8 @@ horizontal mode: set all text on one line (default)
 It is possible to use @TeX{} commands in the strings, but this should be
 avoided because this makes it impossible for LilyPond to compute the
 exact length of the string, which may lead to collisions.  Also, @TeX{}
-commands won't work with direct postscript output.
+commands won't work with direct PostScript output (see @ref{PostScript
+output}).
 
 @cindex metronome mark
 
@@ -2977,15 +3003,95 @@ marking:
 }
 @end lilypond
 
-@node Embedded @TeX{}
-@subsection Embeded @TeX{}
+@node Invisible grobs
+@subsection Invisible grobs
+@cindex invisible grobs
+
+You can imagine a number of situtations where you would want to make
+certain grobs not show up in the output.  There may be aesthetic
+reasons, to make the output resemble an (old) manuscript as close as
+possible, or to make lessons or exercises for students.
+
+Grobs can be made invisible in a number of ways:
+
+@ignore
+FIXME
+
+Move \turnOff feature here and explain why it doesn't work for eg
+StaffSymbol
+
+Show molecule-callback override
+   StaffSymbol \override #'molecule-callback = #(lambda (x) '())
+
+Show visibility-lambda and explain why it doesn't work for eg
+StaffSymbol
+@end ignore
+
+Here's an example with blanked-out notes and stems:
+@lilypond[singleline,verbatim]
+blanknotes = {
+  \property Voice.NoteHead \override
+    #'molecule-callback = #(lambda (x) '())
+  \property Voice.Stem \override
+    #'molecule-callback = #(lambda (x) '()) }
+  
+unblanknotes = {
+  \property Voice.NoteHead \revert #'molecule-callback
+  \property Voice.Stem \revert #'molecule-callback }
+
+\score {
+  \notes\relative c'' {
+    \time 6/4;
+    a b c b \blanknotes c \unblanknotes d
+  }
+}
+@end lilypond                
+
+Some grobs require a special treatment.
+
+Rhythm exercise: make staff invisible and squash pitches:
+@lilypond[singleline,verbatim]
+\score {
+  \notes { \time 3/4; c4 c c8 c | c4 c c8 c }
+  \paper {
+    \translator {
+      \StaffContext
+      \remove Staff_symbol_engraver;
+      \consists Pitch_squash_engraver;
+      \remove Clef_engraver;
+    }
+  }
+}
+@end lilypond
+
+Some modern music does not show bar lines:
+@lilypond[singleline,verbatim]
+\score {
+  \notes \relative c'' {
+    a b c d
+    d c b a
+  }
+  \paper {
+    \translator {
+      \StaffContext
+      whichBar = #""
+      \remove "Time_signature_engraver";
+    }
+  }
+}
+@end lilypond
+
+
+@node Embedded TeX
+@subsection Embeded TeX
 @cindex embedded tex
 @cindex embedded tex
 
 You can use @TeX{} commands in text scripts, but this should be avoided
 because this makes it impossible for LilyPond to compute the exact
 length of the string, which may lead to collisions.  Also, @TeX{}
-commands won't work with direct PostScript output.
+commands won't work with direct PostScript output (see @ref{PostScript
+output}).
 
 @lilypond[fragment,relative,verbatim]
   a''^"3 $\\times$ \\`a deux"
@@ -3231,8 +3337,159 @@ direct control of LilyPond.  However, you can insert a commands into the
 details, see the example file @file{input/test/between-systems.ly}
 
 
+@c . {Output formats}
+@node Output formats
+@section Output formats
+
+LilyPond can output processed music in different output formats.  
+
+@menu
+* TeX output::                  
+* PostScript output::           
+* Scheme output::               
+* ASCIIScript output::          
+@end menu
+
+@node TeX output
+@subsection TeX output
+@cindex TeX output
+
+LilyPond will use @TeX{} by default.  Even if you want to produce
+PostScript output for viewing or printing, you should normally have
+LilyPond produce @TeX{} first.  The .tex output must be processed by
+@TeX{} (@strong{not} La@TeX{}) to generate a .dvi.  Then, @file{Dvips}
+is used to generate PostScript.  Alternatively, @file{ly2dvi} can be
+used to generate the .dvi for you.
+
+
+@node PostScript output
+@subsection PostScript output
+@cindex PostScript output
+@cindex direct PostScript output
+
+LilyPond can produce PostScript directly, without going through @TeX{}.
+Currently, this is mainly useful if you cannot use TeX, because direct
+PostScript output has some problems; see Bugs below.
+
+@example
+$ lilypond -fps foo.ly
+GNU LilyPond 1.3.144
+Now processing: `foo.ly'
+Parsing...
+Interpreting music...[3]
+Preprocessing elements... 
+Calculating column positions... 
+paper output to foo.ps...
+
+$ cat /usr/share/lilypond/pfa/feta20.pfa foo.ps | lpr
+@end example
+
+
+@refbugs
+
+Text font selection is broken.
+
+The .ps file does not contain the .pfa font files.  To print a .ps
+created through direct postscript output, you should prepend the
+necessary .pfa files to LilyPond's .ps output, or upload them to the
+printer before printing.
+
+Titling is not generated.  FIXME: adding titling should not be too
+difficult.
+
+
+@node Scheme output
+@subsection Scheme output
+@cindex Scheme output
+
+[TODO]
+
+@example
+$ lilypond -fscm foo.ly
+GNU LilyPond 1.3.144
+Now processing: `foo.ly'
+Parsing...
+Interpreting music...[3]
+Preprocessing elements... 
+Calculating column positions... 
+paper output to foo.scm...
+
+$ head -4 foo.scm 
+;;; Usage: guile -s x.scm > x.tex
+ (primitive-load-path 'standalone.scm)
+; (scm-tex-output)
+ (scm-ps-output)
+
+$ guile -s foo.scm > foo.tex
+@end example
+
+
+@node ASCIIScript output
+@subsection ASCIIScript output
+@cindex ASCIIScript output
+@cindex ascii script
+@cindex ascii art
+
+LilyPond can output ASCII Art.  This is a two step process, LilyPond
+produces an ASCII description file, dubbed ASCIIScript (extension
+@file{.as}).  ASCIIScript has a small and simple command set that
+includes font selection, character and string printing and line drawing
+commands.  The program @file{as2text} is used to translate an .as file
+to text.
+
+To produce ASCII Art, you must include an ASCII Art paper definition
+file in your .ly, one of:
+@example
+\include "paper-as5.ly"
+\include "paper-as9.ly"
+@end example
+
+Here's an example use for ASCII Art output (the example file
+@file{as-email.ly} is included in the LilyPond distribution), the staff
+symbol has been made invisible:
+
+@example
+To: bug-gnu-music@@gnu.org
+Subject: LilyPond-1.3.144 beaming broken in 5/8 time
+Gcc: nnml:sent
+--------
+Hi List,
+
+Subject says it all.
+
+$ lilypond -fas as-email.ly
+GNU LilyPond 1.3.144
+Now processing: `as-email.ly'
+Parsing...
+Interpreting music...[3]
+Preprocessing elements... 
+Calculating column positions... [2]
+paper output to as-email.as...
+
+$ as2text as-email.as 2>/dev/null
+          |\
+          |/     |##|##|      |  |  |  |  |
+         /|      |  |  | |    |\ |\ |\ |\ |\ |
+        / |_  3  |  |  | | 5  | )| )| )| )| )|
+       | /| \ 8 *  *  *  | 8 *  *  *  *  *   |
+        \_|_/            |                   |
+        *_|
+
+                                               lily
+@end example
+
+
+@refbugs
+
+The ASCII Art fonts are far from complete and not very well designed.
+It's easy to change the glyphs, though; if you think you can do better,
+have a look at @file{mf/*.af}.
 
+Lots of resizable symbols such as slurs, ties, tuplets are missing.
 
+The poor looks of most ASCII Art output and its limited general
+usefulness make that ASCII Art output has a low priority; it may be
+dropped in future versions.
 
 @c . {Sound}
 @node Sound
@@ -3441,9 +3698,9 @@ Xdvi} version 22.36 or newer.
 @item emacs
 @end itemize
 
-Add one these lines to the top of your .ly file. The first one is for
+Add one of these lines to the top of your .ly file. The first one is for
 line location only. The second one is more convenient, but requires
-patching @code{emacsclient}.
+patching @code{emacsclient} and @code{server.el}.
 
 @example
 #(set! point-and-click line-location)
@@ -3470,9 +3727,13 @@ init file, before invoking server-start.
 
 
 Xdvi must be configured to use the emacs editor.  Before starting, set
-the environment variable @code{XEDITOR} to
+the environment variable @code{XEDITOR} to one of these strings.  The
+second one, that also specifies the column, only works if you have
+patched your emacsclient and server, and have compiled your @code{.ly}
+file using the @code{line-column-location} setting (see above).
 @example
-emacsclient --no-wait +%c:%l %f
+emacsclient --no-wait +%l %f
+emacsclient --no-wait +%l:%c %f
 @end example
 Xdvi also must be configured to find the fonts. Refer to the
 xdvi documentation for more information.
@@ -3486,6 +3747,9 @@ When you convert the TeX file to PostScript using dvips, dvips
 will complain about not finding @code{src:X:Y} files. Those complaints are
 harmless, and can be ignored.
 
+When using @code{line-colum-location}, the cursor will be one off; it
+will not jump to the exact note that you clicked, but to the next one.
+We hope to fix this before 1.4.
 
 @node Skipping corrected music
 @section Skipping corrected music
@@ -4203,8 +4467,7 @@ A mode switch is entered as a compound music expressions
 In each of these cases, these expressions do not add anything to the
 meaning of their arguments.  They are just a way to indicate that the
 arguments should be parsed in indicated mode.  The modes are treated in
-more detail in the @ref{Note entry}, @ref{Lyrics} and
-@ref{Chords}.
+more detail in @ref{Lyrics} and @ref{Chords}.
 
 You may nest different input modes.
 
index b0dd10d42d6005a39f6ba31fe22ca70f10c4ecad..4f14ac7c4028604264f740f2c3fab077c107234d 100644 (file)
@@ -3,22 +3,6 @@
 @node Tutorial
 @chapter Tutorial
 
-@menu
-* Introduction::                
-* Running LilyPond::            Getting started
-* The first tune::              The first tune
-* Lyrics and chords::           Lyrics and chords
-* More movements ::             
-* A piano excerpt::             Piano music
-* An orchestral score::         
-* Part extraction::             
-* Latex and texinfo integration::  
-* end of tutorial::             The end
-* Pre-cooked makefile::         
-@end menu
-
-@node Introduction
-@section Introduction
 
   
 LilyPond prints music from a specification that you, the user, supply.
@@ -33,17 +17,32 @@ consult the glossary that is distributed with LilyPond.
 @cindex examples, tutorial
 
 The examples discussed are included in the distribution, in the
-subdirectory @file{input/tutorial/}.@footnote{When we refer
+subdirectory @file{input/tutorial/}@footnote{When we refer
 to filenames, they are relative to the top directory of the source
 package.
 @cindex file names
 }. We recommend that you experiment with writing Lilypond input
 yourself, to get a feel for how the program behaves.
 
+@menu
+* Running LilyPond::            Getting started
+* The first tune::              The first tune
+* Lyrics and chords::           Lyrics and chords
+* More movements ::             
+* A piano excerpt::             Piano music
+* An orchestral score::         
+* Part extraction::             
+* Latex and texinfo integration::  
+* end of tutorial::             The end
+@end menu
+
 
 @node Running LilyPond
 @section Running LilyPond
 
+
+[describe all programs involved in one list.]
+
 Before we dive into describing the input language of LilyPond, we first
 show you through the procedure for getting notes on your screen and out
 of your printer.
@@ -175,16 +174,17 @@ You have to set some environment variables to view or print this
 output. More information can be found in the @ref{Invoking
 LilyPond}.
 
-Finally, there is a script called lilypond-book, that allows you to
-freely mix LilyPond input with Texinfo or LaTeX input. For example, this
-manual was written using lilypond-book. lilypond-book is discussed in
+Finally, there is a script called @code{lilypond-book}, that allows you
+to freely mix LilyPond input with Texinfo or LaTeX input. For example,
+this manual was written using @code{lilypond-book}. It is discussed in
 @ref{lilypond-book}.
 
 @unnumberedsubsec Windows
 
-[TODO]
+@strong{[TODO]}
 
 * setting of env vars (TFMINPUTS,MFINPUTS,TEXINPUTS)
+
 * dvi viewer doesn't display postscript
 
 
@@ -252,8 +252,8 @@ by @code{%@{} and @code{%@}}
 @cindex point, printer's
 @cindex staff size setting 
 By default, LilyPond will use definitions for a staff that is 20
-point@footnote {A point is the standard measure of length for printing;
-one point is 1/72.27 inch. [TODO: mm vs. pt]} high.  We want smaller
+point@footnote{A point is the standard measure of length for printing;
+one point is 1/72.27 inch.} high.  We want smaller
 output (16 point staff height), so we must import the settings for that
 size, which is done here.
 @example 
@@ -261,9 +261,8 @@ size, which is done here.
         \score @{
  
 @end example 
-A lilypond file combines music with directions for outputting that
-music.  The music is combined with the output directions by putting
-them into a @code{\score} block.
+Music is printed by combining a chunk of music with directions for
+outputting it.  This combination is formed in the @code{\score} block.
 @example 
 
         \notes                
@@ -290,7 +289,7 @@ For pitches in a long piece you might have to type many quotes. It is
 easy to make typing errors with this, so LilyPond has a special entry
 mode to remedy this.  In this ``relative'' octave mode, octaves of notes
 without quotes are chosen such that a note is as close as possible
-(graphically, on the staff) to the the preceding note.  If you add a
+(graphically, on the staff) to the preceding note.  If you add a
 high-quote an extra octave is added.  The lowered quote (a comma) will
 subtract an extra octave.  Because the first note has no predecessor,
 you have to give the (absolute) pitch of the note to start with.
@@ -310,8 +309,8 @@ notes that are to be played and printed after each other.
 @cindex time signature, setting
 @cindex @code{\time}
   This command changes the time signature of the current piece: a 3/4
-sign is printed.  This command is also used to generate bar lines in
-the right spots.
+sign is printed.  The time signature setting is also used to generate
+bar lines in the right spots.
 @example 
 
         \key g \major;
@@ -347,8 +346,8 @@ just leave off @code{\sequential}, and the result is the same.
 @end example 
  This is a note with pitch @code{d} (determined up to octaves).  The
 relative music was started with a @code{c''}, so the real pitch of this
-note is @code{d''}.  The @code{4} designates the duration of the note
-(it is a quarter note).
+note is @code{d''}.  A number designates the duration of the note, so
+the @code{4} here represents a quarter note.
 @example 
 
         a b
@@ -356,7 +355,7 @@ note is @code{d''}.  The @code{4} designates the duration of the note
 @end example 
 These are notes with pitch @code{a} and @code{b}.  Because their
 duration is the same as the @code{g}, there is no need to enter the
-duration (You may enter it anyway, e.g. @code{a4 b4})
+duration, but you may enter it anyway, i.e., @code{a4 b4}
 @example 
 
         d4 g, g |
@@ -406,8 +405,7 @@ Automatic beaming can be overridden by inserting beam marks
 @end example
 @cindex augmentation dot
 @cindex dot
-A duration with augmentation dot  is notated
-with the duration number followed by a period.
+A period adds an augmentation dot to the note.
 @example 
 
         @}
@@ -446,10 +444,10 @@ Rests are denoted by the special notename @code{r}.
  
 @end example 
  All articulations have a verbose form, like @code{\fermata}.  The
-command @code{\fermata} is not part of the core of the language (most
-of the other discussed elements are), but it is a shorthand for a more
-complicated description of a fermata.  @code{\fermata} names that
-description and is therefore called an identifier.
+command @code{\fermata} is not part of the core of the language, but it
+is a shorthand for a more complicated description of a fermata symbol.
+@code{\fermata} names that description and is therefore called an
+identifier.
 @cindex identifier
 @cindex @code{\fermata}
 @example 
@@ -490,7 +488,7 @@ included as @file{flowing.ly}.
 @example 
 \header @{
         title = "The river is flowing";
-        composer = "Traditional (?)";
+        composer = "Traditional";
 @}
 \include "paper16.ly"
 melody = \notes \relative c' @{
@@ -533,7 +531,7 @@ accompaniment =\chords @{
 
 The result would look this.@footnote{The titling and font size shown
 may differ, since the titling in this document is not generated by
-@file{ly2dvi}.}
+@code{ly2dvi}.}
 
 @center @strong{The river is flowing}
 @center Traditional 
@@ -541,7 +539,7 @@ may differ, since the titling in this document is not generated by
 @lilypond[center]
 \header {
         title = "The river is flowing";
-        composer = "Traditional (?)";
+        composer = "Traditional";
 }
 \include "paper16.ly"
 melody = \notes \relative c' {
@@ -643,7 +641,7 @@ The key is C minor: we have three flats.
 
 @cindex manual beaming
 @cindex automatic beaming, turning off
-We use explicit beaming.  Since this is a song,  we will turn automatic
+We use explicit beaming.  Since this is a song,  we turn automatic
 beams off, and use explicit beaming where needed.
 @example 
 
@@ -676,9 +674,9 @@ is a shorthand for @code{\sequential @{}.
 @cindex hyphens, lyric 
 The syllables  themselves are  separated by spaces.  You can get syllable
 extenders by entering @code{__}, and centered hyphens with
-`@code{-}@code{-}'.  We enter the syllables as if they are all quarter notes
+@code{-}@code{-}.  We enter the syllables as if they are all quarter notes
 in length (hence the @code{4}), and use a feature to align the
-syllables to the music (which obviously isn't all quarter notes.)
+syllables to the music, which obviously isn't all quarter notes.
 @example 
 
         accompaniment =\chords @{
@@ -686,10 +684,10 @@ syllables to the music (which obviously isn't all quarter notes.)
 @end example
 @cindex chords
 @cindex mode, chords
-We'll put chords over the music, to enter them, there is a special mode,
-called @code{\chords}.  There is a special mode (analogous
-to @code{\lyrics} and @code{\notes} mode) where you can give the names
-of the chords you want, instead of the notes comprising the chord.
+We'll put chords over the music.  To enter them, there is a special mode
+analogous to @code{\lyrics} and @code{\notes} mode, where you can give
+the names of the chords you want, instead of the notes comprising the
+chord.
 @example 
 
         r8
@@ -749,7 +747,8 @@ accompaniment have to sound at the same time, so they should be
 Chord mode generates notes grouped in @code{\simultaneous} music.  If
 you remove the comment sign, you can see the chords in normal
 notation: they will be printed as note heads on a separate
-staff.
+staff. To print them as chords names, they have to be interpreted as
+being chords, not notes. This is done with the following command:  
 @example 
 
         \context ChordNames \accompaniment
@@ -758,26 +757,22 @@ staff.
 @cindex context
 @cindex interpretation context
 @cindex notation context
+
+
 Normally, the notes that you enter are transformed into note heads.
-The note heads alone make no sense, they need surrounding information:
-a key signature, a clef, staff lines, etc.  They need @emph{context}.  In
+Note heads alone make no sense, they need surrounding information: a key
+signature, a clef, staff lines, etc.  They need @emph{context}.  In
 LilyPond, these symbols are created by objects called `interpretation
-contexts'.  Interpretation contexts only exist during a run of
-LilyPond.  Interpretation contexts that are for printing music (as
-opposed to playing music) are called `notation contexts'.
+contexts'.  Interpretation contexts (or `Notation contexts') only exist
+during a run of LilyPond.
 
-By default, LilyPond will create a Staff context for you.  If you
-removed the @code{%} sign in the previous line, you would see that
+By default, LilyPond will create a Staff context for you.  If you would
+remove the @code{%} sign in the previous line, you would see that
 mechanism in action.
 
-We don't want that default here, because we want chord names, not note heads.
-An interpretation context can also created upon explicit request. The
-keyword for such a request is @code{\context}.  It takes two arguments.
-The first is the name of an interpretation context.  The name is a
-string, it can be quoted with double quotes).  The second argument is
-the music that should be interpreted in this context.  For the previous
-line, we could have written @code{\context Staff \accompaniment}, and
-get the same effect.
+We don't want that default here, because we want chord names.  The
+command above explicitly creates an interpretation context of 
+@code{ChordNames} type to interpret the music @code{\accompaniment}. 
 @example 
 
         \addlyrics
@@ -792,8 +787,8 @@ combining both with @code{\addlyrics}.  @code{\addlyrics} takes two
 pieces of music (usually a melody and lyrics, in that order) and
 aligns the syllables of the second piece under the notes of the
 first piece.  If you would reverse the order, the notes would be
-aligned on the lyrics, which is not very useful. (Besides, it looks
-silly.)
+aligned on the lyrics, which is not very useful, and looks
+silly.
 @example 
 
         \context Staff = mel @{
@@ -825,13 +820,18 @@ on the current staff.
 @cindex evaluating Scheme
 @cindex LISP
 
-LilyPond internally uses GUILE, a Scheme-interpreter@footnote{Scheme is
-language from the LISP family. You can learn more about Scheme at
-@uref{http://www.scheme.org}.} to represent data throughout the whole
-program. The hash-sign (@code{#}) accesses GUILE directly: the code
-following the hash-sign is evaluated as Scheme.  The boolean value
+LilyPond internally uses GUILE, a Scheme-interpreter. Scheme is a
+language from the LISP family. You can learn more about Scheme at
+@uref{http://www.scheme.org}. It is used to represent data throughout
+the whole program. The hash-sign (@code{#}) accesses GUILE directly: the
+code following the hash-sign is evaluated as Scheme.  The boolean value
 @var{true} is @code{#t} in Scheme, so for LilyPond @var{true} looks like
-@code{##t}
+@code{##t}.
+
+If Scheme scares you, don't worry. You don't need to know Scheme to
+create beautiful sheet music.
+
+
 
 @example 
 
@@ -874,11 +874,15 @@ This ends @code{\simultaneous}.
         \midi  @{ \tempo 4=72;@}
  
 @end example 
-This makes the music go to a MIDI file.  MIDI is great for checking
-music you enter.  You listen to the MIDI file: if you hear something
-unexpected, it's probably a typing error.  @code{\midi} starts an output
-definition, a declaration that specifies how to output music analogous
-to @code{\paper @{ @}}. You can specify the tempo using the
+MIDI (Musical Instrument Digitial Interface) is a standard for
+connecting and recording digital instruments. So a MIDI file is like a
+tape recording of an instrument. The @code{\midi} block causes makes the
+music go to a MIDI file, so you can listen to the music you entered.  It
+is great for checking the music.  Whenever you hear something weird, you
+probably hear a typing error.
+
+Syntactally, @code{\midi} is similar to @code{\paper @{ @}}, since it
+also specifies an output method. You can specify the tempo using the
 @code{\tempo} command, in this case the tempo of quarter notes is set to
 72 beats per minute.
 @example 
@@ -888,12 +892,6 @@ to @code{\paper @{ @}}. You can specify the tempo using the
 @end example 
 We also want notation output.  The linewidth is short so the piece
 will be set in two lines.
-@example 
-
-        @}
-@end example 
-End the score block.
 
 @node More movements 
 @section More movements
@@ -909,7 +907,7 @@ The first thing it does, is running LilyPond on the input file. After
 some calculations, a @file{.tex} is produced. The contents
 of this file are very  low-level instructions.
 
-For example,  the following file (@file{layout.ly}) 
+For example,  the following file (@file{minatures.ly}) 
 
 @example
   \version "1.3.124";
@@ -933,8 +931,9 @@ For example,  the following file (@file{layout.ly})
         piece = "Down"; @}
   @}
 @end example
- results in something like this@footnote{The titling in this manual was
-not generated by ly2dvi, so details will differ.}
+
+The titling in this manual was not generated by ly2dvi, so we can't
+exactly show it would look, but the result should resemble this:
 
 @center @strong{Two miniatures}
 @flushright
@@ -965,8 +964,8 @@ Opus 2.
 @end lilypond
 
 This file is produced by ly2dvi in a few stages, with the help of text
-formatting tools. LilyPond produces two output files, @file{layout.tex}
-and @file{layout-1.tex}.  They both look like this:
+formatting tools. LilyPond produces two output files, @file{miniatures.tex}
+and @file{miniatures-1.tex}.  They both look like this:
 
 @example
         ...
@@ -979,18 +978,17 @@ and @file{layout-1.tex}.  They both look like this:
         ...
 @end example
 
-@file{ly2dvi} analyses the progress indication that LilyPond spews out,
-and generates a file called @file{layout_ly1.tex}. This file contains
-formatting instructions for the title and page layout.  A fragment might
-look like
+@file{ly2dvi} looks at what output LilyPond produces, and generates a
+file called @file{ly2dvi.out.tex}. This file contains formatting
+instructions for the title and page layout.  A fragment might look like
+
 @example
 
-        \geometry@{width=540.602362pt,headheight=2mm, ...
-        \renewcommand@{\@@oddfoot@}@{\parbox@{\textwidth@}@{\mbox@{@}   ...
-        \begin@{document@}
-        \lilypondtitle@{foo@}%
-        \makelilytitle
-        \input@{ly2dvi.tex@}
+        \def\lilypondopus@{Opus 1.@}
+        \def\lilypondpiece@{Up@}
+        \def\mustmakelilypondtitle@{@}
+        \input miniatures.tex
+        \def\lilypondtitle@{Two miniatures@}
 
 @end example
 
@@ -998,7 +996,7 @@ look like
 built on top of @TeX{}. It's very popular in the academic world. If LaTeX
 is successful, this will produce a @file{.dvi} file, containing both the
 titling and notes.  @code{ly2dvi} completes its task by deleting the two
-temporary files, leaving only @file{layout.dvi}.
+temporary files, leaving only @file{miniatures.dvi}.
 
 Next, now we'll look at the examples line by line to explain new things.
 
@@ -1025,20 +1023,15 @@ This sets the titling information for the entire file.
 @end example
 
 This is Scheme code. It sets the variable @code{point-and-click} to the
-value @var{true}
+value @var{line-column-location} (which itself is a Scheme procedure)
 
 Editing input files can be quite complicated if you're working with
 large files: if you're digitizing existing music, you have to
 synchronize the .ly file, the sheet music on your lap and the sheet
 music on the screen.  The point-and-click mechanism makes it easy to
-find the origin of an error in the .ly file: @footnote{This feature is
-presently only available on X-windows using patched versions of Xdvi and
-emacs} when you view the file with Xdvi and click on a note using
-control-mousebutton 1@footnote{If you're using a patched xdvik, the
-command is control-mousebutton-2}, your editor will jump to the spot
-where that note was entered.
-
-More information is in in @ref{Point and click} 
+find the origin of an error in the .ly file: when you view the file with
+Xdvi and click on a note , your editor will jump to the spot where that
+note was entered. More information is in in @ref{Point and click}
 
 @example
   \paper @{ 
@@ -1069,9 +1062,10 @@ little space, a longer phrase more space.
 In previous examples, notes were specified in relative octaves,
 i.e. each note was put in the octave that would put it closest to its
 predecessor. Besides relative, there is also absolute octave
-specification, and it is turned on by default. In this input mode, the
-central C is denoted by @code{c'}. Going down, you get @code{c}
-@code{c,} @code{c,,} etc.  Going up, you get @code{c''} @code{c'''} etc.
+specification, which you get when you don't specify @code{\relative}. In
+this input mode, the central C is denoted by @code{c'}. Going down, you
+get @code{c} @code{c,} @code{c,,} etc.  Going up, you get @code{c''}
+@code{c'''} etc.
 
 When you're copying music from existing sheet music, relative octaves
 are probably the easiest to use: it's less typing work and errors are
@@ -1086,10 +1080,10 @@ easily spotted. However, if you write LilyPond input, either by hand
 The @code{\header} is normally at the top of the file, where it sets
 values for the rest of the file. If you want to typeset different pieces
 from one file (for example, if there are multiple movements, or if
-you're making a etude-book), you can put different @code{\score} blocks
-into the input file. ly2dvi will assemble all LilyPond output files into
-a big document. The contents of \header blocks specified within each
-score, are used for the titling of each movement.
+you're making a excercise book), you can put different @code{\score}
+blocks into the input file. ly2dvi will assemble all LilyPond output
+files into a big document. The contents of \header blocks specified
+within each score, are used for the titling of each movement.
 @example
         opus = "Opus 1.";
         piece = "Up"; @}
@@ -1115,57 +1109,57 @@ stemUp = \property Voice.Stem \override #'direction = #1
 stemBoth = \property Voice.Stem \revert #'direction  
 
 viola = \notes \relative c' \context Voice = viola {
-       <c4-\f-\arpeggio g' c>
-       \stemDown g'8. b,16
-       s1 s2. r4
-       g
+        <c4-\f-\arpeggio g' c>
+        \stemDown g'8. b,16
+        s1 s2. r4
+        g
 }
 
 oboes = \notes \relative c'' \context Voice = oboe {
-       \stemUp s4  g8. b,16 c8 r <e'8.^\p g> <f16 a>
-       \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
-       <
-         { \times 2/3 { a8 g c } \! c2 }
-         \context Voice = oboeTwo {
-               \stemDown
-               \grace {
-                 \property Grace.Stem \override #'direction = #-1
-                 [f,16 g] }
-               f8 e e2
-       } >
-       \stemBoth
-       \grace <c,8( e> <)b8. d8.-\trill> <c16 e> | 
-       [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r  |
-       [<c16( e>  < )e8. g>] <c8 e,>
+        \stemUp s4  g8. b,16 c8 r <e'8.^\p g> <f16 a>
+        \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
+        <
+          { \times 2/3 { a8 g c } \! c2 }
+          \context Voice = oboeTwo {
+               \stemDown
+               \grace {
+                 \property Grace.Stem \override #'direction = #-1
+                 [f,16 g] }
+               f8 e e2
+        } >
+        \stemBoth
+        \grace <c,8( e> <)b8. d8.-\trill> <c16 e> | 
+        [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r  |
+        [<c16( e>  < )e8. g>] <c8 e,>
 }
 
 hoomPah  =  \repeat unfold 8
   \notes  \transpose c' { \stemUp c8 \stemBoth \stemDown c'8  \stemBoth  }
 
 bassvoices = \notes \relative c' {
-       c4 g8. b,16
-       \autochange Staff \hoomPah
-       \translator Staff = down
-       \stemDown [c8 c'8] r4
-       <g d'> r4
-       < {\stemUp r2 <e4 c'> <c8 g'> }
-         \context Voice = reallyLow  {\stemDown g2 ~ | g4 c8 } >
+        c4 g8. b,16
+        \autochange Staff \hoomPah
+        \translator Staff = down
+        \stemDown [c8 c'8] r4
+        <g d'> r4
+        < {\stemUp r2 <e4 c'> <c8 g'> }
+          \context Voice = reallyLow  {\stemDown g2 ~ | g4 c8 } >
 }
 
 \score {
-       \context PianoStaff \notes <
-               \context Staff = up < \time 2/2;
-                       \viola
-                       \oboes
-               >
-               \context Staff = down < \time 2/2; \clef bass;
-                       \bassvoices
-               >
-       >
-       \midi { }
-       \paper {
-         indent = 0.0;
-         linewidth = 15.0 \cm; }
+        \context PianoStaff \notes <
+               \context Staff = up < \time 2/2;
+                       \viola
+                       \oboes
+               >
+               \context Staff = down < \time 2/2; \clef bass;
+                       \bassvoices
+               >
+        >
+        \midi { }
+        \paper {
+          indent = 0.0;
+          linewidth = 15.0 \cm; }
 }
 @end lilypond
 
@@ -1180,12 +1174,12 @@ As you can see, this example features more voices on one staff. To make
 room for those voices, their notes have to be stemmed in opposite
 directions. These are the commands to make that happen.
 
-The symbols that are printed, are internally represented by so-called
-Graphical Objects (or more colloquially: Grobs).  These statements
-concern the grob called `Stem'. Each grob is described by a bunch of
-settings. These setting determine the fonts, offsets, sub-routines to be
-called on the grob, etc.  The initial values of these settings are set
-in the Scheme file @file{scm/grob-description.scm}.
+Printed symbols are internally represented by so-called Graphical
+Objects (more colloquially: Grobs).  These statements concern the
+grob called `Stem'. Each grob is described by a bunch of settings. These
+setting determine the fonts, offsets, sub-routines to be called on the
+grob, etc.  The initial values of these settings are set in the Scheme
+file @file{scm/grob-description.scm}.
 
 This statement adds a the setting for all Stem grobs in the current
 Voice: @code{direction} is set to @code{-1}, which encodes down. The
@@ -1195,12 +1189,9 @@ setting remains in effect until it is reverted.
  \property Voice.Stem \revert #'direction  
 @end example
 
-This statement reverts the old setting. If you do this, the effect of a
-@code{\stemDown} or @code{\stemUp} is neutralised.
+This statement reverts the old setting. If you do this, the effect of
+precisely one @code{\stemDown} or @code{\stemUp} is neutralised.
 
-@code{\override} and @code{\revert} function like a stack: you can push
-values onto the grob-setting-stack with @code{\override} and you pop
-them with @code{\revert}.
 
 LilyPond includes the identifiers @code{\stemUp}, @code{\stemDown} along
 with some more often used formatting instructions, but to explain how it
@@ -1270,7 +1261,7 @@ these notes are indeed processed by precisely one context with
 \stemUp s4  g8. b,16 c8 r <e'8.-\p g> <f16 a> 
 @end example 
 @code{\stemUp} is a reference to the @code{\property \override} command
-defined above.   .
+defined above. 
 @example 
 \grace <e8 g> < d4 f> <c2 e> 
 @end example
@@ -1372,7 +1363,8 @@ between staffs.  Since it is repetitive, we use repeats:
 hoomPah  =  \repeat unfold 8
 @end example
 @cindex unfolded @code{\repeat}
-This repeat print the following sequence notes eight times.
+The unfolded repeat prints the notes in its argument as if they were
+written out in full.
 @example
 \notes \transpose c' @{
 @end example
@@ -1382,7 +1374,7 @@ This repeat print the following sequence notes eight times.
 Transposing can be done with @code{\transpose}.  It takes two arguments;
 the first specifies what central C should be transposed to.  The second
 is the to-be-transposed music.  As you can see, in this case, the
-transposition is a no-op, as central C stay at central C.
+transposition has no effect, as central C stay at central C.
 
 The purpose of this no-op is circumventing relative mode.  Relative mode
 can not be used together with transposition, so @code{\relative} will
@@ -1415,7 +1407,11 @@ staff switch here.
 @end example
 @cindex tie
 @cindex @code{~}
-After skipping some lines, we see @code{~}.  This mark makes ties.
+After skipping some lines, we see @code{~}.  This mark makes ties.  Note
+that ties and slurs are different things.  A tie can only connect two
+note heads of the same pitch, whereas a slur can connect many chords
+with one curve.
+
 @example 
 \context PianoStaff 
 @end example 
@@ -1444,14 +1440,15 @@ to the page layout of this document.
 @node An orchestral score
 @section An orchestral score
 
-If you've come this far, you should have seen enough LilyPond source to
-feel comfortable with an orchestral score.  We will not go through the
+[explain why declarative nature of lily makes making scores rel. easy]
+
+We will not go through the
 input line by line, but only indicate and explain the new elements.
 
 This orchestral score example consists of three input files.  In the
 first file, @file{os-music.ly}, we define the music for all instruments.
-This file is to be used by the other two files, as you will see below.
-If you run lilypond on this file, no output will be produced.
+This file will be used both for producing the score and the separate
+parts.  If you run lilypond on this file, no output will be produced.
 
 
 @example
@@ -1492,8 +1489,9 @@ corno = \notes\relative c' @{
 @end example
 
 Things to note here are the definition of @code{\global} where we define
-meter, and set the end bar.  And the separate definition of @code{\Key}
-that we will use all staffs except staffs for transposing instruments. 
+the time signature, and set the end bar.  And the separate definition of
+@code{\Key} that we will use all staffs except staffs for transposing
+instruments.
 
 The second file, @file{os-score.ly} reads the definitions of the first
 (@file{os-music.ly}), and defines the @code{\score} block for the full
@@ -1513,43 +1511,43 @@ conductor's score.
     \global
     \context StaffGroup = woodwind <
       \context Staff = flauti <
-       \property Staff.midiInstrument = #"flute"
-       \property Staff.instrument = "2 Flauti"
-       \property Staff.instr = "Fl."
+        \property Staff.midiInstrument = #"flute"
+        \property Staff.instrument = "2 Flauti"
+        \property Staff.instr = "Fl."
         \Key
-       \context Voice=one @{ \voiceOne \flautoI @}
-       \context Voice=two @{ \voiceTwo \flautoII @}
+        \context Voice=one @{ \voiceOne \flautoI @}
+        \context Voice=two @{ \voiceTwo \flautoII @}
       >
     >
     \context StaffGroup = timpani <
       \context Staff = timpani <
-       \property Staff.midiInstrument = #"timpani"
-       \property Staff.instrument = #'(lines "Timpani" "(C-G)")
-       \property Staff.instr = #"Timp."
-       \clef bass;
+        \property Staff.midiInstrument = #"timpani"
+        \property Staff.instrument = #'(lines "Timpani" "(C-G)")
+        \property Staff.instr = #"Timp."
+        \clef bass;
         \Key
-       \timpani
+        \timpani
       >
     >
     \context StaffGroup = brass <
       \context Staff = trombe <
        \property Staff.midiInstrument = #"trumpet"
-       \property Staff.instrument = #`(lines "2 Trombe" "(C)")
-       \property Staff.instr = #`(lines "Tbe." "(C)")
+        \property Staff.instrument = #`(lines "2 Trombe" "(C)")
+        \property Staff.instr = #`(lines "Tbe." "(C)")
         \Key
-       \context Voice=one \partcombine Voice
-         \context Thread=one \tromboI
-         \context Thread=two \tromboII
+        \context Voice=one \partcombine Voice
+          \context Thread=one \tromboI
+          \context Thread=two \tromboII
       >
       \context Staff = corni <
         \property Staff.midiInstrument = #"french horn"
-       \property Staff.instrument = #`(lines "Corno"
+        \property Staff.instrument = #`(lines "Corno"
           (rows "(E" ,text-flat ")"))
-       \property Staff.instr = #`(lines "Cor."
+        \property Staff.instr = #`(lines "Cor."
           (rows "(E" ,text-flat ")"))
-       \property Staff.transposing = #3
-       \notes \key bes \major;
-       \context Voice=one \corno
+        \property Staff.transposing = #3
+        \notes \key bes \major;
+        \context Voice=one \corno
       >
     >
   >
@@ -1608,6 +1606,8 @@ editing.
 #(set! point-and-click line-column-location)
 @end example
 
+[what is markup text?] 
+
 We need a flat sign in text to name the tuning of the french horn, so we
 predefine it with bit of scheme markup text (See @ref{Text markup}).
 @example
@@ -1632,15 +1632,15 @@ the two flutes, that also play simultaneously.
 We specify the intrument for MIDI output (see @ref{MIDI instrument
 names}).
 @example
-       \property Staff.midiInstrument = #"flute"
+        \property Staff.midiInstrument = #"flute"
 @end example
 
 And define the intrument names to be printed in the margin,
 @code{instrument} for the first line of the score, @code{instr} for the
 rest of the score.
 @example
-       \property Staff.instrument = "2 Flauti"
-       \property Staff.instr = "Fl."
+        \property Staff.instrument = "2 Flauti"
+        \property Staff.instr = "Fl."
 @end example
 
 The flutes play in the default key.
@@ -1655,8 +1655,8 @@ we specify manually which voice is which: @code{\voiceOne} forces the
 direction of stems, beams, slurs and ties up, @code{\voiceTwo} sets
 directions down.
 @example
-       \context Voice=one @{ \voiceOne \flautoI @}
-       \context Voice=two @{ \voiceTwo \flautoII @}
+        \context Voice=one @{ \voiceOne \flautoI @}
+        \context Voice=two @{ \voiceTwo \flautoII @}
 @end example
 
 We close the flutes staff and woodwind staff group.
@@ -1668,19 +1668,21 @@ We close the flutes staff and woodwind staff group.
 The timpani staff only shows a new piece of scheme markup, it sets two
 lines of text.
 @example
-       \property Staff.instrument = #'(lines "Timpani" "(C-G)")
+        \property Staff.instrument = #'(lines "Timpani" "(C-G)")
 @end example
 
-For the trumpets we use the automatic part combiner (see @ref{Automatic
+[what is thread, why is distinction thread/voice necessary?] 
+
+for the trumpets we use the automatic part combiner (see @ref{Automatic
 part combining}) to combine the two simultaneous trumpet parts onto the
 trumpet staff.  Each trumpet gets its own Thread context, which must be
 named @code{one} and @code{two}).  The part combiner makes these two
 threads share a Voice when they're similar, and splits the threads up
 when they're different.
 @example
-       \context Voice=one \partcombine Voice
-         \context Thread=one \tromboI
-         \context Thread=two \tromboII
+        \context Voice=one \partcombine Voice
+          \context Thread=one \tromboI
+          \context Thread=two \tromboII
 @end example
 
 The french horn has the most complex scheme markup name, made up of two
@@ -1693,13 +1695,17 @@ and the flat sign @code{text-flat} that we defined before.
 
 The french horn is to be tuned in E-flat, so we tell the MIDI backend to
 transpose this staff by three steps.
+
+[note how we can choose different tuning for entering, printing and
+playing, using \transpose and transposing.]
+
 @example
-       \property Staff.transposing = #3
+        \property Staff.transposing = #3
 @end example
 
 Therefore, it has a different key.
 @example
-       \notes \key bes \major;
+        \notes \key bes \major;
 @end example
 
 We specify a big indent for the first line and a small linewith for this
@@ -1709,9 +1715,15 @@ tuturial.
     linewidth = 60 * \staffspace;
 @end example
 
+[explain about overriding contexts.]
+
 Because we have a Thread representing one instrument, we need to move
 the @code{Rest_engraver} from Voice to Thread level.  Similarly, we need
-to move the @code{Multi_measure_rest_engraver} from Staff to Voice level.
+to move the @code{Multi_measure_rest_engraver} from Staff to Voice
+level.
+
+[todo: should put Rest_engraver in threadcontext by default.]
+
 @example
     \translator@{
       \ThreadContext
@@ -1739,6 +1751,22 @@ the automatic removing of empty staffs.
 
 We want bar numbering at score level and want to move the bar number a
 few staff spaces up.
+
+@ignore
+[note how you can use \override in \translator]
+[explain what padding is.]
+
+[note that : (ly/engraver.ly) OrchestralScoreContext is for compatibility.
+
+OrchestralScoreContext= \translator {
+       \ScoreContext
+}
+
+]
+
+@end ignore
+
+
 @example
     \translator @{
       \OrchestralScoreContext
@@ -1771,7 +1799,7 @@ second flute part.
     linewidth = 80 * \staffspace;
     textheight = 200 * \staffspace;
     \translator @{
-      \OrchestralScoreContext
+      \OrchestralScoreContext %%%%junkme
       skipBars = ##t
     @}
   @}
@@ -1820,10 +1848,16 @@ bars.
       skipBars = ##t
 @end example
 
+[Waarom moet  skipBars in \translator, waarom niet \property Score.skipBars]
+
+
+
 @node Latex and texinfo integration
 @section Latex and texinfo integration
 
 
+[TODO: rewrite completely.]
+
 @menu
 * Songs with additional verses::  
 @end menu
@@ -2063,6 +2097,11 @@ environment when you don't want La@TeX{} to do any linebreaking)
 With lilypond-book, you can typeset songs with additional verses.  To
 make lilypond-book print titles like ly2dvi, add
 
+[TODO: merge with lilypond-book tutorial]
+
+
+
+
 @example
 \input titledefs.tex
 \def\preLilypondExample@{\def\mustmakelilypondtitle@{@}@}
@@ -2112,11 +2151,14 @@ Music (TM), have a look at the @ref{Mutopia project}.
 
 
 
-[TODO figure out what to do with this: ]
+@ignore
 
+[TODO
+
+this should be on mutopia website.
+
+]
 
-@node Pre-cooked makefile
-@section Pre-cooked makefile
 
 @c waar deze info?  is uiteindelijk wel handig, schat ik.
 [TODO: cut blabla]
@@ -2145,3 +2187,5 @@ Type @samp{make help} to see possible targets.
 [TODO]
 @file{/usr/share/lilypond/doc/lilypond/examples/input/mutopia-header.ly}
 
+@end ignore
+
index 6f527fc75e7aa0089f138687ad36e1dc23c40a36..961b6bf6c0ac503f0f0492ac32fb6a81a79c86b9 100644 (file)
 
 #include "translator-group.hh"
 #include "key-item.hh"
-#include "local-key-item.hh"
 #include "bar.hh"
-#include "note-head.hh"
 #include "staff-symbol-referencer.hh"
 #include "debug.hh"
 #include "engraver.hh"
 #include "direction.hh"
 #include "side-position-interface.hh"
 #include "item.hh"
-#include "custos.hh"
 
 /// where is c-0 in the staff?
 class Clef_engraver : public  Engraver
@@ -35,7 +32,7 @@ public:
 protected:
   virtual void stop_translation_timestep ();
   virtual void start_translation_timestep ();
-  virtual void create_grobs ();
+  virtual void process_music ();
   virtual void acknowledge_grob (Grob_info);
 
 private:
@@ -112,25 +109,14 @@ Clef_engraver::set_glyph ()
 void
 Clef_engraver::acknowledge_grob (Grob_info info)
 {
-  create_grobs ();
   Item * item =dynamic_cast <Item *> (info.elem_l_);
   if (item)
     {
       if (Bar::has_interface (info.elem_l_)
          && gh_string_p (get_property ("clefGlyph")))
        create_clef ();
-      
 
-      if (Note_head::has_interface (item)
-         || Local_key_item::has_interface (item)
-         || Custos::has_interface (item)
-         )
-       {
-         int p = int (Staff_symbol_referencer::position_f (item))
-           + gh_scm2int (get_property ("centralCPosition"));
-         Staff_symbol_referencer::set_position (item, p);
-       }
-      else if (Key_item::has_interface (item))
+      if (Key_item::has_interface (item))
        {
          /*
            Key_item adapts its formatting to make sure that the
@@ -175,7 +161,7 @@ Clef_engraver::create_clef ()
 }
 
 void
-Clef_engraver::create_grobs ()
+Clef_engraver::process_music ()
 {
   SCM glyph = get_property ("clefGlyph");
   SCM clefpos = get_property ("clefPosition");
index 075e80d79298c85c35d90c4714101753527872b8..55c8c73f36a54af08bb772a1b204e312012ca63f 100644 (file)
@@ -103,9 +103,15 @@ Custos_engraver::create_grobs ()
       for (int i = pitches_.size (); i--;)
        {
          Item *c = create_custos ();
+
+         int p = pitches_[i].steps ();
+         SCM c0 = get_property ("centralCPosition");
+         if (gh_number_p (c0))
+           p += gh_scm2int (c0);
+
          
          c->set_grob_property ("staff-position",
-                              gh_int2scm (pitches_[i].steps ()));
+                               gh_int2scm (p));
          
        }
 
index 5432fd89d015cde578e568c653718983ca9a7d98..94e7980d04701022a93763183c084a986a7acb40 100644 (file)
@@ -135,8 +135,11 @@ Local_key_engraver::create_grobs ()
                  key_item_p_ = new Item (get_property ("Accidentals"));
                  Local_key_item::set_interface (key_item_p_);
 
-
+                 
                  Staff_symbol_referencer::set_interface (key_item_p_);
+                 SCM c0 = get_property ("centralCPosition");
+                 if (gh_number_p (c0))
+                   Staff_symbol_referencer::set_position (key_item_p_, gh_scm2int (c0));
                         
                  announce_grob (key_item_p_, 0);
                }
index 2d13e7a7a87b7429762531ca63472fd350416800..87a5bff3f2d5a82fbe03c311aa907eef9b08a692 100644 (file)
@@ -30,8 +30,8 @@ public:
 protected:
   virtual void start_translation_timestep ();
   virtual bool try_music (Music *req_l) ;
-  virtual void create_grobs ();
-  virtual void acknowledge_grob (Grob_info) ;
+  virtual void process_music ();
+
   virtual void stop_translation_timestep ();
 };
 
@@ -53,18 +53,10 @@ Note_heads_engraver::try_music (Music *m)
   
 }
 
-void
-Note_heads_engraver::acknowledge_grob (Grob_info)
-{
-  //create_grobs ();
-}
 
 void
-Note_heads_engraver::create_grobs ()
+Note_heads_engraver::process_music ()
 {
-  if (note_p_arr_.size ())
-    return ;
-  
   for (int i=0; i < note_req_l_arr_.size (); i++)
     {
       Item *note_p  = new Item (get_property ("NoteHead"));
@@ -94,8 +86,13 @@ Note_heads_engraver::create_grobs ()
        }
 
       Pitch *pit =unsmob_pitch (req->get_mus_property ("pitch"));
-      note_p->set_grob_property ("staff-position",  gh_int2scm (pit->steps ()));
 
+      int pos = pit->steps ();
+      SCM c0 = get_property ("centralCPosition");
+      if (gh_number_p (c0))
+       pos += gh_scm2int (c0);
+
+      note_p->set_grob_property ("staff-position",   gh_int2scm (pos));
       if (to_boolean (get_property ("easyPlay")))
        {
          char s[2] = "a";
@@ -147,8 +144,6 @@ Note_heads_engraver::start_translation_timestep ()
       else
        e->forbid_breaks ();    // guh. Use properties!
     }
-
-  
 }
 
 
index ac11ab645fb8e50e501881d1969c4a1ab5558142..7edf9e0455f6b8cebca78babbb9991834afce334 100644 (file)
@@ -52,7 +52,7 @@ the beam engraver for overriding beaming."
      "Axis_group_engraver"
      "Group all objects created in this context in a VerticalAxisGroup spanner."
      '(VerticalAxisGroup)
-     '(CONTEXTNAMEVerticalExtent CONTEXTNAMEMinimumVerticalExtent CONTEXTNAMExtraVerticalExtent)
+     '(VerticalExtent MinimumVerticalExtent ExtraVerticalExtent)
      ))
 
    (cons
@@ -348,15 +348,7 @@ If omitted, then dots appear on top of the notes.
      ""
      '(KeySignature
        )
-     '(
-      
-      keySignature
-      keyOctaviation
-      explicitKeySignatureVisibility
-      createKeyOnClefChange
-      keyAccidentalOrder
-      keySignature
-      )))
+     '( keySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature )))
 
    (cons 'Lyric_engraver
         (engraver-description
@@ -416,7 +408,7 @@ If omitted, then dots appear on top of the notes.
 measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
    "
      '(MultiMeasureRest)
-     '(
+     '(currentBarNumber currentCommandColumn measurePosition
       )))
 
    (cons