@c -*-texinfo-*-

@c TODO:
@c   * LilyPond Lilypond lilypond (sometimes: the program)
@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
<!--- @@WEB-TITLE@@=Tutorial --->
@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::                
* Organising larger pieces::    
* Fine tuning a piece::         
* An orchestral score::         Conductor's score and individual parts
* Integrating text and music::  Integrating text and music
@end menu

Operating is done through text files: To print a piece of music, you
enter the music in a file.  When LilyPond is run (normally using the
program @code{ly2dvi}) on that file, another file containing formatted
sheet music, is produced. That file may be printed or viewed.

This tutorial starts with a small introduction to the LilyPond music
language.  After this first contact, we will show which commands to
run to produce printed output, so you should then be able to create
your first sheets of music.  The tutorial continues with more and more
complex examples.


@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}.


When you enter these commands in a file, you must to enclose them in
@code{\notes @{@dots{}@}}.  This lets LilyPond know 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 MS 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

Windows users can start the terminal 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 the choices, you
can enter beams 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

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{<} and @code{>}, as is
demonstrated here:

@quotation
@lilypond[fragment,verbatim]
<
  \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.

@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

Notice that the time signature is specified in one melody staff only
(the top staff), but is printed on both.  LilyPond knows that the time
signature should be the same for all staves.

@separate

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 <<c e g>>4 <<c f a>>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 <<c e g>>8-[ <<c f a>>-]-~ <<c f a>>
@end lilypond
@end quotation

@quotation
@example
r4 <<c e g>>8-\>-( <<c e g>> <<c e g>>  <<c f a>>8-\!-)
@end example
@lilypond[relative 0, fragment]
\slurUp
r4 <<c e g>>8-\>-( <<c e g>> <<c e g>>  <<c f a>>8-\!-)
@end lilypond
@end quotation
@separate


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.
@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 for a triplet, the fraction is 2/3.
@c
@lilypond[relative 0,verbatim,fragment]
  \times 2/3 { f8 g a }
  \times 2/3 { c r c }
@end lilypond 




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[singleline,verbatim]
\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[singleline]
\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

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
 }}
@end lilypond

More options, like putting multiple lines of lyrics below a melody are
discussed in @ref{Vocal music}.


@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
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{\\}:

@lilypond[verbatim,relative]
  < { a4 g2 f4-~ f4 } \\
    { r4 g4 f2 f4 } >
@end lilypond
 
More features of polyphonic typesetting are in the notation manual,
@ref{Polyphony}.

@node Piano staffs
@section Piano staffs

@cindex staff switch, manual
@cindex cross staff voice, manual
@cindex @code{\translator}




@node Organising larger pieces
@section Organising larger pieces

TODO: discuss identifiers, p&c, .

@separate
@example 
\version "1.5.72"
@end example 
Lilypond and its language are still under development, and
occasionally details of the syntax are changed.  The @code{version}
fragment indicates which LilyPond version the input file was written
for.  When you compile this file, the version number will be
checked. When the file is too old, a warning is issued.  The version
number is also used by the @code{convert-ly} program (See
@ref{Invoking convert-ly}), which updates the file to the latest
version automatically.


@separate
@example 
s1 s2. r4 
@end example 
@code{s} is a spacer rest.  It does not print anything, but it does have
the duration of a rest. It is useful for filling up voices that
temporarily do not play. In this case, the viola does not come until one
and a half measure later. 

@separate
@example 
\grace <<e g>>-( <<d f>>4-) <<c e>>2 
@end example
@cindex @code{\grace}
@cindex ornaments
@cindex grace notes
@code{\grace} introduces grace notes.  It takes one argument, in this
case a chord. A slur is introduced starting from the @code{\grace}
ending on the following chord.

@separate
@example 
\times 2/3 
@end example
@cindex tuplet
@cindex triplets

