@c -*- coding: utf-8; mode: texinfo; -*-

@ignore
    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes..
@end ignore

@include included/generating-output.itexi

@c \version "2.19.21"

@node Tutorial
@chapter Tutorial

This chapter gives a basic introduction to working with LilyPond.

@menu
* Compiling a file::
* How to write input files::
* Dealing with errors::
* How to read the manuals::
@end menu

@node Compiling a file
@section Compiling a file

This section introduces @qq{compiling}---the processing of
LilyPond input files (written by you) to produce output files.

@menu
* Entering input::
* MacOS X::
* Windows::
* Command-line::
@end menu

@node Entering input
@subsection Entering input

@cindex compiling
@cindex first example
@cindex example, first
@cindex case sensitive

@menu
* Producing output::
@end menu

@qq{Compiling} is the term used for processing an input file in
LilyPond format to produce output file(s).  Output files are
generally PDF (for printing or viewing), MIDI (for playing), and
PNG (for online use).  LilyPond input files are simple text files.

This example shows a simple input file:

@example
\version "@w{@version{}}"
@{
  c' e' g' e'
@}
@end example

The graphical output is:

@c  in this case we don't want verbatim
@lilypond[quote]
{
  c' e' g' e'
}
@end lilypond

@warning{Notes and lyrics in LilyPond input must always be
surrounded by @w{@strong{@{ curly braces @}}}.  The braces
should also be surrounded by a space unless they are at the
beginning or end of a line to avoid ambiguities.  They may
be omitted in some examples in this manual, but don't forget them
in your own music!  For more information about the display of
examples in the manual, see @ref{How to read the manuals}.}

In addition, LilyPond input is @strong{case sensitive}.
@w{@samp{@{ c d e @}}} is valid input; @w{@samp{@{ C D E @}}} will
produce an error message.


@smallspace

@node Producing output
@unnumberedsubsubsec Producing output

@cindex PDF file
@cindex viewing music
@cindex text editors

The method of producing output depends on your operating system
and the program(s) you use.

@itemize

@item
@ref{MacOS X, @sourceimage{logo-macosx,,,}}
@ref{MacOS X, MacOS X} (graphical)

@item
@ref{Windows, @sourceimage{logo-windows,,,}}
@ref{Windows, Microsoft Windows} (graphical)

@item
@ref{Command-line, @sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}
@sourceimage{logo-macosx,,,}
@sourceimage{logo-windows,,,}
}
@ref{Command-line, All operating systems} (command-line)

@end itemize

There are several other text editors available with specific
support for LilyPond.  For more information, see
@rweb{Easier editing}.

@warning{The first time you ever run LilyPond, it may take a
minute or two because all of the system fonts have to be analyzed
first.  After this, LilyPond will be much faster!}


@node MacOS X
@subsection MacOS X

@cindex running LilyPond under MacOS X
@cindex MacOS X, running LilyPond

@lilypadOSX


@node Windows
@subsection Windows

@cindex running LilyPond under Windows
@cindex Windows, running LilyPond

@lilypadWindows


@node Command-line
@subsection Command-line

@cindex running LilyPond under Unix
@cindex Unix, running LilyPond

@lilypadCommandLine

@node How to write input files
@section How to write input files

This section introduces some basic LilyPond syntax to help get you
started writing input files.

@menu
* Simple notation::
* Working on input files::
@end menu


@node Simple notation
@subsection Simple notation

@cindex simple notation
@cindex notation, simple

@menu
* Pitches::
* Durations (rhythms)::
* Rests::
* Time signature::
* Tempo marks::
* Clef::
* All together::
@end menu

LilyPond will add some notation elements automatically.  In the
next example, we have only specified four pitches, but LilyPond
has added a clef, time signature, and rhythms.

@lilypond[verbatim,quote]
{
  c' e' g' e'
}
@end lilypond

@noindent
This behavior may be altered, but in most cases these automatic
values are useful.


@node Pitches
@unnumberedsubsubsec Pitches

@cindex pitches
@cindex relative mode
@cindex quote, single
@cindex comma
@cindex accidentals and relative mode
@cindex relative mode, and accidentals

@funindex \relative
@funindex '
@funindex ,

Music Glossary: @rglos{pitch}, @rglos{interval},
@rglos{scale}, @rglos{middle C}, @rglos{octave},
@rglos{accidental}.

