--- /dev/null
+@node Properties, , , Top
+
+@cindex properties!Lyrics
+
+@table @samp
+ @item @code{textStyle}@indexcode{textStyle}
+ Set the font for lyrics. The available font 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.
+@end table
+
+
+@cindex properties!Thread
+
+@table @samp
+ @item @code{noteheadStyle}@indexcode{noteheadStyle}
+ Selects type of note head. Choices are @code{cross},
+ @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}.
+ They are shown in that order below.
+
+ @mudela[center]
+
+ \score {
+ \notes {
+ \property Staff.barNonAuto = 1
+ \property Voice.noteHeadStyle = cross
+ a'
+ \property Voice.noteHeadStyle = diamond
+ a'
+ \property Voice.noteHeadStyle = harmonic
+ a'
+ \property Voice.noteHeadStyle = transparent
+ a'
+ \property Voice.noteHeadStyle = ""
+ a'
+ }
+ \paper {
+ linewidth = -1.;
+ }
+ }
+
+@end mudela
+@end table
+
+@subsubheading Grace properties
+
+@cindex properties!Grace
+
+
+@table @samp
+ @item @code{stemStyle}@indexcode{stemStyle}
+ By default set to @code{"grace"} meaning that all unbeamed
+ notes with flags are typeset with a slash through the flag.
+ Setting to @code{""} gives standard flags.
+@end table
+
+
+@subsubheading Voice properties
+
+@cindex properties!Voice
+
+@table @samp
+ @item @code{abbrev}@indexcode{abbrev}
+ Set length for tremolo to be used if no length is explicitly
+ specified.
+
+ @item @code{articulationScriptPadding}@indexcode{articulationScriptPadding}
+
+ Determines the extra space added between articulation marks, such
+ as staccato, tenuto, trill, up/down bow or fermata, and the
+ closest staff line or note.
+
+ @item @code{articulationScriptVerticalDirection}
+ @indexcode{articulationScriptVerticalDirection}
+ Determines the location of articulation marks. Set to @code{\up}
+ to print marks above the staff; set to @code{\down} to print marks
+ below the staff. This property does not override explicit
+ directions marked with `@code{^}' or `@code{_}' in the mudela file.
+
+ @item @code{noAutoBeaming}@indexcode{beamAuto}
+ If set to 1 then beams are not generated automatically.
+
+ @item @code{beamAutoEnd}@indexcode{beamAutoEnd}
+ Specifies when automatically generated beams can end. See
+ section XREF-autobeam [FIXME].
+
+ @item @code{beamAutoBegin}@indexcode{beamAutoBegin}
+ Specifies when automatically generated beams can start. See
+ section XREF-autobeam [FIXME].
+
+ @item @code{beamquantisation}@indexcode{beamquantisation}
+ Set to @code{\none} for no quantization. Set to @code{\normal} to
+ quantize position and slope. Set to @code{\traditional} to avoid
+ wedges. These three settings are available via
+ @code{\beamposfree}@keyindex{beamposfree},
+ @code{\beamposnormal}@keyindex{beamposnormal}, and
+ @code{\beampostraditional}@keyindex{beampostraditional}.
+
+ @item @code{beamslopedamping}@indexcode{beamslopedamping}
+ Set to @code{\none} for undamped beams. Set to @code{\normal} for
+ damped beams. Set to @code{\infinity} for beams with zero slope.
+ The identifiers
+ @code{\beamslopeproportional}@keyindex{beamslopeproportional},
+ @code{\beamslopedamped}@keyindex{beamslopedamped}, and
+ @code{\beamslopezero}@keyindex{beamslopezero} each set the
+ corresponding value.
+
+ @item @code{dynamicDirection}@indexcode{dynamicDirection}
+ 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.
+
+ @item @code{dynamicStyle}@indexcode{dynamicStyle}
+ Set the text style for dynamics.
+
+ @item @code{fontSize}@indexcode{fontSize}
+ Can be used to select smaller font sizes for music. The normal
+ font size is 0, and the two smaller sizes are -1
+ and -2.
+
+ @item @code{forceHorizontalShift}@indexcode{forceHorizontalShift}
+ Force horizontal shift for collision resolution. It overrides
+ automatic collision resolution. The value is the shift amount
+ expressed in @code{note_width}, as set in the paper section.
+
+[FIXME: this should be moved]
+
+Lilypond always arranges note heads on alternate sides of a stem (that
+is, within a single voice) as necessary to prevent collisions (note head
+overlaps). For up stems, the upper note of a colliding pair is placed
+on the right side of the stem, the lower on the left. For down stems,
+the algorithm works in reverse.
+
+Lily also attempts to prevent collisions of note heads in different
+voices. A situation where chords of two or more voices are played
+simultaneously within one staff.
+
+By default, if only two voices (and both have opposite stem directions)
+are in this 'collision group', the notes both are shifted by @code{0.5
+\quartwidth} if there are unisons or seconds between the voices.
+
+If there are more than two voices in a collision group, shifting is
+inactive by default, since in this case, there are multiple chords with
+the same stem direction. By distinguish between those chords, LilyPond
+can do collision resolution in these cases as well.
+
+Distinguishing between voices with the same stem direction, is done by
+setting the property @code{Voice.horizontalNoteShift}. It must be set
+to a different integer for each voice. Then, all note heads in collision
+groups (not just unisons and seconds) will be offset, one voice relative
+another. The following fragment of sheet music shows how shifting is
+done, with values of @code{horizontalNoteShift} printed over and under
+the notes. In this case the chords are just simple notes.
+
+@c URG : mudela book bug.
+@mudela[singleline]
+\score {
+ \notes \context Staff <
+ \context Voice = VA { \stemup f''4^"0" }
+ \context Voice = VB {\stemup
+ \property Voice.horizontalNoteShift = 1 d''4^" 1" }
+ \context Voice = VC { \stemup \property
+Voice.horizontalNoteShift = 2 b'4^" 2" }
+ \context Voice = VD { \stemdown \property
+Voice.horizontalNoteShift = 1 g'4_"1 " }
+ \context Voice = VE { \stemdown e'4_"0" }
+ >
+}
+@end mudela
+
+If you are not satisfied with the collision resolution of LilyPond, you
+can override the horizontal shift value of the chord of one Voice, by
+setting @code{forceHorizontalShift}. This sets the amount shift,
+measured in black note head widths.
+
+To take complete control of note position shifts in complex passages,
+you have set things up for normal collisions and override all shifts by
+setting @code{forceHorizontalShift} to zero everywhere
+@example
+\property Voice.horizontalNoteShift = <n>
+\property Voice.forceHorizontalShift = "0.0"
+@end example
+
+Then you can set the force property to a suitable value before each note
+that really needs it (unisons and seconds), and reset it to 0.0 after
+the note.
+
+ @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift}
+ Enable LilyPond to shift notes horizontally if they collide with
+ other notes. This is useful when typesetting many voices on one
+ staff. The identifier @code{\shift}@keyindex{shift} is defined to
+ enable this. Traditionally, the outer chords (the upmost and
+ downmost voices), should have no @code{horizontalNoteShift}.
+
+ @item @code{markScriptPadding}@indexcode{markScriptPadding}
+ Determines the extra space added between the mark and the closest
+ staff line or note.
+
+ @item @code{markDirection}@indexcode{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.
+
+ @item @code{midiInstrument}@indexcode{midiInstrument}
+ Sets the instrument for MIDI output. 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 XREF-midilist [FIXME]. If you use a string which
+ is not listed, LilyPond will silently substitute piano.
+
+ @item @code{oldTieBehavior}@indexcode{oldTieBehavior}
+ Set to 1 in order to get old tie behavior where ties would
+ connect unequal pitches. This property is deprecated, and its
+ use is not recommended.
+
+ @item @code{restStyle}@indexcode{restStyle}
+ Change the layout of rests shorter than quarter notes.
+ Currently, the standard layout @code{""} and mensural notation
+ @code{"mensural"} are available. Mensural rests of duration
+ 32 or shorter are not available.
+
+ @item @code{scriptHorizontal}@indexcode{scriptHorizontal}
+ Put scripts left or right of note heads. Support for this is
+ limited. Accidentals will collide with scripts.
+
+ @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection}
+ Set to @code{\free} for free choice of slur direction, set to
+ @code{\up} to force slurs up, set to @code{\down} to force slurs
+ down. The shorthands @code{\slurup}@keyindex{slurup},
+ @code{\slurdown}@keyindex{slurdown}, and
+ @code{\slurboth}@keyindex{slurboth} are available.
+
+ @item @code{slurDash}@indexcode{slurDash}
+ Set to 0 for normal slurs, 1 for dotted slurs, and a
+ larger value for dashed slurs. Identifiers
+ @code{\slurnormal}@keyindex{slurnormal} and
+ @code{\slurdotted}@keyindex{slurdotted} are predefined to set the
+ first two settings.
+
+@item @code{stemLength}@indexcode{stemLength}
+ Set length of stems. Unit is `@code{interline}/2', so
+ @code{stemLength} defaults to 7.
+
+ @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount}
+ Specify the number of beams to draw on the left side of the next
+ note. Overrides automatic beaming. The value is only used once,
+ and then it is erased.
+
+ @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount}
+ Specify the number of beams to draw on the right side of the next
+ note. Overrides automatic beaming. The value is only used once,
+ and then it is erased.
+ @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection}
+ 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.
+
+ @item @code{transposing}@indexcode{transposing}
+ Transpose the MIDI output. Set this property to the number of
+ half-steps to transpose by.
+
+
+ @item @code{textEmptyDimension}@indexcode{textEmptyDimension}
+ If set to 1 then text placed above or below the staff is
+ assumed to have zero width.
+
+ @item @code{textStyle}@indexcode{textStyle}
+ Set the text style for superscripts and subscripts. See above
+ for list of text styles.
+
+ @item @code{textScriptPadding}@indexcode{textScriptPadding}
+ Determines the extra space added between superscripted resp.
+ subscripted text and the closest staff line or note.
+
+ @item @code{verticalDirection}@indexcode{verticalDirection}
+ Determines the direction of stems, subscripts, beams, slurs, and
+ ties. Set to @code{\down} to force them down, @code{\up} to force
+ them up, or @code{\free} to let LilyPond decide. This can be used
+ to distinguish between voices on the same staff. The
+ @code{\stemdown}@keyindex{stemdown}, @code{\stemup}@keyindex{stemup},
+ and @code{\stemboth}@keyindex{stemboth} identifiers set this
+ property.
+
+
+ @item @code{tupletDirection}@indexcode{tupletDirection}
+ Determines the direction of triplets and other tuplets. Set to
+ @code{\down} to force them below the staff, @code{\up} to force
+ them above, or @code{\free} to let LilyPond decide.
+
+ @item @code{tupletVisibility}@indexcode{tupletVisibility}
+ Determines whether tuplets of notes are labelled. Setting
+ to 0 shows nothing; setting to 1 shows a number;
+ 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.
+
+@end table
+
+@subsubheading Staff properties
+
+@cindex properties!Staff
+
+@table @samp
+
+ @item @code{barNonAuto}@indexcode{barNonAuto}
+ If set to 1 then bar lines will not be printed
+ automatically; they must be explicitly created with @code{\bar}
+ keywords. Unlike with the @code{\cadenza} keyword, measures are
+ still counted. Bar generation will resume according to that
+ count if this property is set to zero.
+
+ @item @code{barNumberDirection}@indexcode{barNumberDirection}
+ Set to @code{\up} or @code{\down} to put bar numbers above or below
+ the staff.
+
+ @item @code{barNumberHangOnClef}@indexcode{barNumberHangOnClef}
+ Set to 1 to cause bar numbers to appear above or below the
+ clef instead of on the bar line. This property is deprecated.
+ Do not use.
+
+ @item @code{barNumberScriptPadding}@indexcode{barNumberScriptPadding}
+ Sets extra space between the bar number and the bar it labels.
+
+ @item @code{barSize}@indexcode{barSize}
+ Specify the height of the bar lines if it should be different
+ than the staff height.
+
+ @item @code{barAtLineStart}@indexcode{barAtLineStart}
+ Set to 1 to produce a bar line after the clef at the start
+ of each line (but not at the beginning of the music).
+
+ @item @code{clefStyle}@indexcode{clefStyle}
+ Determines how clefs are typeset. If set to @code{transparent},
+ the clefs are not printed at all, if set to
+ @code{fullSizeChanges}, clef changes in the middle of a line are
+ typeset with a full size clef. By default, clef changes are
+ typeset in smaller size.
+
+ @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange}
+ Set to a nonempty string if you want key signatures to be printed
+ when the clef changes. Set to the empty string if you do not
+ want key signatures printed.
+
+ @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef}
+ Specify whether clefs are created on default? (Doesn't seem to
+ do anything.)
+
+ @item @code{defaultClef}@indexcode{defaultClef}
+ Determines the default clef. See @code{\clef} keyword.
+
+ @item @code{markHangOnClef}@indexcode{markHangOnClef}
+ Set to 1 to cause marks to appear by clefs instead of by bar
+ lines. Deprecated, use is not recommended.
+
+ @item @code{marginDirection}@indexcode{marginDirection}
+ Set to @code{\left} or @code{\right} to specify location of
+ marginal scripts.
+
+ @item @code{marginScriptPadding}@indexcode{marginScriptPadding}
+ Specify extra space for marginal scripts.
+
+ @item @code{forgetAccidentals}@indexcode{forgetAccidentals}
+ Causes accidentals to be printed at every note instead of
+ remembered for the duration of a measure.
+
+ @item @code{noResetKey}@indexcode{noResetKey}
+ Do not reset the key at the start of a measure. Accidentals will
+ be printed only once and are in effect until overridden, possibly
+ many measures later.
+
+ @item @code{staffLineLeading}@indexcode{staffLineLeading}
+ Specifies the distance (in points) between lines of the staff.
+
+ @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines}
+ Specifies the number of staff lines. The default is 5.
+
+ @item @code{postBreakPadding}@indexcode{postBreakPadding}
+ Extra space in points to be added after the clef, time signature
+ and key signature on the staff. Deprecated, do not use.
+
+ @item @code{noVoltaBraces}@indexcode{noVoltaBraces}
+ Set to true to suppress the printing of brackets over alternate
+ endings specified by the command @code{\alternative}.
+
+ @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines}
+ Sets the number of lines that the staff has.
+
+ @item @code{barAlways}@indexcode{barAlways}
+ If set to 1 a bar line is drawn after each note.
+
+ @item @code{defaultBarType}@indexcode{defaultBarType}
+ Sets the default type of bar line. See Section XREF-barlines [FIXME]
+ for a list of available bar types.
+
+ @item @code{instrument}, @code{instr}
+ @indexcode{instrument}@indexcode{instr}
+ If @code{Staff_margin_engraver}
+@cindex 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. If the
+ @code{midiInstrument} property is not set, then @code{instrument}
+ is used to determine the instrument for MIDI output.
+
+ @item @code{keyOctaviation}@indexcode{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:
+
+ @example
+ \keysignature bes fis'
+ @end example
+
+ The default value is 1. Can be set to zero with
+ @code{\specialkey} or reset to 1 with @code{\normalkey}.
+
+ @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle}
+ Changes the default two-digit layout for time signatures. The
+ following values are recognized:
+
+ @table @samp
+ @item @code{C}@indexcode{C}
+ 4/4 and 2/2 are typeset as C and struck C, respectively. All
+ other time signatures are written with two digits.
+
+ @item @code{old}@indexcode{old}
+ 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are
+ typeset with old-style mensuration marks. All other time
+ signatures are written with two digits.
+
+ @item @code{1}@indexcode{1}
+ All time signatures are typeset with a single
+ digit, e.g. 3/2 is written as 3.
+
+ @item @indexcode{CM/N}@code{C}@var{M}@code{/}@var{N},
+ @indexcode{oldM/N}@code{old}@var{M}@code{/}@var{N} or
+ @code{old6/8alt}@indexcode{old6/8alt}
+ Tells LilyPond to use a specific symbol as time signature.
+ @end table
+
+ The different time signature characters are shown below with its
+ names:
+
+ @mudela[center]
+
+ \score {
+ \notes\relative c'' {
+ \property Voice.textStyle = typewriter
+ \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 = "old2/4"
+ \time 2/2; a2^"old2/4" 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
+ \property Staff.timeSignatureStyle = "old4/8"
+ \time 2/2; a2^"old4/8" a2
+ \property Staff.timeSignatureStyle = "old6/8"
+ \time 2/2; a2^"old6/8" a2
+ \property Staff.timeSignatureStyle = "old6/8alt"
+ \time 2/2; a2^"old6/8alt" a2
+ \property Staff.timeSignatureStyle = "old9/8"
+ \time 2/2; a2^"old9/8" a2
+ }
+ \paper {
+ linewidth = 4.5 \in;
+ }
+ }
+
+@end mudela
+
+ @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration}
+ Set to an integer to control the size of the brackets printed by
+ @code{\alternative}. The integer specifies the number of whole
+ notes duration to use for the brackets. It is rounded to the
+ nearest measure. This can be used to shrink the length of
+ brackets in the situation where one alternative is very large.
+ It may have odd effects if the specified duration is longer than
+ the music given in an @code{\alternative}.
+@end table
+
+
+@cindex properties!GrandStaff
+
+@table @samp
+ @item @code{alignmentReference}@indexcode{alignmentReference}
+ Set to @code{\center} for vertical alignment reference point to be
+ in the center of the vertical group. Set to @code{\up} to put the
+ reference point at the top of the group.
+
+ @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign}
+ Set the maximum vertical distance between staffs.
+
+ @item @code{minVerticalAlign}@indexcode{minVerticalAlign}
+ Set the minimum vertical distance between staffs.
+@end table
+
+
+@cindex properties!Score
+
+@table @samp
+ @item @code{skipBars}@indexcode{skipBars}
+ Set to 1 to skip the empty bars that are produced by
+ multimeasure notes and rests. These bars will not appear on the
+ printed output. Set to zero (the default) to expand multimeasure
+ notes and rests into their full length, printing the appropriate
+ number of empty bars so that synchronization with other voices is
+ preserved.
+
+ @quotation
+
+@mudela[fragment,verbatim,center]
+r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
+
+@end mudela
+ @end quotation
+
+@end table
+
+
+@cindex properties!ChordNamesVoice
+
+@table @samp
+ @item @code{chordInversion}@indexcode{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.
+@end table
+
--- /dev/null
+
+@chapter Tutorial
+
+
+@node Tutorial, , , Top
+@menu
+* Introduction:: Introduction
+* The first tune:: The first tune
+* Lyrics and chords:: Lyrics and chords
+* Piano music:: Piano music
+* end of tutorial:: The end
+@end menu
+
+@node Introduction, , , Tutorial
+@section Introduction
+
+
+LilyPond prints music from a specification that you, the user, supply.
+You have to give that specification using a @emph{language}. This
+document is a gentle introduction to that language, which is called
+Mudela, an acronym of Music Definition Language.
+
+This tutorial will demonstrate how to use Mudela by presenting
+examples of input along with resulting output. We will use English
+terms for notation. In case you are not familiar with those, you may
+consult the glossary that is distributed with LilyPond.
+
+The examples discussed are included in the distribution, in the
+subdirectory @file{input/tutorial/}. It is recommended that you
+experiment with writing Mudela input yourself, to get a feel for
+how LilyPond behaves.
+
+@node The first tune, , , Tutorial
+@section The first tune
+
+
+To demonstrate what LilyPond input looks like, we start off with a
+full fledged, yet simple example. It is a convoluted version
+of the famous menuet in J. S. Bach's @emph{Klavierbuechlein}.
+
+@mudela[verbatim]
+% lines preceded by a percent are comments.
+\include "paper16.ly"
+\score {
+ \notes
+ \relative c'' \sequential{
+ \time 3/4;
+ \key g;
+
+ \repeat "volta" 2 {
+ d4 g,8 a b c d4 g, g |
+ e'4 c8 d e fis g4 g, g |
+ c4 d8()c b a( )b4 c8 b a g |
+ a4 [b8 a] [g fis] g2. |
+ }
+
+ b'4 g8 a b g
+ a4 d,8 e fis d |
+ g4 e8 fis g d cis4 b8 cis a4 |
+ a8-. b-. cis-. d-. e-. fis-.
+ g4 fis e |
+ fis a, r8 cis8
+ d2.-\fermata
+ \bar "|.";
+ }
+ \paper {
+ % standard settings are too wide for a book
+ linewidth = 14.0 \cm;
+ }
+}
+@end mudela
+
+Enter it (or copy it, the filename is @file{menuet.ly}), compile it
+with LilyPond and view the output. Details of this procedure may vary
+from system to system. To create the output, one would issue the
+command `@code{ly2dvi menuet}'. @file{ly2dvi} is a program that does
+the job of running LilyPond and TeX, handling of titles and
+adjusting of page margins.
+
+If all goes well, the file @file{menuet.dvi} will be created.
+To view this output, issue the command `@code{xdvi menuet}'.
+
+Now that we are familiar with the procedure of producing output, we
+will analyse the input, line by line.
+@ignore
+Let's try to redo this
+@example
+
+ % lines preceded by a percent are comments.
+
+@end example
+The percent sign, `@code{%}', introduces a line comment. If you want to
+make larger comments, you can use block comments. These are delimited
+by `@code{%@{}' and `@code{%@}}'
+@end ignore
+@multitable @columnfractions .60 .39
+@item
+@noindent
+@c @example urg: no tt font
+@c @exdent % lines preceded by a percent are comments.
+@exdent @code{% lines preceded by a percent are comments.}
+@c @end example
+@tab
+The percent sign, `@code{%}', introduces a line comment. If you
+want to make larger comments, you can use block comments. These
+are delimited by `@code{%@{}' and `@code{%@}}'
+@end multitable
+@example
+
+ \input "paper16.ly"
+
+@end example
+By default, LilyPond will use definitions for a 20
+point@footnote{A point is the standard measure of length for
+printing. One point is 1/72.27 inch.} high staff. We want smaller
+output (16 point staff height), so we must import the settings for
+that size, which is done.@example
+
+ \score @{
+
+@end example
+ A mudela 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.
+@example
+
+ \notes
+
+@end example
+ This makes LilyPond ready for accepting notes.
+@example
+
+ \relative c''
+
+@end example
+ As we will see, pitches are combinations of octave, note name and
+chromatic alteration. In this scheme, the octave is indicated by
+using raised quotes (`@code{'}') and ``lowered'' quotes (commas:
+`@code{,}'). The central C is denoted by @code{c'}. The C one octave
+higher is @code{c''}. One and two octaves below the central C is
+denoted by @code{c} and @code{c,} respectively.
+
+For pitches in a long piece you might have to type many quotes. To
+remedy this, LilyPond has a ``relative'' octave entry mode. In this
+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 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.@example
+
+ \sequential @{
+
+@end example
+ What follows is sequential music, i.e.,
+notes that are to be played and printed after each other.@example
+
+ \time 3/4;
+
+@end example
+ 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.@example
+
+ \key g;
+
+@end example
+ This command changes the current key to G-major. Although this
+command comes after the @code{\time} command, in the output, the key
+signature comes before the time signature: LilyPond knows about music
+typesetting conventions. @example
+
+ \repeat "volta" 2
+
+@end example
+ This command tells LilyPond that the following piece of music must
+be played twice; @code{"volta"} volta brackets should be used for
+alternatives---if there were any.
+@example
+
+ @{
+
+@end example
+The subject of the repeat is again sequential music. Since
+@code{\sequential} is such a common construct, a shorthand is provided:
+just leave off @code{\sequential}, and the result is the same. @example
+
+ d4
+
+@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). @example
+
+ a b
+
+@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, eg. @code{a4 b4}) @example
+
+ d4 g, g |
+
+@end example
+ Three more notes. The `@code{|}' character is a `barcheck'. When
+processing the music, LilyPond will verify that barchecks are found at
+the start of a measure. This can help you track down errors.
+
+ So far, no notes were chromatically altered. Here is the first one
+that is: @code{fis}. Mudela by default uses Dutch note names, and
+``Fis'' is the Dutch note name for ``F sharp''. However, there is no
+sharp sign in the output. The program keeps track of key signatures,
+and will only print accidentals if they are needed.
+@example
+
+ c8 d e fis
+
+@end example
+LilyPond guesses were beams can be added to eighth and shorter notes.
+In this case, a beam over 4 eighths is added.
+@example
+
+ c4 d8( )c b a( )b4 c8 b a g |
+
+@end example
+ The next line shows how to make a slur:
+the beginning and ending note of the slur is marked with an opening and
+closing parenthesis respectively. In the line shown above this is
+done for two slurs. Slur markers (parentheses) are between
+the notes.@example
+
+ a4 [b8 a] [g fis]
+
+@end example
+Automatic beaming can be overridden by inserting beam marks
+(brackets). Brackets are put around notes you want beamed.@example
+
+ g2. |
+
+@end example
+A duration with augmentation dot is notated
+with the duration number followed by a period.@example
+
+ @}
+
+@end example
+ This ends the sequential music to be repeated. LilyPond will typeset
+a repeat bar. @example
+
+ cis'4 b8 cis a4 |
+
+@end example
+ This line shows that Lily will print an accidental if that is
+needed: the first C sharp will be printed with an accidental, the
+second one without. @example
+
+ a8-. b-. cis-. d-. e-. fis-.
+
+@end example
+You can enter articulation signs either in a verbose form using a
+shorthand. Here we demonstrate the shorthand: it is formed by a dash
+and the the character for the articulation to use, e.g. `@code{-.}' for
+staccato as shown above. @example
+
+ fis a, r8 cis8
+
+@end example
+
+Rests are denoted by the special notename `@code{r}'. You can also enter
+an invisible rest by using the special notename `@code{s}'.
+@example
+
+ d2.-\fermata
+
+@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 @emph{identifier}. @example
+
+ @}
+
+@end example
+
+Here the music ends.
+@example
+
+ \paper @{
+ linewidth = 14.0\cm;
+ @}
+
+@end example
+This specifies a conversion from music to notation output. Most of
+the details of this conversions (font sizes, dimensions, etc.) have
+been taken care of, but to fit the output in this document, it has
+to be smaller. We do this by setting the line width to 14 centimeters
+(approximately 6 inches).
+@example
+
+ @}
+
+@end example
+The last brace ends the @code{\score} block.
+
+There are two things to note here. The format contains musical
+concepts like pitches and durations, instead of symbols and positions:
+the input format tries to capture the meaning of @emph{music}, and not
+notation. Therefore Second, the format tries to be @emph{context-free}:
+a note will sound the same regardless of the current time signature,
+the key, etc.
+
+The purpose of LilyPond is explained informally by the term `music
+typesetter'. This is not a fully correct name: not only does the
+program print musical symbols, it also makes esthetic decisions. All
+symbols and their placement is @emph{generated} from a high-level musical
+description. In other words, LilyPond would be best
+described by `music compiler' or `music to notation compiler'.
+
+@node Lyrics and chords, , , Tutorial
+@section Lyrics and chords
+
+In this section we show how to typeset a song of unknown
+origin.@footnote{The author would welcome information about the origin
+of this song.}.
+
+@example
+\header @{
+ title = "The river is flowing";
+ composer = "Traditional (?)";
+@}
+\include "paper16.ly"
+melody = \notes \relative c' @{
+ \partial 8;
+ g8 |
+ c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
+ c4 c8 d [es () d] c4 | d4 es8 d c4.
+ \bar "|.";
+@}
+
+text = \lyrics @{
+ The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
+ ri -- ver is flo -- wing down to the sea.
+@}
+
+accompaniment =\chords @{
+ r8
+ c2-3- f-3-.7 d-min es4 c8-min r8
+ c2-min f-min7 g-7^3.5 c-min @}
+
+\score @{
+ \simultaneous @{
+% \accompaniment
+ \context ChordNames \accompaniment
+
+ \addlyrics
+ \context Staff = mel @{
+ \property Staff.noAutoBeaming = "1"
+ \property Staff.automaticMelismata = "1"
+ \melody
+ @}
+ \context Lyrics \text
+ @}
+ \midi @{ @}
+ \paper @{ linewidth = 10.0\cm; @}
+@}
+@end example
+
+
+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}.}.
+
+@center @strong{The river is flowing}
+@center Traditional
+
+@mudela[center]
+\header {
+ title = "The river is flowing";
+ composer = "Traditional (?)";
+}
+\include "paper16.ly"
+melody = \notes \relative c' {
+ \partial 8;
+ g8 |
+ c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
+ c4 c8 d [es () d] c4 | d4 es8 d c4.
+ \bar "|.";
+}
+
+text = \lyrics {
+ The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
+ ri -- ver is flo -- wing down to the sea.
+}
+
+accompaniment =\chords {
+ r8
+ c2-3- f-3-.7 d-min es4 c8-min r8
+ c2-min f-min7 g-7^3.5 c-min }
+
+\score {
+ \simultaneous {
+% \accompaniment
+ \context ChordNames \accompaniment
+
+ \addlyrics
+ \context Staff = mel {
+ \property Staff.noAutoBeaming = "1"
+ \property Staff.automaticMelismata = "1"
+ \melody
+ }
+ \context Lyrics \text
+ }
+ \midi { }
+ \paper { linewidth = 10.0\cm; }
+}
+@end mudela
+
+Again, we will dissect the file line by line.@example
+
+ \header @{
+
+@end example
+Information about the music you are about to typeset goes into a
+@code{\header} block. The information in this block is not used by
+LilyPond, but it is included in the output. @file{ly2dvi} uses this
+information to print titles above the music.
+@example
+
+ title = "The river is flowing";
+ composer = "Traditional (?)";
+@end example
+the @code{\header} block contains assignments. An assignment starts
+with a string. (which is unquoted, in this case). Then comes the
+equal sign `@code{=}'. After the equal sign comes the expression you
+want to store. In this case, you want to put in strings. The
+information has to be quoted here, because it contains spaces. The
+assignment is finished with a semicolon.@example
+
+ \include "paper16.ly"
+
+@end example
+Smaller size for inclusion in a book.@example
+
+ melody = \notes \relative c' @{
+
+@end example
+The structure of the file will be the same as the previous one, a
+@code{\score} block with music in it. To keep things readable, we will
+give names to the different parts of music, and use the names to
+construct the music within the score block.
+
+@example
+
+ \partial 8;
+
+@end example
+
+The piece starts with an anacrusis of one eighth. @example
+
+ c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
+ c4 c8 d [es () d] c4 | d4 es8 d c4.
+ \bar "|.";
+
+@end example
+We use explicit beaming. Since this is a song, we will turn automatic
+beams off, and use explicit beaming where needed.@example
+
+ @}
+
+@end example
+This ends the definition of @code{melody}. Note that there are no
+semicolons after assignments at top level.@example
+
+ text = \lyrics @{
+
+@end example
+Another identifier assignment. This one is for the lyrics.
+Lyrics are formed by syllables that have duration, and not by
+notes. To make LilyPond parse words as syllables, switch it into
+lyrics mode with @code{\lyrics}. Again, the brace after @code{\lyrics}
+is a shorthand for @code{\sequential @{}. @example
+
+ The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
+ ri- ver is flo- __ wing down to the sea.
+ @}
+
+@end example
+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
+in length (hence the @code{4}), and use a feature to align the
+syllables to the music (which obviously isn't all quarter notes.)
+@example
+
+ accompaniment =\chords @{
+
+@end example
+We'll put chords over the music. 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
+
+@end example
+There is no accompaniment during the anacrusis.@example
+
+ c2-3- f-3-.7
+
+@end example
+A chord is started by the tonic of the chord. The
+first one lasts a half note. An unadorned note creates a major
+triad, while a minor triad is wanted. @code{3-} modifies the third to
+be small. @code{7} modifies (adds) a seventh, which is small by default
+to create the @code{f a c es} chord. Multiple modifiers must be
+separated by a dot.@example
+
+ d-min es4 c8-min r8
+
+@end example
+Some modifiers have predefined names, eg. @code{min} is the same as
+@code{3-}, so @code{d-min} is a minor @code{d} chord.@example
+
+ c2-min f-min7 g-7^3.5 c-min @}
+
+@end example
+A named modifier @code{min} and a normal modifier @code{7} do not have
+to be separated by a dot. Tones from a chord are removed with chord
+subtractions. Subtractions are started with a caret, and they are
+also separated by dots. In this example, @code{g-7^3.5} produces a
+minor seventh. The brace ends the sequential music. @example
+
+ \score @{
+ \simultaneous @{
+
+@end example
+We assemble the music in the @code{\score} block. Melody, lyrics and
+accompaniment have to sound at the same time, so they should be
+@code{\simultaneous}.@example
+
+ %\accompaniment
+
+@end example
+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. @example
+
+ \context ChordNames \accompaniment
+
+@end example
+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
+LilyPond, these symbols are created by objects called `interpretation
+context'. Interpretation contexts only exist during a run of
+LilyPond. Interpretation contexts that are for printing music (as
+opposed to playing music) are called `notation context'.
+
+By default, LilyPond will create a Staff contexts for you. If you
+would remove the @code{%} sign in the previous line, you can see that
+mechanism in action.
+
+We don't want default contexts here, because we want 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 a 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.@example
+
+ \addlyrics
+
+@end example
+The lyrics need to be aligned with the melody. This is done by
+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.)@example
+
+ \context Staff = mel @{
+
+@end example
+This is the argument of @code{\addlyrics}. We instantiate a
+@code{Staff} context explicitly: should you chose to remove comment
+before the ``note heads'' version of the accompaniment, the
+accompaniment will be on a nameless staff. The melody has to be on a
+different staff as the accompaniment. This is accomplished by giving
+the melody staff a different name.@example
+
+ \property Staff.noAutoBeaming = "1"
+
+@end example
+An interpretation context has variables that tune its behaviour. One
+of the variables is @code{noAutoBeaming}. If set and non-zero (i.e.,
+true) LilyPond will not try to put automatic beaming on the current
+staff.@example
+
+ \property Staff.automaticMelismata = "1"
+
+@end example
+Similarly, we don't want to print a syllable when there is
+a slur. This sets up the Staff context to signal slurs while
+@code{\addlyrics} is processed. @example
+
+ \melody
+ @}
+
+@end example
+Finally, we put the melody on the current staff. Note that the
+@code{\property} directives and @code{\melody} are grouped in sequential
+music, so the property settings are done before the melody is
+processed. @example
+
+ \context Lyrics \text
+
+@end example
+The second argument of @code{\addlyrics} is the text. The text also
+should not land on a Staff, but on a interpretation context for
+syllables, extenders, hyphens etc. This context is called
+Lyrics.@example
+
+ @}
+
+@end example
+This ends @code{\simultaneous}.@example
+
+ \midi @{ @}
+
+@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} is an
+`output definition', a declaration that specifies how to output music
+analogous to @code{\paper @{ @}}.@example
+
+ \paper @{ linewidth = 10.0\cm; @}
+
+@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 Piano music, , , Tutorial
+@section Piano music
+
+Our third subject is a piece piano music. The fragment in the input
+file is a piano reduction of the G major Sinfonia by Giovanni Battista
+Sammartini. It was composed around 1740.
+
+@mudela[verbatim]
+
+\include "paper16.ly";
+
+viola = \notes \relative c' \context Voice = viola {
+ <c4-\f g' c>
+ \property Voice.verticalDirection = \down 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.verticalDirection = \down
+ [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 = \notes \transpose c' {
+ c8 \translator Staff = top \stemdown
+ c'8 \translator Staff = bottom \stemup }
+
+hoomPahHoomPah = { [\hoomPah \hoomPah] }
+
+bassvoices = \notes \relative c' {
+ c4 g8. b,16
+ \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
+ \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 = top < \time 2/2;
+ \context Voice = viola \viola
+ \oboes
+ >
+ \context Staff = bottom < \time 2/2; \clef bass;
+ \bassvoices
+ >
+ >
+ \midi { }
+ \paper {
+ indent = 0.0;
+ linewidth = 15.0 \cm; }
+}
+@end mudela
+
+If it looks like incomprehensible gibberish to you@dots{} Then you are
+right. The author has doctored this example to have as many quirks in
+one system as possible.@example
+viola = \notes \relative c' \context Voice = viola @{
+@end example
+In this example, you can see multiple parts on a staff. Each part is
+associated with one notation context. This notation context handles
+stems and dynamics (among others). The name of this context is
+@code{Voice}. For each part we have to make sure that there is
+precisely one Voice context@footnote{If @code{\context} would not
+have been specified explicitly, three @code{Voice} contexts would be
+created: one for each note in the first chord.}.@example
+<c4-\f g' c>
+@end example
+@code{<} and @code{>} are short hands for @code{\simultaneous @{} and
+@code{@}}. So the expression enclosed in @code{<} and @code{>} is a
+chord. @code{\f} places a forte symbol under the chord.@example
+\property Voice.verticalDirection = \down
+@end example
+@code{verticalDirection} is a property of the voice context. It
+controls the directions of stems, articulations marks and other
+symbols.
+ If @code{verticalDirection} is set to @code{\down}
+(identifier for the integer -1) the stems go down,
+@code{\up} (identifier for the integer 1) makes the stems go up.@example
+ g'8. b,16
+@end example
+Relative octaves work a little differently with chords. The starting
+point for the note following a chord is the first note of the chord. So
+the @code{g} gets an octave up quote: it is a fifth above the starting
+note of the previous chord (the central C).
+
+@example
+s1 s2. r4
+@end example
+@code{s} is a `spacer' rest. It does not print anything, but it does
+have the duration of a rest. @example
+oboes = \notes \relative c'' \context Voice = oboe @{
+@end example
+Now comes a part for two oboes. They play homophonically, so we
+print the notes as one voice that makes chords. Again, we insure that
+these notes are indeed processed by precisely one context with
+@code{\context}.@example
+\stemup s4 g8. b,16 c8 r <e'8.-\p g> <f16 a>
+@end example
+@code{\stemup} is an identifier reference. It is shorthand for
+@code{\property Voice.verticalDirection = \up}. If possible, you
+should use predefined identifiers like these for setting properties.
+Your input will be less dependent upon the implementation of LilyPond.
+@example
+\grace <e8( g> < )d4 f> <c2 e>
+@end example
+@code{\grace} introduces grace notes. It takes one argument, in this
+case a chord. The slur started on the @code{e} of the chord
+will be attached to the next note.@footnote{LilyPond will squirm
+about unended Slurs. In this case, you can ignore the warning}.
+@example
+\times 2/3
+@end example
+Tuplets are made with the @code{\times} keyword. It takes two
+arguments: a fraction and a piece of music. The duration of the
+second argument is multiplied by the first argument. Triplets make
+notes occupy 2/3 of their notated duration, so in this case the
+fraction is 2/3. @example
+@{ <d8 \< f> <e g> <f a> @}
+@end example
+The piece of music to be `tripletted' is sequential music containing
+three notes. On the first chord (the @code{d}), a crescendo is started
+with @code{\<}.@example
+<
+@end example
+At this point, the homophonic music splits into two rhythmically
+different parts. We can't use a sequence of chords to enter this, so
+we make a `chord' of sequences to do it. We start with the upper
+voice, which continues with upward stems: @example
+ @{ \times 2/3 @{ a8 g c @} \! c2 @}
+@end example
+The crescendo is ended at the half note by the escaped exclamation
+mark `@code{\!}'. @example
+\context Voice = oboeTwo @{
+\stemdown
+@end example
+We can't share stems with the other voice, so we have to create a new
+@code{Voice} context. We give it the name @code{oboeTwo} to distinguish
+it from the other context. Stems go down in this voice. @example
+\grace @{
+@end example
+When a grace section is processed, a @code{Grace} context is
+created. This context acts like a miniature score of its own. It has
+its own time bookkeeping, and you can make notes, beams, slurs
+etc. Here fiddle with a property and make a beam. The argument of
+@code{\grace} is sequential music.@example
+\property Grace.verticalDirection = \down
+[f,16 g] @}
+@end example
+Normally, grace notes are always stem up, but in this case, the upper
+voice interferes. We set the stems down here.
+
+As far as relative mode is concerned, the previous note is the
+@code{c'''2} of the upper voice, so we have to go an octave down for
+the @code{f}.
+@example
+
+ f8 e e2
+@} >
+@end example
+This ends the two-part section. @example
+\stemboth
+\grace <c,8( e> <)b8. d8.-\trill> <c16 e> |
+@end example
+@code{\stemboth} ends the forced stem directions. From here, stems are
+positioned as if it were single part music.
+
+The bass has a little hoom-pah melody to demonstrate parts switching
+between staffs. Since it is repetitive, we use identifiers:@example
+hoomPah = \notes \transpose c' @{
+@end example
+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. Central C is transposed to
+central C.
+
+The purpose of this no-op is circumventing relative mode. Relative
+mode can not be used in conjunction with transposition, so relative
+mode will leave the contents of @code{\hoomPah} alone. We can use it
+without having to worry about getting the motive in a wrong
+octave@footnote{@code{hoomPah = \relative @dots{}} would be more
+intuitive to use, but that would not let me plug @code{\transpose}
+:-).}.@example
+c8 \translator Staff = top \stemdown
+@end example
+We assume that the first note will be put in the lower staff. After
+that note we switch to the upper staff with @code{\translator}. To be
+precise, this @code{\translator} entry switches the current voice to a
+@code{Staff} named @code{top}. So we have to name the upper staff
+`@code{top}'. Stem directions are set to avoid interfering with the
+oboe voices. @example
+c'8 \translator Staff = bottom \stemup @}
+@end example
+Then a note is put on the upper staff, and we switch again. We have
+to name the lower staff `@code{bottom}'. @example
+hoomPahHoomPah = @{ [\hoomPah \hoomPah] @}
+@end example
+Put two of these fragments in sequence, and beam them.@example
+bassvoices = \notes \relative c' @{
+c4 g8. b,16
+\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
+\hoomPahHoomPah
+@end example
+Entering the bass part is easy: the hoomPahHoomPah variable is
+referenced four times.@example
+\context Voice = reallyLow @{\stemdown g2 ~ | g4 c8 @} >
+@end example
+After skipping some lines, we see @code{~}. This mark makes ties.@example
+\context PianoStaff
+@end example
+For piano music, a special context is needed to get cross staff
+beaming right. It is called @code{PianoStaff}.@example
+\context Staff = bottom < \time 2/2; \clef bass;
+@end example
+The bottom staff must have a different clef.@example
+indent = 0.0;
+@end example
+To make some more room on the line, the first (in this case the only)
+line is not indented. The line still looks is very cramped, but that is due
+to the format of this tutorial.
+
+This example shows a lot of features, but the organisation isn't
+perfect. For example, it would be less confusing to use a chord
+containing sequential music than a sequence of chords for the oboe
+parts.
+
+[TODO: demonstrate Hara-Kiri with scores and part extraction.]
+
+@node end of tutorial, , , Tutorial
+@section The end
+
+That's all folks. From here, you can either try fiddling with input
+files, or you can read the reference manual.