@separate
@example 
@{ <<d f>>8 <<e g>> <<f a>> @} 
@end example 
The piece of music to be `tripletted' is sequential music containing
three chords.


The bass has a little hoom-pah melody to demonstrate parts switching
between staves.  Since it is repetitive, we use repeats:
@separate
@example 
hoomPah  =  \repeat unfold 8
@end example
@cindex unfolded @code{\repeat}
The unfolded repeat prints the notes in its argument as if they were
written out in full eight times.
@separate

@node Fine tuning a piece
@section  Fine tuning a piece

In this section we show some ways to fine tune the final output of a
piece.  We do so using a single measure of a moderately complex piano
piece: a Brahms intermezzo (opus 119, no. 1).  Both fragments (the
tuned and the untuned versions) are in @file{input/tutorial/}.

The code for the untuned example shows us some new things.

@lilypondfile[verbatim]{brahms-original.ly}


@cindex dynamics
@cindex loudness
@cindex forte
@cindex crescendo




Now that we have the basic piece of music entered, we want to fine
tune it so that we get something that resembles the original printed
edition by Schott/Universal Edition:

@lilypondfile{brahms-tweaked.ly}

@cindex tuning graphical objects

Fine tuning involves overriding the defaults of the printing system.
We do this by setting variables which control how Lilypond prints
symbols.  Printed symbols are called graphical objects (often
abbreviated to @emph{grob}). Each object is described by a bunch of
settings.  Every setting is a variable: it has a name and a value
which you can change.  These values determine the fonts, offsets,
sub-routines to be called on the object, etc.  The initial values of
these settings are set in the Scheme file
@file{scm/grob-description.scm}.

@cindex slur attachments

We start with the slur in the upper part, running from F sharp to A.  In
the printed edition, this slur runs from stem to stem; in our version,
the slur begins at the note head of the F sharp.  The following property
setting forces all slurs to run from stem to stem (not from or to note
heads!).

@example
  \property Voice.Slur \set #'attachment = #'(stem . stem)
@end example

More precisely, this command modifies the definition of the @code{Slur}
object in the current @code{Voice}.  The variable @code{attachment} is
set to the pair of symbols @code{'(stem . stem)}. 

@cindex internal documentation
@cindex finding graphical objects
@cindex graphical object descriptions 

This command fixes one particular problem with a slur. The rest of
this section explains how to figure out which properties to tune for
your own scores. To discover this, you must have a copy of the
internals document. This is a set of HTML pages which should be
included if you installed a binary distribution.  [TODO: revise for
new site.]  These HTML pages are also available on the web: go to the
LilyPond website, click ``Documentation: Index'' on the side bar, look
in the ``Information for uses'' section, and click on ``Documentation
of internals.''

You might want to bookmark either the HTML files on your disk, or the
one on the web (the HTML on your hard drive will load much faster than
the ones on the web!).  One word of caution: the internals
documentation is generated from the definitions that the program uses.
Hence, the internals documentation is strongly tied to the version you
use.  Before you proceed, make sure that the program and documentation
have matching version numbers.

@c  TODO: the quote is incorrect, although that shouldn't be a big
@c    problem for the reader.
Suppose that you wanted to tune the behavior of the slur.  The first
step is to get some general information on slurs in LilyPond.  Turn to
the index, and look up ``slur''. The section on slurs says
@quotation
The grob for this object is @internalsref{Slur}, generally in
@internalsref{Voice} context.
@end quotation

So the graphical object for this object is called @code{Slur}, and
slurs are created in the @code{Voice} context.  If you are reading
this tutorial in the HTML version, then you can simply click Slur,
otherwise, you should look it up the internal documentation: click
``grob overview'' and select ``slur'' (the list is alphabetical).

Now you get a list of all the properties that the slur object
supports, along with their default values.  Among the properties we
find the @code{attachment} property with its default setting.  
The property documentation explains that the following setting will
produce the desired effect:
@example 
 \property Voice.Slur \set #'attachment = #'(stem . stem)
@end example

@c this is a long section, and adding an extra space here helps to
@c break it into smaller subsections and thus is easier to understand.
@separate

Next we want to move the fingering `3'.  In the printed edition it is
not above the stem, but a little lower and slightly left of the stem.
From the user manual we find that the associated graphical object is
called @code{Fingering}, but how do we know if we should use
@code{Voice} or @code{Staff}?  In many cases, @code{Voice} is a safe
bet, but you can also deduce this information from the internals
documentation: if you visit the documentation of @code{Fingering}, you
will notice
@example
Fingering grobs are created by: Fingering_engraver
@end example

Clicking @code{Fingering_engraver} will show you the documentation of
the module responsible for interpreting the fingering instructions and
translating them to a @code{Fingering} object.  Such a module is called
an @emph{engraver}.  The documentation of the @code{Fingering_engraver}
says
@example
Fingering_engraver is part of contexts: Voice and TabVoice
@end example
so tuning the settings for Fingering should be done using either
@example
  \property Voice.Fingering \set @dots{}