LilyPond uses lower-case letters for pitches.  The letters
@code{c} through@tie{}@code{b} denote pitches in the
@q{small octave} below @notation{middle C}.  Added @code{'}
or@tie{}@code{,} suffixes indicate higher or lower octaves.
Here is a scale starting on @notation{middle C}, and an arpeggio:

@lilypond[verbatim,quote]
{ c' d' e' f' g' a' b' c'' g c' e' g' c'' e'' g'' c''' }
@end lilypond

The easiest way to enter notes is by using @code{\relative} mode.
In this mode, the octave is chosen automatically by assuming the
following note is always to be placed closest to the previous
note, i.e., it is to be placed in the octave which is within three
staff spaces of the previous note.  We begin by entering the most
elementary piece of music, a @notation{scale}, in which every note
is within just one staff space of the previous note.

@lilypond[verbatim,quote]
\relative {
  c' d e f
  g a b c
}
@end lilypond

The initial note is @notation{middle C}, denoted by @code{c'}.
Each successive note is
placed closest to the previous note -- in other words, the first
@code{c} is the closest C to middle C.  This is followed by the
closest D to the previous note.  We can create melodies which have
larger intervals, still using only @code{\relative} mode:

@lilypond[verbatim,quote]
\relative {
  d' f a g
  c b f d
}
@end lilypond

@noindent
In the previous example, the first note -- the @code{d'} with one
@code{'}-mark -- is the D in the octave starting from middle C
and going up to B.

By adding (or removing) quotes @code{'} or commas @code{,} from
the first note, we can change the starting octave:

@lilypond[verbatim,quote]
\relative {
  e'' c a c
}
@end lilypond

Relative mode can be confusing initially, but is the easiest way
to enter most melodies.  Let us see how this relative calculation
works in practice.  Starting from a B, which is on the middle line
in a treble clef, you can reach a C, D and E within 3 staff spaces
going up, and an A, G and F within 3 staff spaces going down.  So
if the note following a B is a C, D or E it will be assumed to be
above the B, and an A, G or F will be assumed to be below.

@lilypond[verbatim,quote]
\relative {
  b' c % c is 1 staff space up, so is the c above
  b d  % d is 2 up or 5 down, so is the d above
  b e  % e is 3 up or 4 down, so is the e above
  b a  % a is 6 up or 1 down, so is the a below
  b g  % g is 5 up or 2 down, so is the g below
  b f  % f is 4 up or 3 down, so is the f below
}
@end lilypond

Exactly the same happens even when any of these notes are
sharpened or flattened.  @notation{Accidentals} are
@strong{totally ignored} in the calculation of relative position.
Precisely the same staff space counting is done from a note at any
other position on the staff.

To add intervals that are larger than three staff spaces, we can
raise the @notation{octave} by adding a single quote @code{'} (or
apostrophe) to the note name.  We can lower the octave by adding a
comma @code{,} to the note name.

@lilypond[verbatim,quote]
\relative {
  a' a, c' f,
  g g'' a,, f'
}
@end lilypond

@noindent
To change a note by two (or more!) octaves, we use multiple
@code{''} or @code{,,} -- but be careful that you use two single
quotes @code{''} and not one double quote @code{"}@tie{}!
@c " - keeps quotes in order for context-sensitive editor -td

@node Durations (rhythms)
@unnumberedsubsubsec Durations (rhythms)

@cindex note durations
@cindex durations
@cindex rhythms
@cindex whole note
@cindex half note
@cindex quarter note
@cindex dotted note
@cindex notating durations

Music Glossary: @rglos{beam}, @rglos{duration},
@rglos{whole note}, @rglos{half note}, @rglos{quarter note},
@rglos{dotted note}.

The @notation{duration} of a note is specified by a number after
the note name:  @code{1} for a @notation{whole note}, @code{2} for
a @notation{half note}, @code{4} for a @notation{quarter note} and
so on.  @notation{Beams} are added automatically.

If you do not specify a duration, the previous duration is used
for the next note.  The duration of the first note defaults to a
quarter note.

@lilypond[verbatim,quote]
\relative {
  a'1
  a2 a4 a8 a
  a16 a a a a32 a a a a64 a a a a a a a a2
}
@end lilypond

To create @notation{dotted notes}, add a dot @code{.} to the
duration number.  The duration of a dotted note must be stated
explicitly (i.e., with a number).

@lilypond[verbatim,quote]
\relative {
  a'4 a a4. a8
  a8. a16 a a8. a8 a4.
}
@end lilypond

@node Rests
@unnumberedsubsubsec Rests

@cindex rest
@cindex notating rests

Music Glossary: @rglos{rest}.

A @notation{rest} is entered just like a note with the name
@code{r}@tie{}:

@lilypond[verbatim,quote]
\relative {
  a'4 r r2
  r8 a r4 r4. r8
}
@end lilypond


@node Time signature
@unnumberedsubsubsec Time signature

@cindex time signature

@funindex \time

Music Glossary: @rglos{time signature}.

The @notation{time signature} can be set with the @code{\time}
command:

@lilypond[verbatim,quote]
\relative {
  \time 3/4
  a'4 a a
  \time 6/8
  a4. a
  \time 4/4
  a4 a a a
}
@end lilypond

@node Tempo marks
@unnumberedsubsubsec Tempo marks

@cindex tempo marks
@cindex metronome marks

@funindex \tempo

Music Glossary: @rglos{tempo indication}, @rglos{metronome}.

The @notation{tempo indication} and @notation{metronome mark} can be
set with the @code{\tempo} command:

@lilypond[verbatim,quote]
\relative {
  \time 3/4
  \tempo "Andante"
  a'4 a a
  \time 6/8
  \tempo 4. = 96
  a4. a
  \time 4/4
  \tempo  "Presto" 4 = 120
  a4 a a a
}
@end lilypond


@node Clef
@unnumberedsubsubsec Clef

@cindex clef
@cindex treble
@cindex alto
@cindex tenor
@cindex bass

@funindex \clef

Music Glossary: @rglos{clef}.

The @notation{clef} can be set using the @code{\clef} command:

@lilypond[verbatim,quote]
\relative {
  \clef "treble"
  c'1
  \clef "alto"
  c1
  \clef "tenor"
  c1
  \clef "bass"
  c1
}
@end lilypond


@node All together
@unnumberedsubsubsec All together

Here is a small example showing all these elements together:

@lilypond[verbatim,quote]
\relative {
  \clef "bass"
  \time 3/4
  \tempo "Andante" 4 = 120
  c,2 e8 c'
  g'2.
  f4 e d
  c4 c, r
}
@end lilypond


@seealso
Notation Reference: @ruser{Writing pitches},
@ruser{Writing rhythms}, @ruser{Writing rests},
@ruser{Time signature}, @ruser{Clef}.


@node Working on input files
@subsection Working on input files

@cindex curly braces
@cindex braces, curly
@cindex comments
@cindex line comment
@cindex comment, line
@cindex block comment
@cindex comment, line
@cindex case sensitive
@cindex whitespace insensitive
@cindex expressions
@cindex versioning
@cindex version
@cindex version number

@funindex \version
@funindex { ... }
@funindex %
@funindex %@{ ... %@}

LilyPond input files are similar to source files in many common
programming languages.  They contain a version statement, are case
sensitive, and white-space is generally ignored.  Expressions are
formed with curly braces @w{@code{@{ @}}}, and comments are
denoted with @code{%} or @w{@code{%@{ @dots{} %@}}}@tie{}.

If the previous sentences sound like nonsense, don't worry!  We'll
explain what all these terms mean:

@itemize

@item
@strong{Version statement}:
Every LilyPond file should contain a version statement.  A version
statement is a line that describes the version of LilyPond for which
the file was written, as in the following example:

@example
\version "@w{@version{}}"
@end example

By convention, the version statement is placed at the top of the
LilyPond file.

The version statement is important for at least two reasons.  First,
it allows automatic updating of the input file as LilyPond syntax
changes.  Second, it describes the version of LilyPond needed to
compile the file.

If the version statement is omitted from an input file, LilyPond will print
a warning during the compilation of the file.

@item
@strong{Case sensitive}:
it matters whether you enter a letter in lower case (e.g.
@w{@code{a, b, s, t}}) or upper case (e.g. @w{@code{A, B, S, T}}).
Notes are lower case: @w{@samp{@{ c d e @}}} is valid input;
@w{@samp{@{ C D E @}}} will produce an error message.

@item
@strong{Whitespace insensitive}:
it does not matter how many spaces (or tabs or new lines) you add.
@w{@samp{@{ c4 d e @}}} means the same thing as
@w{@samp{@{ c4 @tie{} @tie{} @tie{} d e @}}} and:

@example
@{ c4                       d
                   e   @}
@end example

@noindent
Of course, the previous example is hard to read.  A good rule of
thumb is to indent code blocks with two spaces:

@example
@{
  c4 d e
@}
@end example

However, whitespace @emph{is} required to separate many
syntactical elements from others.  In other words, whitespace can
always be @emph{added}, but not always @emph{eliminated}.  Since
missing whitespace can give rise to strange errors, it is
advisable to always insert whitespace before and after every
syntactic element, for example, before and after every curly
brace.

@item
@strong{Expressions}:
every piece of LilyPond input needs to have
@strong{@{@tie{}curly@tie{}braces@tie{}@}} placed around the
input.  These braces tell LilyPond that the input is a single
music expression, just like parentheses @code{()} in mathematics.
The braces should be surrounded by a space unless they are at the
beginning or end of a line to avoid ambiguities.

A LilyPond command followed by a simple expression in braces (such
as @q{@w{@code{@bs{}relative @{ @dots{} @}}}}) also counts as a
single music expression.

@cindex comments
@cindex line comment
@cindex block comment
@item
@strong{Comments}:
a comment is a remark for the human reader of the music input; it
is ignored while parsing, so it has no effect on the printed
output.  There are two types of comments.  The percent symbol
@code{%} introduces a line comment; anything after @code{%} on
that line is ignored.  By convention, a line comment is placed
@emph{above} the code it refers to.

@example
a4 a a a
% this comment refers to the Bs
b2 b
@end example

A block comment marks a whole section of music input as a comment.
Anything that is enclosed in @code{%@{} and @code{%@}} is ignored.
However, block comments do not @q{nest}.  This means that you
cannot place a block comment inside another block comment.  If you
try, the first @code{%@}} will terminate @emph{both} block
comments.  The following fragment shows possible uses for
comments:

@example
% notes for twinkle twinkle follow
  c4 c g' g a a g2

%@{
  This line, and the notes below are ignored,
  since they are in a block comment.

  f4 f e e d d c2
%@}
@end example

@end itemize


@node Dealing with errors
@section Dealing with errors

@cindex troubleshooting

Sometimes LilyPond doesn't produce the output you expect.  This
section provides some links to help you solve the problems you
might encounter.


@menu
* General troubleshooting tips::
* Some common errors::
@end menu

@node General troubleshooting tips
@subsection General troubleshooting tips

Troubleshooting LilyPond problems can be challenging for
people who are used to a graphical interface, because invalid
input files can be created.  When this happens, a logical approach
is the best way to identify and solve the problem.  Some guidelines
to help you learn to do this are provided in @rprogram{Troubleshooting}.


@node Some common errors
@subsection Some common errors

@cindex common errors
@cindex errors, common

There are a few common errors that are difficult to troubleshoot
based simply on the error messages that are displayed.  These are
described in @rprogram{Common errors}.



@node How to read the manuals
@section How to read the manuals

This section shows how to read the documentation efficiently, and
also introduces some useful interactive features available in the
online version.

@menu
* Omitted material::
* Clickable examples::
* Overview of manuals::
@end menu


@node Omitted material
@subsection Omitted material


@cindex how to read the manual
@cindex manual, reading
@cindex reading the manual
@cindex examples, clickable
@cindex clickable examples
@cindex tips for constructing files
@cindex templates
@cindex constructing files, tips
@cindex files, tips for constructing

LilyPond input must be surrounded by @code{@{ @}} marks or a
@q{@w{@code{@bs{}relative @{ @dots{} @}}}}, as we saw in
@ref{Working on input files}.  For the rest of this manual,
some short examples will omit this.  To replicate these examples,
you can copy displayed input, but paste it between @code{@{}
and @code{@}} in your input file.

@example
@{
  @dots{}example goes here@dots{}
@}
@end example

Also, remember that every LilyPond file should have a
@code{\version} statement.  Because the examples in the manuals
are snippets, not files, the @code{\version} statement is omitted.
But you should make a practice of including them in your files.

@node Clickable examples
@subsection Clickable examples

@warning{This feature is only available in the HTML manuals.}

Many people learn programs by trying and fiddling around with the
program.  This is also possible with LilyPond.  If you click on a
picture in the HTML version of this manual, you will see the exact
LilyPond input that was used to generate that image.  Try it on
this image:

@c no verbatim here
@lilypond[quote]
\relative {
  c''4-\markup { \bold \huge { Click here. } }
}
@end lilypond

By cutting and pasting everything in the @qq{ly snippet} section,
you have a starting template for experiments.  To see exactly the
same output (line-width and all), copy everything from @qq{Start
cut-&-pastable section} to the bottom of the file.


@ignore
This is item 825

@n ode Keyboard navigation
@s ubsection Keyboard navigation

@warning{This features is only available in the HTML manuals.}

@c TODO: once this is figured out, insert it here.

We are currently working on this feature.
@end ignore

@node Overview of manuals
@subsection Overview of manuals

There is a lot of documentation for LilyPond.  New users are
sometimes confused about what part(s) they should read, and
occasionally skip over reading vital portions.

@warning{Please do not skip over important parts of the
documentation.  You will find it much harder to understand later
sections.}

@itemize

@item
@strong{Before trying to do @emph{anything}}: read the Learning
manual's @ref{Tutorial}, and @ref{Common notation}.  If you
encounter musical terms which you do not recognize, please look
them up in the @rglosnamed{Top, Glossary}.

@item
@strong{Before trying to write a complete piece of music}: read
the Learning manual's @ref{Fundamental concepts}.  After that, you
may want to look in relevant sections of the
@rusernamed{Top, Notation reference}.

@item
@strong{Before trying to change the default output}: read the
Learning manual's @ref{Tweaking output}.

@item
@strong{Before undertaking a large project}: read the Usage
document's @rprogram{Suggestions for writing files}.

@end itemize



