@c -*-texinfo-*- @c TODO: @c * more details about running lilypond; error messages, @c compiling/viewing (emacs?) @c * where to go from First steps+More basics? @node Tutorial @chapter Tutorial @html @end html @menu * First steps:: Music language of LilyPond. * Running LilyPond:: Printing music. * More basics:: * Printing lyrics:: * A lead sheet:: * Listening to output:: * Titling :: * Single staff polyphony :: * Piano staffs:: * Setting variables:: * Fine tuning layout:: * Organizing larger pieces:: * An orchestral part:: * Integrating text and music:: Integrating text and music. @end menu Printing music with LilyPond is a two step process. First, the music to be printed is described in a text file. After that, LilyPond reads this @emph{input file} that describes the music and produces an @emph{output file} that can be printed or viewed. This tutorial starts with a short introduction to the LilyPond music language. After this first contact, we will show you how to to produce printed output, normally using the program @code{ly2dvi}. You should then be able to create and print your first sheets of music. Before starting out, it will be convenient for you to print @ifhtml the @end ifhtml @ref{Cheat sheet}, which is a table listing all commands for quick reference. @node First steps @section First steps We start off by showing how very simple music is entered in LilyPond: you get a note simply by typing its @htmlref{note name}, from @samp{a} through @samp{g}. So if you enter @example c d e f g a b @end example @noindent then the result looks like this: @c ? @c \transpose c c' { c d e f g a b } @c @lily pond[notime] @c \property Score.timing = ##f @lilypond[notime, relative=2] c d e f g a b @end lilypond We will continue with this format: First we show a snippet of input, then the resulting output. The length of a note is specified by adding a number, @samp{1} for a @rglos{whole note}, @samp{2} for a @rglos{half note}, and so on: @example a1 a2 a4 a16 a32 @end example @lilypond[notime] \property Score.timing = ##f \property Staff.autoBeaming = ##f \transpose c c' { a1 a2 a4 a16 a32 s16_" " } @end lilypond If you do not specify a @rglos{duration}, the previous one is used: @example a4 a a2 a @end example @lilypond[notime] \property Score.timing = ##f \transpose c c' { a a a2 a s16_" " } @end lilypond A @rglos{sharp} (@texisharp{}) is made by adding @samp{is}, a @rglos{flat} (@texiflat{}) by adding @samp{es}. As you might expect, a @rglos{double sharp} or @rglos{double flat} is made by adding @samp{isis} or @samp{eses}:@footnote{This syntax derived from note naming conventions in Nordic and Germanic languages, like German and Dutch.} @example cis1 ees fisis aeses @end example @lilypond[notime] \property Score.timing = ##f \transpose c c' { cis1 ees fisis aeses s16_" " } @end lilypond Add a dot @samp{.} after the duration to get a @rglos{dotted note}: @example a2. a4 a8. a16 @end example @lilypond[notime] \property Score.timing = ##f \transpose c c' { a2. a4 a8. a16 s16_" " } @end lilypond Entering pitches and durations is fully explained in @ref{Pitches} and @ref{Durations}. The @rglos{meter} (or @rglos{time signature}) can be set with the @code{\time} command: @example \time 3/4 \time 6/8 \time 4/4 @end example @c a clef here may lead to confusion @lilypond \property Staff.Clef \set #'transparent = ##t \time 3/4 s4_" " \time 6/8 s4_" " \time 4/4 s16_" " @end lilypond Time signatures and other timing commands are described in @ref{Time signature}. The @rglos{clef} can be set using the @code{\clef} command: @c what is more common name treble or violin? @c in Dutch, its violin. @c in English its definitely treble. @example \clef treble \clef bass \clef alto \clef tenor @end example @lilypond[notime] \property Score.timing = ##f \clef violin s4_" " \clef bass s4_" " \clef alto s4_" " \clef tenor s16_" " @end lilypond Clefs are fully explained in @ref{Clef}. These commands must be enclosed in @code{\notes @{@dots{}@}}. This indicates that music (as opposed to @rglos{lyrics}) follows: @example \notes @{ \time 3/4 \clef bass c2 e4 g2. f4 e d c2. @} @end example Now the piece of music is almost ready to be printed. The final step is to combine the music with a printing command. The printing command is the so-called @code{\paper} block. Later on you will see that the @code{\paper} block is used to customize printing specifics. The music and the @code{\paper} block are combined by enclosing them in @code{\score @{ ... @}}. This is what a full source file looks like: @example \score @{ \notes @{ \time 3/4 \clef bass c2 e4 g2. f4 e d c2. @} \paper @{ @} @} @end example @lilypond[noindent] \score { \notes { \time 3/4 \clef bass c2 e4 g2. f4 e d c2. } \paper { linewidth = 55 * \staffspace } } @end lilypond @node Running LilyPond @section Running LilyPond In the last section we explained what kind of things you could enter in a LilyPond file. In this section we explain what commands to run and how to view or print the output. If you have not used LilyPond before, want to test your setup, or want to run an example file yourself, read this section. The instructions that follow are for Unix-like systems. Some additional instructions for Microsoft Windows are given at the end of this section. Begin by opening a terminal window and starting a text editor. For example, you could open an xterm and execute @code{joe}. In your text editor, enter the following input and save the file as @file{test.ly}: @quotation @example \score @{ \notes @{ c'4 e' g' @} @} @end example @end quotation @cindex ly2dvi @c now this is weird, running ly2dvi to run LilyPond @c (therefore name change proposal) LilyPond is the program that computes the sheet music. All other things, such as adding titles, page breaking and other page layout, are done by a small wrapper program called @code{ly2dvi}. @code{ly2dvi} calls LilyPond to render the music, and then adds the titling and page layout instructions. To process @file{test.ly} with @code{ly2dvi}, proceed as follows: @quotation @example ly2dvi -p test.ly @end example @end quotation You will see the following on your screen: @quotation @example GNU LilyPond 1.7.16 Now processing: `/home/fred/ly/test.ly' Parsing... Interpreting music...[1] @emph{ ... more interesting stuff ... } PDF output to `test.pdf'... DVI output to `test.dvi'... @end example @end quotation @cindex DVI file @cindex Viewing music @cindex xdvi The results of the ly2dvi run are two files, @file{test.dvi} and @file{test.pdf}. The PDF file (@file{test.pdf}) is the one you can print or view. For example, viewing PDF can be done with ghostview. If a version of ghostview is installed on your system, one of these commands will produce a window with some music notation on your screen: @c eeek @quotation @example gv test.pdf ghostview test.pdf ggv test.pdf kghostview test.pdf xpdf test.pdf gpdf test.pdf @end example @end quotation If the music on your screen looks good, you can print it by clicking File/Print inside ghostview. The DVI file (@file{test.dvi}) contains the same sheet music in a different format. DVI files are more easily processed by the computer, so viewing them usually is quicker. You can run @code{xdvi test.dvi} @c KDVI doesn't grok the PS specials. @c or @c @code{kdvi test.dvi} @c to view the DVI file. In Xdvi, the mouse buttons activate magnifying glasses. Unfortunately, variable symbols (such as beams and slurs) are not displayed in the magnifying glasses. @cindex Ghostscript @cindex @code{lpr} @cindex Printing output @cindex PostScript @cindex PDF If you are familiar with @TeX{}, be warned: do not use other DVI drivers like @code{dvilj}. LilyPond DVI use embedded PostScript code and will not render correctly with other DVI drivers besides @code{dvips}. @cindex dvips @cindex dvilj @cindex DVI driver Various commands for formatting and printing music are detailed in @ref{Invoking LilyPond}. @unnumberedsubsec Windows users On Windows, the terminal is started by clicking on the LilyPond or Cygwin icon. Any text editor (such as NotePad, Emacs or Vim) may be used to edit the LilyPond file. When Cygwin's @code{XFree86} X11 window system is installed along with @code{tetex-x11} and @code{ghostscript-x11} packages, then the @code{dvi} output may be viewed with @code{xdvi test.dvi} as described above. If you have installed a PostScript/PDF viewer, such as @code{GSView} from @uref{http://www.cs.wisc.edu/~ghost}, viewing the PDF file can be done with: @quotation @example @code{gsview32 test.pdf} @end example @end quotation Printing may be done by executing @quotation @example @code{gsview32 /s test.pdf} @end example @end quotation @node More basics @section More basics We continue with the introduction of more musical constructs. Normal rests are entered just like notes with the name ``@code{r}'': @quotation @example r2 r4 r8 r16 @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.Clef = \turnOff \property Staff.TimeSignature = \turnOff r2 r4 r8 r16 s16_" " @end lilypond @end quotation @separate Rests are described in full detail in @ref{Rests}. @c Tim wants to move this quotes example just before the: quotes-do not-work @c score, but we'd need to remove quotes from the other two (key and @c tie) examples... @c better to have this just before the `octaves are bad' snipped @c but we'd need to remove the ', from \key and tie To raise a note by an octave, add a high quote @code{'} (apostrophe) to the note name, to lower a note one octave, add a ``low quote'' @code{,} (a comma). Middle C is @code{c'}: @quotation @example c'4 c'' c''' \clef bass c c, @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.TimeSignature = \turnOff c'4 c'' c''' \clef bass c c, @end lilypond @end quotation @separate A tie is created by adding a tilde ``@code{~}'' to the first note being tied. @quotation @lilypond[fragment,verbatim] g'4-~ g' a'2-~ a'4 @end lilypond @end quotation @separate A tie is different from a slur. A tie simply makes the first note sound longer, and can only be used on pairs of notes with the same pitch. Slurs indicate the articulations of notes, and can be used on larger groups of notes. Slurs and ties are also nested in practice: @lilypond[fragment, relative=1] c2-~-( c8 fis fis4 ~ fis2 g2-) @end lilypond The notation manual discusses ties in @ref{Ties}. The key signature is set with the command ``@code{\key}'', followed by a pitch and @code{\major} or @code{\minor}: @quotation @example \key d \major g'1 \key c \minor g' @end example @lilypond[fragment] \property Staff.TimeSignature = \turnOff \key d \major g'1 \key c \minor g' @end lilypond @end quotation @c bit on the long/complex/scary taste @c cheating a bit: two lines makes for a friendlier look This example shows notes, ties, octave marks, and rests in action. @quotation @example \score @{ \notes @{ \time 4/4 \key d \minor \clef violin r4 r8 d''8 cis''4 e'' d''8 a'4.-~ a' b'8 cis''4 cis''8 cis'' bis'4 d''8 cis''-~ cis''2 r2 @} \paper @{ @} @} @end example @lilypond \score { \notes { \time 4/4 \clef violin \key d \minor r4 r8 d''8 cis''4 e'' d''8 a'4.-~ a' b'8 cis''4 cis''8 cis'' bis'4 d''8 cis''-~ cis''2 r2 } \paper { linewidth = 50*\staffspace } } @end lilypond @end quotation @c accidentals... There are some interesting points to note in this example. Accidentals (sharps and flats) do not have to be marked explicitly: you just enter the note name, and an accidental is printed automatically, only when necessary. Bar lines and beams are drawn automatically. Line breaks are calculated automatically; it does not matter where the lines breaks are in the source file. Finally, the order of time, key and clef changes is not relevant: in the printout, these are ordered using standard notation conventions. The example also indicates that a piece of music written in a high register needs lots of quotes. This makes the input less readable, and is also a potential source of errors. The solution is to use ``relative octave'' mode. In practice, this is the most convenient way to copy existing music. To use relative mode, add @code{\relative} before the piece of music. You must also give a note from which relative starts, in this case @code{c''}. If you do not use octavation quotes (i.e. do not add ' or , after a note), relative mode chooses the note that is closest to the previous one. @c do not use commas or quotes in this sentence For example: @code{c f} goes up; @code{c g} goes down: @quotation @example \relative c'' @{ c f c g c @} @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.TimeSignature = \turnOff \relative c'' { c f c g c } @end lilypond @end quotation @separate Since most music has small intervals, in relative mode pieces can be written almost without using octavation quotes. @c needed better, maybe even redundant explanation @c added another example below. @c grappig: Pa vond het heel logies, en slim toen-i eenmaal begreep. @c in eerste instantie drong het `relative' niet door zonder extra uitleg. Larger intervals are made by adding octavation quotes. Quotes or commas do not determine the absolute height of a note; the height of a note is relative to the previous one. @c do not use commas or quotes in this sentence For example: @code{c f,} goes down; @code{f, f} are both the same; @code{c' c} are the same; and @code{c g'} goes up: @quotation @example \relative c'' @{ c f, f c' c g' c, @} @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.TimeSignature = \turnOff \relative c'' { c f, f c' c g' c, } @end lilypond @end quotation @separate Here is an example of the difference between relative mode and ``normal'' (non-relative) mode: @quotation @example \relative a @{ \clef bass a d a e d c' d' @} @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.TimeSignature = \turnOff \relative a { \clef bass a d a e d c' d' } @end lilypond @end quotation @separate @quotation @example \clef bass a d a e d c' d' @end example @lilypond[fragment] \property Score.timing = ##f \property Staff.TimeSignature = \turnOff \clef bass a d a e d c' d' @end lilypond @end quotation @separate A slur is drawn across many notes, and indicates bound articulation (legato). The starting note and ending note are marked with a ``@code{(}'' and a ``@code{)}'' respectively: @quotation @lilypond[fragment,relative 1, verbatim] d4-( c16-)-( cis d e c cis d e-)-( d4-) @end lilypond @end quotation @separate If you need two slurs at the same time (one for articulation, one for phrasing), you can also make a phrasing slur with @code{\(} and @code{\)}. @c lousy example @c ? --hwn @c fragment of 1st hrn in Adams' The Chairman Dances, with creative @c chromatic thing pasted in front. (admittedly the original does not @c have a phrasing slur. The problem is that we do not want the slur @c and the Phrasing slur to collide. We are trying to make a good @c impression here. @quotation @lilypond[fragment,relative 1, verbatim] a8-(-\( ais b c-) cis2 b'2 a4 cis, c-\) @end lilypond @end quotation @separate Beams are drawn automatically, but if you do not like where they are put, they can be entered by hand. Mark the first note to be beamed with @code{[} and the last one with @code{]}: @quotation @lilypond[fragment,relative 1, verbatim] a8-[ ais-] d-[ es r d-] @end lilypond @end quotation @separate @menu * Combining music into compound expressions:: * Adding articulation marks to notes :: * More basic rhythms:: * Commenting input files:: @end menu @node Combining music into compound expressions @subsection Combining music into compound expressions To print more than one staff, each piece of music that makes up a staff is marked by adding @code{\context Staff} before it. These @code{Staff}'s are then grouped inside @code{\simultaneous @{} and @code{@}}, as is demonstrated here: @quotation @lilypond[fragment,verbatim] \simultaneous { \context Staff = staffA { \clef violin c'' } \context Staff = staffB { \clef bass c } } @end lilypond @end quotation In this example, @code{staffA} and @code{staffB} are names that are given to the staves. It does not matter what names you give, as long as each staff has a different name. If you give them the same name, they are assumed to belong on the same staff, and will be printed like that. @code{\simultaneous } indicates that both fragments happen at the same time, and must be printed stacked vertically. The notation @code{< .. >} can also be used as a shorthand for @code{\simultaneous @{ .. @}}. @separate We can now typeset a melody with two staves: @quotation @lilypond[verbatim,singleline] \score { \notes < \context Staff = staffA { \time 3/4 \clef violin \relative c'' { e2-( d4 c2 b4 a8-[ a-] b-[ b-] g-[ g-] a2.-) } } \context Staff = staffB { \clef bass c2 e4 g2. f4 e d c2. } > \paper {} } @end lilypond @end quotation The example shows how small chunks of music, for example the notes @code{c2}, @code{e4}, etc. of the second staff, are combined to form a larger chunk by enclosing it in braces. Again, a larger chunk is formed by prefix @code{\context Staff} to it, and that chunk is combined with @code{< >}. This mechanism is similar with mathematical formulas: in a formula, a so-called expression is formed by combining simpler expressions into larger expressions. For example, @quotation 1 1 + 2 (1 + 2) * 3 ((1 + 2) * 3) / (4 * 5) @end quotation is a sequence of expressions, where each expression is contained in the next one. The simplest expressions are numbers and operators (like +, * and /). Parentheses are used to group expressions. In LilyPond input, a similar mechanism is used. Here, the simplest expressions are notes and rests. By enclosing expressions in @code{< >} and @code{@{ @}}, more complex music is formed. The @code{\context} also forms new expressions; it is prepended to a music expression. When spreading expressions over multiple lines, it is customary to use an indent that indicates the nesting level. Formatting music like this eases reading, and helps you insert the right amount of closing braces at the end of an expression. For example @example \score @{ \notes < @{ @dots{} @} @{ @dots{} @} > @} @end example @node Adding articulation marks to notes @subsection Adding articulation marks to notes Common accents can be added to a note using @code{-.}, @code{--}, @code{->}: @quotation @lilypond[verbatim,relative 1] c-. c-- c-> @end lilypond @end quotation @separate Similarly, fingering indications can be added to a note using @code{-} and the digit to be printed. @lilypond[verbatim,relative 1] c-3 e-5 b-2 a-1 @end lilypond Dynamic signs are made by adding the markings to the note: @quotation @lilypond[verbatim,relative 1] c-\ff c-\mf @end lilypond @end quotation @separate Crescendi and decrescendi are started with the commands @code{\<} and @code{\>}. The command @code{\!} finishes a crescendo on the note it is attached to. @quotation @lilypond[verbatim,relative 1] c2-\< c2-\!-\ff c2-\> c2-\! @end lilypond @end quotation @separate Chords can be made by surrounding pitches with @code{<<} and @code{>}>: @quotation @lilypond[relative 0, fragment,verbatim] r4 <>4 <>8 @end lilypond @end quotation @separate You can combine beams and ties with chords. Beam and tie markings must be placed outside the chord markers: @quotation @lilypond[relative 0, fragment,verbatim] r4 <>8-[ <>-]-~ <> @end lilypond @end quotation @quotation @example r4 <>8-\>-( <> <> <>8-\!-) @end example @lilypond[relative 0, fragment] \slurUp r4 <>8-\>-( <> <> <>8-\!-) @end lilypond @end quotation @separate @node More basic rhythms @subsection More basic rhythms A pickup (or upstep) is entered with the keyword @code{\partial}. It is followed by a duration: @code{\partial 4} is a quarter note upstep and @code{\partial 8} an eighth note. @lilypond[relative 1,verbatim,fragment] \partial 8 f8 c2 d e @end lilypond Tuplets are made with the @code{\times} keyword. It takes two arguments: a fraction and a piece of music. The duration of the piece of music is multiplied by the fraction. Triplets make notes occupy 2/3 of their notated duration, so a triplet has 2/3 as its fraction. @c @lilypond[relative 0,verbatim,fragment] \times 2/3 { f8 g a } \times 2/3 { c r c } @end lilypond Grace notes are also made by prefixing a note, or a set of notes with a keyword. In this case, the keyword is @code{\grace}. @lilypond[relative 1, verbatim,fragment] c4 \grace b16-( c4-) \grace { d16-( e } d4-) @end lilypond @noindent More information on the use of grace notes is in @ref{Grace notes}. @node Commenting input files @subsection Commenting input files Comments are pieces of the input that are ignored. There are two types of comments. A line comments are introduced by @code{%}: after that, the rest of that line is ignored. Block comments span larger sections of input. Anything that is enclosed in @code{%@{} and @code{%@}} is ignored too. The following fragment shows possible uses for comments. @example % notes for twinkle twinkle follow: c4 c g' g a a %@{ This line, and the notes below are ignored, since they are in a block comment. g g f f e e d d c2 %@} @end example @node Printing lyrics @section Printing lyrics @cindex lyrics Lyrics are entered by separating each syllable with a space, and surrounding them with @code{\lyrics @{ @dots{} @}}, for example @example \lyrics @{ I want to break free @} @end example Like notes, lyrics are also a form of music, but they must not be printed on a staff, which is the default way to print music. To print them as lyrics, they must be marked with @code{ \context Lyrics}: @example \context Lyrics \lyrics @{ I want to break free @} @end example The melody for this song is as follows @lilypond[fragment,relative=1] \partial 8 c8 \times 2/3 { f4 g g } \times 2/3 { g4-( a2-) } @end lilypond The lyrics can be set to these notes, combining both with the @code{\addlyrics} keyword: @example \addlyrics \notes @{ @dots{} @} \context Lyrics @dots{} @end example The final result is @lilypond[verbatim,linewidth=6.0cm] \score { \notes { \addlyrics \relative c' { \partial 8 c8 \times 2/3 { f g g } \times 2/3 { g4-( a2-) } } \context Lyrics \lyrics { I want to break free } } \paper{ } } @end lilypond This melody ends on a @rglos{melisma}, a single syllable (``free'') sung to more than one note. This is indicated with a @emph{extender line}. It is entered as two underscores, i.e., @example \lyrics @{ I want to break free __ @} @end example @lilypond[] \score { \notes { \addlyrics \relative c' { \partial 8 c8 \times 2/3 { f g g } \times 2/3 { g4-( a2-) } %% ugh, this is to deal with bugs in the extender implementation \hideNotes c8 } \context Lyrics \lyrics { I want to break free __ } } \paper{ linewidth = 9.0 \cm } } @end lilypond Similarly, hyphens between words can be entered as two dashes, resulting in a centered hyphen between two syllables. @example Twin -- kle twin -- kle @end example @lilypond[singleline] \score { \addlyrics \notes \relative f' { \time 2/4 f4 f c' c' } \context Lyrics \lyrics { Twin -- kle twin -- kle } \paper { linewidth = 6.0 \cm } } @end lilypond More options, like putting multiple lines of lyrics below a melody are discussed in @ref{Vocal music}. TODO: discuss contexts. @node A lead sheet @section A lead sheet In popular music, it is common to denote accompaniment as chord-names. Using them in LilyPond has two parts, just like lyrics: entering the chords (with @code{\chords}), and printing them (with @code{\context ChordNames}). Chord names are entered by starting chords mode (with @code{\chords}). In chords mode, you can enter chords with a letter (indicating the root of the chord), and a durations following that. @c @lilypond[verbatim] \chords { c2 f4. g8 } @end lilypond @noindent The result of @code{\chords} is a list of chords, and is equivalent to entering chords with @code{<<@dots{}>>}. Other chords can be created by adding modifiers, after a colon. The following example shows a few common modifiers @c @lilypond[verbatim] \chords { c2 f4:m g4:maj7 gis1:dim7 } @end lilypond Printing chords is done by adding @code{\context ChordNames} before the chords thus entered: @c @lilypond[verbatim] \context ChordNames \chords \chords { c2 f4.:m g4.:maj7 gis8:dim7 } @end lilypond A complete list of modifiers, and other options for layout are in the reference manual section @ref{Chords}. @cindex lead sheet When put together, chord names, lyrics and a melody form a lead sheet, for example, @example \score @{ < \context ChordNames \chords @{ @emph{chords} @} \addlyrics \notes @emph{the melody} \context Lyrics \lyrics @{ @emph{the text} @} > \paper @{ @} @} @end example @lilypond[] \score { < \context ChordNames \chords { r8 c2:sus4 f } \addlyrics \notes \relative c' { \partial 8 c8 \times 2/3 { f g g } \times 2/3 { g4-( a2-) } } \context Lyrics \lyrics { I want to break free __ } > \paper{ raggedright = ##t } } @end lilypond @node Listening to output @section Listening to output MIDI (Musical Instrument Digital Interface) is a standard for connecting and recording digital instruments. A MIDI file is like a tape recording of a MIDI instrument. The @code{\midi} block makes the music go to a MIDI file, so you can listen to the music you entered. It is great for checking the music: octaves that are off, or accidentals that were mistyped, stand out very much when listening to the musical transcription. @code{\midi} can be used in similarly to @code{\paper @{ @}}, for example @example \score @{ @var{..music..} \midi @{ \tempo 4=72 @} \paper @{ @} @} @end example Here, the tempo is specified using the @code{\tempo} command. In this case the tempo of quarter notes is set to 72 beats per minute. More information on auditory output is in the @ref{Sound} section in the notation manual. @node Titling @section Titling Bibliographic information is entered in a separate block, the @code{\header} block. The name of the piece, its composer, etc. are entered as assignment within @code{\header @{ @dots{} @}}. For example, @example \header @{ title = "Eight miniatures" composer = "Igor Stravinsky" tagline = "small is beautiful" @} \score @{ @dots{} @} @end example @cindex bibliographic information @cindex titles @cindex composer @cindex ly2dvi When the file is processed by @code{ly2dvi}, the title and composer specified are printed above the music. The `tagline' is a short line printed at bottom of the last page, which normally says ``Lily was here, version @dots{}''. In the example above, it is replaced by the line ``small is beautiful.'' Normally, the @code{\header} is put at the top of the file. However, for a document that contains multiple pieces (e.g. a etude book, or part with multiple movements), then the header can be put into the @code{\score} block as follows In this case, the name of each piece will be printed before each movement. @cindex Lily was here @cindex signature line @cindex tag line @example \header @{ title = "Eight miniatures" composer = "Igor Stravinsky" tagline = "small is beautiful" @} \score @{ @dots{} \header @{ piece = "Adagio" @} @} \score @{ @dots{} \header @{ piece = "Menuetto" @} @} @end example More information on titling can be found in @ref{Invoking ly2dvi}. @node Single staff polyphony @section Single staff polyphony When different melodic lines are combined on a single staff, these are printed as polyphonic voices: each voice has its own stems, slurs and beams, and the top voice has the stems up, while the bottom voice has stems down. Entering such parts is done by entering each voice as a sequence (with @code{@{ .. @}}), and combing those simultaneously, separating the voices with @code{\\}: @example < @{ a4 g2 f4-~ f4 @} \\ @{ r4 g4 f2 f4 @} > @end example @lilypond[relative 1] \context Staff < { a4 g2 f4-~ f4 } \\ { r4 g4 f2 f4 } > @end lilypond For polyphonic typesetting spacer rests can also be convenient: these are rests that do not print. It is useful for filling up voices that temporarily do not play: @example < @{ a4 g2 f4-~ f4 @} \\ @{ s4 g4 f2 f4 @} > @end example @lilypond[relative 1] \context Staff < { a4 g2 f4-~ f4 } \\ { s4 g4 f2 f4 } > @end lilypond More features of polyphonic typesetting are in the notation manual in @ref{Polyphony}. @node Piano staffs @section Piano staffs @cindex staff switch, manual @cindex cross staff voice, manual @cindex @code{\translator} Piano music is always typeset in two staffs connected by a brace. Printing such a staff is done similar to the polyphonic example in @ref{More basics}: @example < \context Staff = up @{ @dots{} @} \context Staff = down @{ @dots{} @} > @end example but now this entire expression must be interpreted as a @code{PianoStaff}: @example \context PianoStaff < \context Staff @dots{} > @end example Here is a full-fledged example: @lilypond[relative 0,fragment] \context PianoStaff < \context Staff = up { c4 c g' g } \context Staff = down { \clef bass c, c' e c } > @end lilypond More information on formatting piano music is in @ref{Piano music}. @node Setting variables @section Setting variables When the music is converted from notes to print, it is interpreted from left-to-right order, similar to what happens when we read music. During this step, context-sensitive information, such as the accidentals to print, and where barlines must be placed, are stored in variables. These variables are called @emph{translation properties}. The properties can also be manipulated from input files: for example, @example \property Staff.autoBeaming = ##f @end example sets the property named @code{autoBeaming} in the current staff to @code{##f} which means `false'. This property controls whether beams are printed automatically: @lilypond[relative 1,fragment,verbatim] c8 c c c \property Staff.autoBeaming = ##f c8 c c c @end lilypond @noindent LilyPond includes a built-in programming language, namely, a dialect of Scheme. The argument to @code{\property}, @code{##f}, is an expression in that language. The first hash-mark signals that a piece of Scheme code follows. The second hash character is part of the boolean value true (@code{#t}). Values of other types may be entered as follows @itemize @bullet @item a string, enclosed in double quotes, for example @example \property Staff.instrument = #"French Horn" @end example @item a boolean: either @code{#t} or @code{#f}, for true and false respectively, e.g. @example \property Voice.autoBeaming = ##f \property Score.skipBars = ##t @end example @item a number @example \property Score.currentBarNumber = #20 @end example @item a symbol, which is introduced by a quote character, @example \property Staff.crescendoSpanner = #'dashed-line @end example @item a pair, which is also introduced by a quote character. The following statements set properties to the pairs (-7.5, 6) and (3, 4) respectively. @example \property Staff.minimumVerticalExtent = #'(-7.5 . 6) \property Staff.timeSignatureFraction = #'(3 . 4) @end example @end itemize There are many different properties, and not all of them are listed in this manual. However, the internal documentation lists them all in the @internalsref{All translation properties}, and almost all properties are demonstrated in one of the @ifhtml @uref{../../../input/test/out-www/collated-files.html,tips-and-tricks} @end ifhtml @ifnothtml tips-and-tricks @end ifnothtml examples. @node Fine tuning layout @section Fine tuning layout Sometimes it is necessary to change music layout by hand. When music is formatted, layout objects are created for each symbol. For example, every clef and every note head is represented by a layout object. These layout objects also carry variables, which we call @emph{layout properties}. By changing these variables from their values, we can alter the look of a formatted score. @lilypond[verbatim,relative 0] c4 \property Voice.Stem \override #'thickness = #3.0 c4 c4 c4 @end lilypond @noindent In the example shown here, the layout property @code{thickness} (a symbol) is set to 3 in the @code{Stem} layout objects of the current Voice. As a result, the notes following @code{\property} have thicker stems. In most cases of manual overrides, only a single object must be changed. This can be achieved by prefix @code{\once} to the @code{\property} statement, i.e., @example \once \property Voice.Stem \set #'thickness = #3.0 @end example @lilypond[relative 0] c4 \once \property Voice.Stem \set #'thickness = #3.0 c4 c4 c4 @end lilypond @noindent Some overrides are so common that predefined commands are provided as a short cut. For example, @code{\slurUp} and @code{\stemDown}. These commands are described in the @ref{Notation manual}, under the sections for slurs and stems respectively. The exact tuning possibilities for each type of layout object are documented in the internal documentation of the respective object. However, many layout objects share properties, which can be used to apply generic tweaks. We mention a couple of these: @itemize @bullet @cindex @code{extra-offset} @item The @code{extra-offset} property moves around objects in the printout. The unit of these offsets are staff-spaces. The first number controls left-right movement; a positive number will move the object to the right. The second number controls up-down movement; a positive number will move it higher. The @code{extra-offset} is a low-level feature: the formatting engine is completely oblivious to these offsets. In the following example example, the second fingering is moved a little to the left, and 1.8 staff space downwards. @cindex setting object properties @lilypond[relative 1,verbatim] \stemUp f-5 \once \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) f-5 @end lilypond @item Setting the @code{transparent} property will make an object be printed in `invisible ink': the object is not printed, but all its other behavior is retained. The object still takes space, takes part in collisions, and slurs, ties and beams can be attached to it. @cindex transparent objects @cindex removing objects @cindex invisible objects The following example demonstrates how to connect different voices using ties. Normally ties only happen between notes of the same voice. By introducing a tie in a different voice, and blanking a stem in that voice, the tie appears to cross voices. @lilypond[fragment,relative 1] \context Staff < { \once \property Voice.Stem \set #'transparent = ##t b8~ b8 } \\ { b-[ g8-] } > @end lilypond @item The @code{padding} property for objects with @code{side-position-interface} can be set to increase distance between symbols that are printed above or below notes. An example of the use of padding is in @ref{Constructing a tweak}. @end itemize More specific overrides are also possible. The notation manual discusses in depth how to figure out these statements for yourself, in @ref{Tuning output}. @node Organizing larger pieces @section Organizing larger pieces When all of the elements discussed earlier are combined to produce larger files, the @code{\score} blocks get a lot bigger, because the music expressions are longer, and, in the case of polyphonic and/or orchestral pieces, more deeply nested. By using variables, also known as identifiers, it is possible to break up complex music expressions. An identifier is assigned as follows @example namedMusic = \notes @{ @dots{} @end example The contents of the music expression @code{namedMusic}, can be used later by preceding the name with a backslash, i.e. @code{\namedMusic}. For example @lilypond[singleline,verbatim] seufzer = \notes { dis'8 e'8 } \score { \notes { \seufzer \seufzer } } @end lilypond The name of an identifier should only have alphabetic characters only, and no numbers, underscores or dashes. The assignment should be outside of the @code{\score} block. It is possible to use variables for many other types of objects in the input. For example, @example width = 1.5\cm name = "Wendy" aFivePaper = \paper @{ paperheight = 22.7 \cm @} @end example Depending on its contents, the identifier can be used in different places. The following example uses the above variables: @example \score @{ \notes @{ c4^\name @} \paper @{ \aFivePaper linewidth = \width @} @} @end example More information on the possible uses of identifiers is in the technical manual, in @ref{Scheme datatypes}. @node An orchestral part @section An orchestral part In orchestral music, all notes are printed twice: both in a part for the musicians, and in a full score for the which is printed both in parts as in full score. Identifiers can be used to avoid double work: the music is entered once, and stored in an variables. The contents of that variable is then used to generate both the part and the score. It is convenient to define the notes in a special file, for example, suppose that the following is in @file{horn-music.ly}: @example hornNotes = \notes \relative c @{ \time 2/4 r4 f8 a cis4 f e d @} @end example Then, an individual part is made by putting the following in a file @example \include "horn-music.ly" \header @{ instrument = "Horn in F" @} \score @{ \notes \transpose c' f \hornNotes @} @end example The @code{\include} command substitutes the contents of the file at this position in the file, so that @code{hornNotes} is defined afterwards. Since the horn is tuned in F, the @code{\transpose} command is used. The code @code{\transpose c' f} indicates that the argument, being @code{\hornNotes} should be transposed by a fifth downwards: the @code{c'} becomes a @code{f}. The transposition can be seen in the following output: @lilypond[singleline] \score { \notes \transpose c' f \notes \relative c' { \time 2/4 r4 f8 a cis4 f e d } } @end lilypond In ensemble pieces, one of the voices often does not play for many measures. This is denoted by a special rest, the multi-measure rest. It is entered with a capital R, and followed by a duration (1 for a whole note, 2 for a half note, etc.) By multiplying the duration, longer rests can be constructed. For example, the next rest takes 3 measures in 2/4 time. @example R2*3 @end example When printing the part, the following @code{skipBars} property must be set to false, to prevent the rest from being expanded in three one bar rests. @example \property Score.skipBars = ##t @end example The result would look like @lilypond[singleline] \score {\notes { \transpose c' f \relative c' { \time 2/4 \property Score.skipBars = ##t R2*3 r4 f8 a cis4 f e d } }} @end lilypond The score is made by combining all of the music in a @code{\score} block, assuming that the other voice is in @code{hornNotes}, in the file @file{horn-music.ly}: @example \include "fagot-music.ly" \include "horn-music.ly" \score @{ \simultaneous @{ \context Staff = hornStaff \hornNotes \context Staff = fagStaff \fagottoNotes @} @} @end example This would lead to the following output: @lilypond[singleline] \score { \notes \relative c \simultaneous { \context Staff = hornStaff { \time 2/4 R2*3 r4 f8 a cis4 f e d } \context Staff = fagStaff { \clef bass r4 d,8 f | gis4 c | b bes | a8 e f4 | g d | gis f } } } @end lilypond More in depth information is in the notation manual, in @ref{Orchestral music}. @node Integrating text and music @section Integrating text and music TODO: shorten. @cindex La@TeX{}, music in @cindex HTML, music in @cindex Texinfo, music in Sometimes you might want to use music examples in a text that you are writing (for example a musicological treatise, a songbook, or (like us) the LilyPond manual). You can make such texts by hand, simply by importing a PostScript figure into your word processor. However, there is an automated procedure to reduce the amount of work. If you use HTML, La@TeX{}, or Texinfo, you can mix text and LilyPond code. A script called @code{lilypond-book} will extract the music fragments, run LilyPond on them, and put back the resulting notation. This program is fully described in @ref{lilypond-book manual}. Here we show a small example. Since the example also contains explanatory text, we will not comment it further. @example \documentclass[a4paper]@{article@} \begin@{document@} In a lilypond-book document, you can freely mix music and text. For example: \begin@{lilypond@} \score @{ \notes \relative c' @{ c2 g'2 \times 2/3 @{ f8 e d @} c'2 g4 @} @} \end@{lilypond@} Notice that the music line length matches the margin settings of the document. If you have no \verb+\score+ block in the fragment, \texttt@{lilypond-book@} will supply one: \begin@{lilypond@} c'4 \end@{lilypond@} In the example you see here, two things happened: a \verb+\score+ block was added, and the line width was set to natural length. You can specify many more options using \LaTeX style options in brackets: \begin[verbatim,11pt,singleline, fragment,relative,intertext="hi there!"]@{lilypond@} c'4 f bes es \end@{lilypond@} The option \texttt@{verbatim@} prints the LilyPond code in addition to the graphical score, \texttt@{11pt@} selects the default music size, \texttt@{fragment@} adds a score block, \texttt@{relative@} uses relative mode for the fragment, and \texttt@{intertext@} specifies what to print between the \texttt@{verbatim@} code and the music. If you want to include large examples into the text, it may be more convenient to put the example in a separate file: \lilypondfile[printfilename]@{screech-boink.ly@} The \texttt@{printfilename@} option adds the file name to the output. \end@{document@} @end example Under Unix, you can view the results as follows. @example $ cd input/tutorial $ mkdir -p out/ $ lilypond-book --outdir=out/ lilbook.tex lilypond-book (GNU LilyPond) 1.7.23 Reading `input/tutorial/lilbook.tex' Reading `input/screech-boink6.ly' @var{lots of stuff deleted} Writing `out/lilbook.latex' $ cd out $ latex lilbook.latex @var{lots of stuff deleted} $ xdvi lilbook @end example Running lilypond-book and running latex creates a lot of temporary files, and you would not want those to clutter up your working directory. The @code{outdir} option to lilypond-book creates the temporary files in a separate subdirectory @file{out}. The result looks more or less like this: @separate In a lilypond-book document, you can freely mix music and text. For example: @lilypond \score { \notes \relative c' { c2 g'2 \times 2/3 { f8 e d } c'2 g4 } \paper { raggedright = ##t } } @end lilypond Notice that the music line length matches the margin settings of the document. If you have no @code{\score} block in the fragment, @code{lilypond-book} will supply one: @lilypond c'4 @end lilypond In the example you see here, a number of things happened: a @code{\score} block was added, and the line width was set to natural length. You can specify many more options using La@TeX{} style options in brackets: @lilypond[verbatim,11pt,singleline, fragment,relative,intertext="hi there!"] c'4 f bes es @end lilypond The option @code{verbatim} also shows the LilyPond code, @code{11pt} selects the default music size, @code{fragment} adds a score block, @code{relative} uses relative mode for the fragment, and @code{intertext} specifies what to print between the @code{verbatim} code and the music. If you include large examples into the text, it may be more convenient to put the example in a separate file: @lilypondfile[printfilename]{screech-boink.ly} The @code{printfilename} option adds the file name to the output.