@end example
or
@example
  \property TabVoice.Fingering \set @dots{}
@end example

Since the @code{TabVoice} is only used for tab notation, we see that
the first guess @code{Voice} was indeed correct.

@cindex setting object properties
@cindex @code{extra-offset}

For shifting the fingering, we use the property @code{extra-offset}.
The following command manually adds an offset to the object.  We move
it a little to the left, and 1.8 staff space downwards.
@example
 \once \property Voice.Fingering \set #'extra-offset = #'(-0.3 . -1.8) 
@end example   
The @code{extra-offset} is a low-level feature: it moves around
objects in the printout; the formatting engine is completely oblivious
to these offsets.  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.
We only want to offset a single object, so this statement is adorned
with @code{\once}.

@cindex property types
@cindex translator properties
@cindex grob properties
@cindex music properties
@separate

There are three different types of variables in LilyPond, something
which can be confusing at first (and for some people it stays
confusing).  Variables such as @code{extra-offset} and
@code{attachment} are called grob properties.  They are not the same
as translator properties, like @code{autoBeaming}.  Finally, music
expressions are internally stored using properties (so-called music
properties).  You will encounter music properties if you run Scheme
functions on music using @code{\apply}.

The second fingering instruction should be moved up a little to avoid
a collision with the slur.  This could be achieved with
@code{extra-offset}, but in this case, a simpler mechanism also
works.  We insert an empty text between the 5 and the note. The empty
text pushes the fingering instruction away:
@example
  a-)^" "^\markup @{ \finger "5" @} 
@end example

A fingering instruction, which would be entered as @code{^5}, is put
as close to the notes as possible, closer than the space entered to
push away the 5. Hence, the 5 is entered as a normal text, with the
formatting of fingering instructions.
 
@separate

Normally one would specify all dynamics in the same voice, so that
dynamics (such as @b{f} and @b{p}) will be aligned with hairpins.  But
in this case, we do not want the decrescendo to be aligned with the
piano sign.  We achieve this by putting the dynamic markings in different
voices.  The crescendo should be above the upper staff.  This can be
forced by using the precooked command 
@example
  \dynamicsUp
@end example

