@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
* Custodes::
* Tuning output::
* Page layout::
+* Output formats::
* Sound::
* Music entry::
* Skipping corrected music::
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
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:
* Tuplets::
* Rests::
* Skip::
-* Note mode::
@end menu
@c . {Pitches}
@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
@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
}
}
@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
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
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 } }
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'>
@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
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
\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}
-@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
This command sets context property @code{Staff.keySignature}.
+The printed signature is a @code{KeySignature} grob.
+
@cindex @code{keySignature}
@c . {Clef}
\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
\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
@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
@code{\bar ; }. These settings take precedence over automatic @code{whichBar}
settings.
+@code{Bar_engraver} creates @code{BarLine} grobs.
@c . {Polyphony}
@node Polyphony
\shiftOnn \stemUp ais
}
\context Voice=four {
- \shiftOnnn \stemUp fis-2
+ \shiftOnnn \stemUp fis
}
>
@end lilypond
\context Voice = VC { \voiceTwo fis4~ fis4 f ~ f } >
@end lilypond
-
LilyPond also vertically shifts rests that are opposite of a stem.
@lilypond[singleline,verbatim]
@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
@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:
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
@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}.
For information on how to add scripts, consult @file{scm/script.scm}.
+Grobs for these objects are @code{Script} and @code{Fingering}.
@refbugs
@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'
@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
\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
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
@end lilypond
+Repeats brackets are @code{Staff.VoltaBracket} grobs.
+
@node Tremolo repeats
@subsection Tremolo repeats
@cindex tremolo beams
}
@end lilypond
+Tremolo beams are @code{Voice.Beam} grobs. Single stem tremolos are
+@code{Voice.StemTremolo}.
+
@refbugs
}
@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
>
@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}
>
@end lilypond
+The associated grob is @code{Voice.VoiceFollower}.
@c . {Lyrics}
@node Lyrics
share the so -- ftware; }
@end lilypond
+The Lyric syllables are @code{LyricsVoice.LyricSyllable} grobs.
+
@cindex extender
@cindex lyric extender
@cindex melisma
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
`@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
* What to tune?::
* Font selection::
* Text markup::
-* Embedded @TeX{}::
+* Invisible grobs::
+* Embedded TeX::
@end menu
@node Tuning groups of grobs
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
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
}
@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"
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
@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)
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.
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
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.
@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.
@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.
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
@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
\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
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.
@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;
@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
@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 |
@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
@}
@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
@example
\header @{
title = "The river is flowing";
- composer = "Traditional (?)";
+ composer = "Traditional";
@}
\include "paper16.ly"
melody = \notes \relative c' @{
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
@lilypond[center]
\header {
title = "The river is flowing";
- composer = "Traditional (?)";
+ composer = "Traditional";
}
\include "paper16.ly"
melody = \notes \relative c' {
@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
@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 @{
@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
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
@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
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 @{
@cindex evaluating Scheme
@cindex LISP
-LilyPond internally uses GUILE, a Scheme-interpreter@footnote{Scheme is
-a 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
\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
@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
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";
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
@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
...
...
@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
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.
@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 @{
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
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"; @}
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
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
\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
\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
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
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
@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
@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
@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
\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
>
>
>
#(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
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.
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.
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
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
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
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
linewidth = 80 * \staffspace;
textheight = 200 * \staffspace;
\translator @{
- \OrchestralScoreContext
+ \OrchestralScoreContext %%%%junkme
skipBars = ##t
@}
@}
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
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@{@}@}
-[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]
[TODO]
@file{/usr/share/lilypond/doc/lilypond/examples/input/mutopia-header.ly}
+@end ignore
+