However, if you do that the decrescendo will be too close to the upper
voice and collide with the stems.  Looking at the manual for dynamics,
we notice that ``Vertical positioning of these symbols is handled by
the @internalsref{DynamicLineSpanner} grob.''.  If we turn to the
documentation of @code{DynamicLineSpanner}, we find that
@code{DynamicLineSpanner} supports several so-called `interfaces'.
This object not only puts objects next to the staff
(@code{side-position-interface}), but it also groups dynamic objects
(@code{axis-group-interface}), is considered a dynamic sign itself
(@code{dynamic-interface}), and is an spanning object
(@code{spanner-interface}).  It also has the standard
@code{grob-interface} with all the variables that come with it.

For the moment we are interested in side positioning:
@quotation
 side-position-interface

  Position a victim object (this one) next to other objects (the
  support).  In this case, the direction signifies where to put the
  victim object relative to the support (left or right, up or down?)
@end quotation
Between the object and its support (in this case, the descending
notes), there should be more space.  This space is controlled by
@code{padding}, so we increase it.
@example
 \property Voice.DynamicLineSpanner \override #'padding = #5.0
@end example


@separate

Brahms uses music notation is a slightly unorthodox way.  Ties
usually happen only within one voice.  In this piece, the composer
gladly produces ties that jump voices.  We deal with this by faking
these ties: whenever we need such a tie, we insert a notehead in a
different voice, and blank the stem.  This is done in the following
snippet of code.

@cindex transparent objects
@cindex removing objects
@cindex invisible objects
@example
\property Voice.Stem \set #'transparent = ##t
d'
@end example
Blanking the stem should be done for only one object. One of the ways
to achieve that, is by setting the property before a note. Reverting
it afterwards is tedious, so for setting a property only once, we have
the syntax @code{\once}: it reverts the property directly before
proceeding to the next step in time.

The @code{\once} keyword is added to @code{\property}.


Finally, the last tie is forced up using @code{\tieUp}.

@separate

Here is the complete ``fine tuned'' version, which includes all the
modifications we discussed in this section:

@lilypondfile[verbatim]{brahms-tweaked.ly}


@node An orchestral score
@section An orchestral score

@menu
* The full score::              
* Extracting an individual part::  
@end menu


Our next two examples demonstrate one way to create an orchestral
score in LilyPond.  When typesetting a piece for several instruments,
you will want to create a full score (for the conductor) along with
several individual parts (for the players).

  We will declare the music for each instrument individually, giving
the music of each instrument its own name.  These pieces of music are
then combined in different @code{\score} blocks to produce different
combinations of instruments (for example, one @code{\score} block may
only include the cello part; another @code{\score} block may be for
all the strings, and yet another @code{\score} block may be for all
parts together).

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 will be used for producing the score and the
separate parts, but the file does not produce any sheet music itself.
Other files reference it by stating @code{\include "os-music.ly"}.

@example
% os-music.ly
\header @{
  title = "Zo, goed lieverd?"
  subtitle = "How's, this babe?"
  composer = "JCN"
  opus = "1"
  piece = "Laid back"
@}
global = @{
  \time 2/4
  \skip 2*4 \bar "|."
@}
Key = \notes \key as \major
flautoI = \notes\relative c'' @{
  f8 g f g f g f g
  bes as bes as bes as bes as
@}
flautoII = \notes\relative c'' @{
  as8 bes as bes R1 d4 ~ d
@}
tromboI = \notes\relative c'' @{
  c4. c8 c8 c4. es4 r as, r
@}
tromboII = \notes\relative c'' @{
  as4. as8 as8 as4. R1*1/2 as4 es'
@}
timpani = \notes\relative c, @{
  \times 2/3 @{ f4 f f @}
  \times 4/5 @{ as8 as as as as @}
  R1
@}
corno = \notes\relative c' @{
   bes4 d f, bes d f, bes d
@}
@end example

We will not examine this example line by line, since you already know
most of it.  We'll examine a few lines which contain new elements.


@separate
@example
global = @{
  \time 2/4
  \skip 2*4 \bar "|."
@}
@end example

This declares settings to be used globally.  The @code{\skip} command
produces no output, but moves forward in time: in this case, the
duration of a half note (@code{2}), and that four times (@code{*4}).
This brings us to the end of the piece, and we can set the end bar.
You can use @code{s} as a shortcut for @code{\skip} (the last line of
this section would be @code{s2*4 \bar"|."}).

@separate
@example
Key = \notes \key as \major
@end example
This declares the key signature of the piece and assign it to the
identifier @var{Key}.  Later on we will use @code{\Key} for all staves
except those for transposing instruments.

@node The full score
@subsection The full score


The second file, @inputfileref{input/tutorial,os-score.ly}, reads the
definitions of the first (@inputfileref{input/tutorial,os-music.ly}), and
defines the @code{\score} block for the full conductor's score.

@example
\version "1.7.6"

\include "os-music.ly"
\include "paper13.ly"

textFlat = \markup @{\smaller \musicglyph #"accidentals--1"@}
\score @{
  <
    \global
    \property Score.BarNumber \override #'padding = #3
    \context StaffGroup = woodwind <
      \context Staff = flauti <
	\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 StaffGroup = timpani <
      \context Staff = timpani <
	\property Staff.midiInstrument = #"timpani"
	\property Staff.instrument = \markup @{ \column <<  "Timpani" "(C-G)" >> @}
	\property Staff.instr = #"Timp."
	\clef bass
        \Key
	\timpani
      >
    >
    \context StaffGroup = brass <
      \context Staff = trombe <
  	\property Staff.midiInstrument = #"trumpet"
	\property Staff.instrument = \markup @{ \column << "2 Trombe" "(C)" >> @}
	\property Staff.instr = \markup@{ \column << "Tbe." "(C)">> @}
        \Key
	\context Voice=one \partcombine Voice
	  \context Thread=one \tromboI
	  \context Thread=two \tromboII
      >
      \context Staff = corni <
        \property Staff.midiInstrument = #"french horn"
	\property Staff.instrument
	= \markup @{ \column << "Corno" @{ "(E"  \textFlat ")" @} >> @}
	\property Staff.instr =
	\markup @{ \column << "Cor." @{ "(E"  \textFlat ")" @} >> @}
	\property Staff.transposing = #3
	\notes \key bes \major
	\context Voice=one \corno
      >
    >
  >
  \paper @{
    indent = 15 * \staffspace
    linewidth = 60 * \staffspace
    textheight = 90 * \staffspace
    \translator@{
      \VoiceContext
      \consists "Multi_measure_rest_engraver"
    @}
    \translator@{
      \HaraKiriStaffContext
      \remove "Multi_measure_rest_engraver"
    @}
  @}
  \midi @{
    \tempo 4 = 75
  @}
@}
@end example

@center @strong{Zo, goed lieverd?}
@sp 1
@center How's, this babe?
@flushright
Opus 1.
@end flushright
@flushleft
@sc{Laid back}
@end flushleft

@lilypondfile{os-score.ly}

@separate
@example
\include "os-music.ly"
@end example
First we need to include the music definitions we made in
@file{os-music.ly}.

@ignore

[TODO: mention in a more relevant place]
  
@separate
@example
#(ly:set-point-and-click 'line-column)
@end example

This piece of Scheme code executes the function
@code{ly:set-point-and-click} with the argument
@code{line-column}.  Editing input files can be complicated if you are
working with large files: if you are 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: when you view the file with
Xdvi and click on a note, your editor will jump to the spot where that
note was entered.  For more information, see @ref{Point and click}.
@end ignore


@separate
@example
#(define text-flat '((font-relative-size . -2)
         (music "accidentals--1")))
@end example

To name the transposition of the french horn, we will need a piece of
text with a flat sign.  LilyPond has a mechanism for font selection and
kerning called Scheme markup text (See @ref{Text markup}).  The flat
sign is taken from the music font, and its name is @code{accidentals--1}
(The natural sign is called @code{accidentals-0}).  The default font is
too big for text, so we select a relative size of @code{-2}.

@separate
@example
  <
    \global
@end example
All staves are simultaneous and use the same global settings.

@separate
@example
    \property Score.BarNumber \override #'padding = #3
@end example
LilyPond prints bar numbers at the start of each line, but
unfortunately they end up a bit too close to the staff in this
example.  In LilyPond, a bar number is called @var{BarNumber}.
BarNumber objects can be manipulated through their
@var{side-position-interface}.  One of the properties of a
@var{side-position-interface} that can be tweaked is @var{padding}:
the amount of extra space that is put between this and other objects.
We set the padding to three staff spaces.

You can find information on all these kind of properties in LilyPond's
automatically generated documentation in
@ifnottex
@ref{ (lilypond-internals)lilypond-internals, LilyPond Internals}
or in @ref{Fine tuning a piece}.
@end ifnottex
@iftex
the online documentation or in the previous section of the tutorial.
@end iftex

@c  REFERENCE MAO

@separate
@example
    \context StaffGroup = woodwind <
      \context Staff = flauti <
@end example
A new notation context: the @code{StaffGroup}.  @code{StaffGroup} can
hold one or more @code{Staff}s, and will print a big bracket at the
left of the score.  This starts a new staff group for the woodwind
section (just the flutes in this case).  Immediately after that, we
start the staff for the two flutes, who also play simultaneously.

@separate
@example
        \property Staff.midiInstrument = #"flute"
@end example
Specify the instrument for MIDI output (see @ref{MIDI instrument
names}).

@separate
@example
        \property Staff.instrument = "2 Flauti"
        \property Staff.instr = "Fl."
@end example
This defines the instrument names to be printed in the
margin.  @code{instrument} specifies the name for the first line
of the score, @code{instr} is used for the rest of the score.

@separate
@example
        \Key
@end example
The flutes play in the default key.

@separate
@example
        \context Voice=one @{ \voiceOne \flautoI @}
        \context Voice=two @{ \voiceTwo \flautoII @}
@end example
Last come the actual flute parts.  Remember that we are still in
simultaneous mode.  We name both voices differently, so that LilyPond
will create two Voice contexts.  The flute parts are simple, so
we specify manually which voice is which: @code{\voiceOne} forces the
direction of stems, beams, slurs and ties up, @code{\voiceTwo} sets
directions down.

@separate
@example
      >
    >
@end example
Close the flutes staff and woodwind staff group.

@separate
@example
        \property Staff.instrument = #'(lines "Timpani" "(C-G)")
@end example
The timpani staff demonstrates a new piece of scheme markup, it sets two
lines of text.

@separate
@example
        \context Voice=one \partcombine Voice
          \context Thread=one \tromboI
          \context Thread=two \tromboII
@end example
You have seen the notation contexts Staff and Voice, but here is a new
one: Thread.  One or more Threads can be part of a Voice.  Thread
takes care of note heads and rests; Voice combine note heads onto a
stem.

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 are similar, and splits the threads up
when they are different.

@separate
@example
\property Staff.instrument = #`(lines "Corno"
  (columns "(E" ,text-flat ")"))
@end example
The french horn (``Corno'') has the most complex scheme markup name, made
up of two lines of text.  The second line has three elements (columns) --
the @code{(E}, the flat sign @code{text-flat} that we defined previously,
and a final @code{")"}.  We use a backquote instead of an
ordinary quote at the beginning of the Scheme expression to be able to
access the @code{text-flat} identifier, `unquoting' it with a ``@code{,}''.

@separate
@example
        \property Staff.transposing = #3
@end example
The french horn is to be tuned in E-flat, so we tell the MIDI back-end to
transpose this staff by three steps.

Note how we can choose different tunings for the text input, sheet music
output and, and MIDI output, using @code{\transpose} and the MIDI Staff
property @var{transposing}.

@separate
@example
        \notes \key bes \major
@end example
Since the horn is transposing, it is in a different key.

@separate
@example
    indent = 15 * \staffspace
    linewidth = 55 * \staffspace
@end example
We specify a big indent for the first line and a small linewidth for this
tutorial.

@separate

Usually the default setup of notation contexts (Thread, Voice, Staff,
Staffgroup, Score) is just fine.  But in this case we want a different
type of Staff context.

@example
    \translator@{
      \HaraKiriStaffContext
    @}
@end example

In orchestral scores it often happens that one instrument only has
rests during one line of the score.  @code{HaraKiriStaffContext} can
be used as a regular @code{StaffContext} drop-in and will take care of
the automatic removing of empty staves -- so if the strings are the
only instruments playing for a line, LilyPond will only print the string
parts for that line of the score.  This reduces the number of page turns
(and the number of dead trees!) required in a score.

@node Extracting an individual part
@subsection Extracting an individual part

The third file, @file{os-flute-2.ly} also reads the definitions of the
first (@file{os-music.ly}), and defines the @code{\score} block for the
second flute part.

@example
\include "os-music.ly"
\include "paper16.ly"

\score @{
  \context Staff <
    \property Score.skipBars = ##t
    \property Staff.midiInstrument = #"flute"
    \global
    \Key
    \flautoII
  >
  \header @{
    instrument = "Flauto II"
  @}
  \paper @{
    linewidth = 80 * \staffspace
    textheight = 200 * \staffspace
  @}
  \midi @{
    \tempo 4 = 75
  @}
@}
@end example

@center @strong{Zo, goed lieverd?}
@sp 1
@center How's, this babe?
@center @emph{Flauto II}
@flushright
Opus 1.
@end flushright
@flushleft
@sc{Laid back}
@end flushleft
@lilypondfile{os-flute-2.ly}


Because we separated the music definitions from the @code{\score}
instantiations, we can easily define a second score with the music of
the second flute.  This is the part for the second flute player.  Of
course, we would make separate parts for all individual instruments if
we were preparing the score for an orchestra.

@separate
@example
    \flautoII
@end example
In this individual part the second flute has a whole staff for itself,
so we do not want to force stem or tie directions.

@separate
@example
  \header @{
    instrument = "Flauto II"
  @}
@end example
The @code{\header} definitions were also read from @file{os-music.ly},
but we need to set the instrument for this particular score.

@separate
@example
    \property Score.skipBars = ##t
@end example
In the conductor's full score, all bars with rests are printed, but for
the individual parts, we want to print one multimeasure rest instead of
many consecutive empty bars.  LilyPond will do this if
@code{Score.skipBars} is set to true (@code{##t}).


@node Integrating text and music
@section Integrating text and music


@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]@{sammartini.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.16
Reading `input/tutorial/lilbook.tex'
Reading `input/tutorial/sammartini.ly'
@var{lots of stuff deleted}
Writing `out/lilbook.latex'
$ cd out
$ latex lilbook.latex
@var{lots of stuff deleted}
$ xdvi lilbook 
@end example

Notice the @code{outdir} option to lilypond-book. Running lilypond-book
and running latex creates a lot of temporary files, and you would not want
those to clutter up your working directory. Hence, we have them created
in a separate subdirectory.

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]{sammartini.ly}

The @code{printfilename} option adds the file name to the output.

