@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of lilypond.tely
@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.  See TRANSLATION for details.
@end ignore

@c A menu is needed before every deeper *section nesting of @node's; run
@c     M-x texinfo-all-menus-update
@c to automatically fill in these menus before saving changes


@node Advanced notation
@chapter Advanced notation

This chapter deals with rarely-used and advanced notation.

@menu
* Text::                        
* Preparing parts::             
* Orchestral music::            
* Contemporary notation::       
* Educational use::             
@end menu



@node Text
@section Text

This section explains how to include text (with various formatting) in
your scores.

@cindex Text, other languages
To write accented and special text (such as characters from other languages),
simply
insert the characters directly into the lilypond file.  The file must be
saved as UTF-8.  For more information, see @ref{Text encoding}.

@menu
* Text scripts::                
* Text and line spanners::      
* Text spanners::               
* Text marks::                  
* Text markup::                 
* Nested scores::               
* Overview of text markup commands::  
* Font selection::              
* New dynamic marks::           
@end menu


@node Text scripts
@subsection Text scripts

@cindex Text scripts
@cindex text items, non-empty
@cindex non-empty texts

It is possible to place arbitrary strings of text or @ref{Text markup}
above or below notes by using a string @code{c^"text"}.  By default,
these indications do not influence the note spacing, but by using the
command @code{\fatText}, the widths will be taken into account

@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
c4^"longtext" \fatText c4_"longlongtext" c4
@end lilypond

@noindent
To prevent text from influencing spacing, use @code{\emptyText}.

More complex formatting may also be added to a note by using the
markup command,
@lilypond[fragment,ragged-right,verbatim,quote]
c'4^\markup { bla \bold bla }
@end lilypond

The @code{\markup} is described in more detail in
@ref{Text markup}.


@refcommands

@funindex \fatText
@code{\fatText},
@funindex \emptyText
@code{\emptyText}.


@commonprop

Checking to make sure that text scripts and lyrics are within the margins is
a relatively large computational task.  To speed up processing, lilypond does
not perform such calculations by default; to enable it, use

@example
\override Score.PaperColumn #'keep-inside-line = ##t
@end example


@seealso

In this manual: @ref{Text markup}.

Program reference: @internalsref{TextScript}.


@node Text and line spanners
@subsection Text and line spanners

Some performance indications, e.g., @i{rallentando} and
@i{accelerando} and @i{trills} are written as text and are extended
over many measures with lines, sometimes dotted or wavy.

These all use the same routines as the glissando for drawing the texts
and the lines, and tuning their behavior is therefore also done in the
same way. It is done with a spanner, and the routine responsible for
drawing the spanners is @code{ly:line-interface::print}. This
routine determines the exact location of the two @i{span
points} and draws a line in between, in the style requested.

Here is an example of the different line styles available, and how to
tune them.

@lilypond[relative=2,ragged-right,verbatim,fragment]
d2 \glissando d'2
\once \override Glissando #'dash-fraction = #0.5
d,2 \glissando d'2
\override Glissando #'style = #'dotted-line
d,2 \glissando d'2
\override Glissando #'style = #'zigzag
d,2 \glissando d'2
\override Glissando #'style = #'trill
d,2 \glissando d'2
@end lilypond

The information that determines the end-points is computed on-the-fly
for every graphic object, but it is possible to override these. 

@lilypond[relative=2,ragged-right,verbatim,fragment]
e2 \glissando f
\once \override Glissando #'bound-details #'right #'Y = #-2
e2 \glissando f
@end lilypond

The @code{Glissando} object, like any other using the
@code{ly:line-interface::print} routine, carries a nested
association list. In the above statement, the value for @code{Y}
is set to @code{-2} for the association list corresponding to the right
end point. Of course, it is also possible to adjust the left side with
@code{left} instead of @code{right}.

If @code{Y} is not set, the value is computed from the vertical
position of right attachment point of the spanner. 

In case of a line break, the values for the span-points are extended
with contents of the @code{left-broken} and @code{right-broken}
sublists, for example

@lilypond[relative=2,ragged-right,verbatim,fragment]
\override Glissando #'breakable = ##T 
\override Glissando #'bound-details #'right-broken #'Y = #-3
c1 \glissando \break
f1
@end lilypond

The following properties can be used for the

@table @code
@item Y
This sets the Y-coordinate of the end point, in staff space.  By
default, it is the center of the bound object, so for a glissando it
points to the vertical center of the note head.

For horizontal spanners, such as text spanner and trill spanners, it
is hardcoded to 0.

@item attach-dir
This determines where the line starts and ends in X-direction,
relative to the bound object.  So, a value of @code{-1} (or
@code{LEFT}) makes the line start/end at the left side of the note
head it is attached to.

@item X
This is the absolute coordinate of the end point. It is usually
computed on the fly, and there is little use in overriding it. 

@item stencil
Line spanners may have symbols at the beginning or end, which is
contained in this sub-property.  This is for internal use, it is
recommended to use @code{text}.

@item text
This is a markup that is evaluated to yield stencil. It is
used to put @i{cresc.} and @i{tr} on horizontal spanners.

@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
\override TextSpanner #'bound-details #'left #'text
   = \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@end lilypond

@item stencil-align-dir-y
@item stencil-offset
Without setting this, the stencil is simply put there at the
end-point, as defined by the @code{X} and @code{Y} sub properties.
Setting either @code{stencil-align-dir-y} or @code{stencil-offset}
will move the symbol at the edge relative to the end point of the line

@lilypond[relative=1,fragment,verbatim]
\override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #DOWN
\override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #UP

\override TextSpanner #'bound-details #'left #'text = #"gggg"
\override TextSpanner #'bound-details #'right #'text = #"hhhh"
c4^\startTextSpan c c c \stopTextSpan
@end lilypond

@item arrow
Setting this sub property to @code{#t} produce an arrowhead at the end
of the line.

@item padding
This sub property controls the space between the specified end-point
of the line and the actual end.  Without padding, a glissando would
start and end in the center of each note head.

@end table

@seealso

Program reference: @internalsref{TextSpanner},
@internalsref{Glissando}, @internalsref{VoiceFollower},
@internalsref{TrillSpanner}, @internalsref{line-spanner-interface}.

Examples: @lsr{expressive,line-styles.ly}
@c  FIXME: add {contemporary/line-arrows.ly} when LSR is updated.  -gp


@node Text spanners
@subsection Text spanners

@cindex Text spanners

Some performance indications, e.g., @i{rallentando} or @i{accelerando},
are written as text and are extended over many measures with dotted
lines.  Such texts are created using text spanners; attach
@code{\startTextSpan} and @code{\stopTextSpan} to the first and last
notes of the spanner.

The string to be printed, as well as the style, is set through object
properties

@lilypond[quote,ragged-right,fragment,relative=1,verbatim]
c1
\textSpannerDown
\override TextSpanner #'edge-text = #'("rall " . "")
c2\startTextSpan b c\stopTextSpan a
\break
\textSpannerUp
\override TextSpanner #'edge-text = #(cons (markup #:italic "rit" ) "")
c2\startTextSpan b c\stopTextSpan a
@end lilypond

@refcommands

@funindex textSpannerUp
@code{\textSpannerUp},
@funindex textSpannerDown
@code{\textSpannerDown},
@funindex textSpannerNeutral
@code{\textSpannerNeutral}.


@commonprop

To print a solid line, use

@example
\override TextSpanner #'dash-fraction = #'()
@end example


@seealso

Program reference: @internalsref{TextSpanner}.


@node Text marks
@subsection Text marks

@cindex coda on bar line
@cindex segno on bar line
@cindex fermata on bar line
@cindex bar lines, symbols on
@funindex \mark

The @code{\mark} command is primarily used for
@ref{Rehearsal marks},
but it can also be used to put signs like coda,
segno, and fermata on a bar line.  Use @code{\markup} to
access the appropriate symbol (symbols are listed in
@ref{The Feta font})

@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
c1 \mark \markup { \musicglyph #"scripts.ufermata" }
c1
@end lilypond

@noindent
@code{\mark} is only typeset above the top stave of the score.  If
you specify the @code{\mark} command at a bar line, the resulting
mark is placed above the bar line.  If you specify it in the middle
of a bar, the resulting mark is positioned between notes.  If it is
specified before the beginning of a score line, it is placed
before the first note of the line.  Finally, if the mark occurs at
a line break, the mark will be printed at the
beginning of the next line.
@c  IMO this is a bug; hopefully it'll be fixed soon, so I can
@c  delete this sentence.   -gp
If there is no next line, then the mark will not be printed at all.


@commonprop

To print the mark at the end of the current line, use

@example
\override Score.RehearsalMark
  #'break-visibility = #begin-of-line-invisible
@end example

@code{\mark} is often useful for adding text to the end of bar.  In
such cases, changing the @code{#'self-alignment} is very useful

@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
\override Score.RehearsalMark
  #'break-visibility = #begin-of-line-invisible
c1 c c c4 c c c
\once \override Score.RehearsalMark #'self-alignment-X = #right
\mark "D.S. al Fine "
@end lilypond

Text marks may be aligned with notation objects other than
bar lines,

@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
\relative {
  c1
  \key cis \major
  \clef alto
  \override Score.RehearsalMark #'break-align-symbol = #'key-signature
  \mark "on key"
  cis
  \key ces \major
  \override Score.RehearsalMark #'break-align-symbol = #'clef
  \clef treble
  \mark "on clef"
  ces
  \override Score.RehearsalMark #'break-align-symbol = #'time-signature
  \key d \minor
  \clef tenor
  \time 3/4
  \mark "on time"
  c
}
@end lilypond

Although text marks are normally only printed above the topmost
staff, you may alter this to print them on every staff,

@lilypond[quote,ragged-right,verbatim,relative=2]
{
  \new Score \with {
    \remove "Mark_engraver"
  }
  <<
    \new Staff \with {
      \consists "Mark_engraver"
    }
    { c''1 \mark "foo" c'' }
    \new Staff \with {
      \consists "Mark_engraver"
    }
    { c'1 \mark "foo" c' }
  >>
}
@end lilypond


@seealso

Program reference: @internalsref{RehearsalMark}.


@node Text markup
@subsection Text markup

@cindex markup
@cindex text markup
@cindex markup text
@cindex typeset text

Use @code{\markup} to typeset text.  Commands are entered with the
backslash @code{\}.  To enter @code{\} and @code{#}, use double
quotation marks.

@lilypond[quote,verbatim,fragment,relative=1]
c1^\markup { hello }
c1_\markup { hi there }
c1^\markup { hi \bold there, is \italic {anyone home?} }
c1_\markup { "\special {weird} #characters" }
@end lilypond

@noindent
See @ref{Overview of text markup commands} for a list of all
commands.

@code{\markup} is primarily used for @internalsref{TextScript}s,
but it can also be used anywhere text is called in lilypond

@lilypond[quote,verbatim]
\header{ title = \markup{ \bold { foo \italic { bar! } } } }
\score{
  \relative c'' {
    \override Score.RehearsalMark
      #'break-visibility = #begin-of-line-invisible
    \override Score.RehearsalMark #'self-alignment-X = #right

    \set Staff.instrumentName = \markup{ \column{ Alto solo } }
    c2^\markup{ don't be \flat }
    \override TextSpanner #'edge-text = #(cons (markup #:italic "rit" ) "")
    b2\startTextSpan
    a2\mark \markup{ \large \bold Fine }
    r2\stopTextSpan
    \bar "||"
  }
  \addlyrics { bar, foo \markup{ \italic bar! } }
}
@end lilypond

A @code{\markup} command can also be placed on its own, away from any
@code{\score} block, see @ref{Multiple scores in a book}.

@lilypond[quote,ragged-right,verbatim]
\markup{ Here is some text. }
@end lilypond

@cindex font switching

The markup in the example demonstrates font switching commands.  The
command @code{\bold} and @code{\italic} apply to the first following
word only; to apply a command to more than one word, enclose the
words with braces,

@example
\markup @{ \bold @{ hi there @} @}
@end example

@noindent
For clarity, you can also do this for single arguments, e.g.,

@example
\markup @{ is \italic @{ anyone @} home @}
@end example

In markup mode you can compose expressions, similar to mathematical
expressions, XML documents, and music expressions.  You can stack
expressions grouped vertically with the command @code{\column}.
Similarly, @code{\center-align} aligns texts by their center lines:

@lilypond[quote,verbatim,fragment,relative=1]
c1^\markup { \column { a bbbb \line { c d } } }
c1^\markup { \center-align { a bbbb c } }
c1^\markup { \line { a b c } }
@end lilypond

Lists with no previous command are not kept distinct.  The expression

@example
\center-align @{ @{ a b @} @{ c d @} @}
@end example

@noindent

is equivalent to

@example
\center-align @{ a b c d @}
@end example

@noindent

To keep lists of words distinct, please use quotes @code{"} or
the @code{\line} command

@lilypond[quote,verbatim,fragment,relative=1]
\fatText
c4^\markup{ \center-align { on three lines } }
c4^\markup{ \center-align { "all one line" } }
c4^\markup{ \center-align { { on three lines } } }
c4^\markup{ \center-align { \line { on one line } } }
@end lilypond

Markups can be stored in variables and these variables
may be attached to notes, like
@example
allegro = \markup @{ \bold \large @{ Allegro @} @}
 @{ a^\allegro b c d @}
@end example

Some objects have alignment procedures of their own, which cancel out
any effects of alignments applied to their markup arguments as a
whole.  For example, the @internalsref{RehearsalMark} is horizontally
centered, so using @code{\mark \markup @{ \left-align .. @}} has no
effect.

In addition, vertical placement is performed after creating the
text markup object.  If you wish to move an entire piece of markup,
you need to use the #'padding property or create an "anchor" point
inside the markup (generally with @code{\hspace #0}).

@lilypond[quote,verbatim,fragment,relative=1]
\fatText
c'4^\markup{ \raise #5 "not raised" }
\once \override TextScript #'padding = #3
c'4^\markup{ raised }
c'4^\markup{ \hspace #0 \raise #1.5 raised }
@end lilypond

Some situations (such as dynamic marks) have preset font-related
properties.  If you are creating text in such situations, it
is advisable to cancel those properties with
@code{normal-text}.  See @ref{Overview of text markup commands}
for more details.


@seealso

This manual: @ref{Overview of text markup commands}.

Program reference: @internalsref{TextScript}.

Init files: @file{scm/@/new@/-markup@/.scm}.


@refbugs

Kerning or generation of ligatures is only done when the @TeX{}
backend is used.  In this case, LilyPond does not account for them so
texts will be spaced slightly too wide.

Syntax errors for markup mode are confusing.


@node Nested scores
@subsection Nested scores

It is possible to nest music inside markups, by adding a @code{\score}
block to a markup expression.  Such a score must contain a @code{\layout}
block.

@lilypond[quote,verbatim,ragged-right]
\relative {
  c4 d^\markup {
    \score {
      \relative { c4 d e f }
      \layout { }
    }
  }
  e f
}
@end lilypond


@node Overview of text markup commands
@subsection Overview of text markup commands

The following commands can all be used inside @code{\markup @{ @}}.

@include markup-commands.tely


@node Font selection
@subsection Font selection

@cindex font selection
@cindex font magnification
@funindex font-interface

By setting the object properties described below, you can select a
font from the preconfigured font families.  LilyPond has default
support for the feta music fonts. Text fonts are selected through
Pango/FontConfig. The serif font defaults to New Century Schoolbook,
the sans and typewriter to whatever the Pango installation defaults
to.


@itemize @bullet
@item @code{font-encoding}
is a symbol that sets layout of the glyphs.  This should only be set to
select different types of non-text fonts, e.g.

@code{fetaBraces} for piano staff braces, @code{fetaMusic} the
standard music font, including ancient glyphs, @code{fetaDynamic} for
dynamic signs and @code{fetaNumber} for the number font.

@item @code{font-family}
is a symbol indicating the general class of the typeface.  Supported are
@code{roman} (Computer Modern), @code{sans}, and @code{typewriter}.

@item @code{font-shape}
is a symbol indicating the shape of the font.  There are typically
several font shapes available for each font family.  Choices are
@code{italic}, @code{caps}, and @code{upright}.

@item @code{font-series}
is a symbol indicating the series of the font.  There are typically
several font series for each font family and shape.  Choices are
@code{medium} and @code{bold}.

@end itemize

Fonts selected in the way sketched above come from a predefined style
sheet. If you want to use a font from outside the style sheet,
then set the
@code{font-name} property,

@lilypond[fragment,verbatim]
{
  \override Staff.TimeSignature #'font-name = #"Charter"
  \override Staff.TimeSignature #'font-size = #2
  \time 3/4
  c'1_\markup {
    \override #'(font-name . "Vera Bold")
      { This text is in Vera Bold }
  }
}
@end lilypond

@noindent
Any font can be used, as long as it is available to Pango/FontConfig.
To get a full list of all available fonts, run the command
@example
lilypond -dshow-available-fonts blabla
@end example
(the last argument of the command can be anything, but has to be present).


The size of the font may be set with the @code{font-size}
property. The resulting size is taken relative to the
@code{text-font-size} as defined in the @code{\paper} block.

@cindex font size
@cindex font magnification


It is also possible to change the default font family for the entire
document. This is done by calling the @code{make-pango-font-tree} from
within the @code{\paper} block. The function takes names for the font
families to use for roman, sans serif and monospaced text. For
example,

@cindex font families, setting
@cindex Pango


@lilypond[verbatim]
\paper  {
  myStaffSize = #20

  #(define fonts
    (make-pango-font-tree "Times New Roman"
                          "Nimbus Sans"
                          "Luxi Mono"
                           (/ myStaffSize 20)))
}

{
  c'^\markup { roman: foo \sans bla \typewriter bar }
}
@end lilypond

@c we don't do Helvetica / Courier, since GS incorrectly loads
@c Apple TTF fonts



@seealso

Examples: @lsr{text,font@/-family@/-override.ly}.


@node New dynamic marks
@subsection New dynamic marks

It is possible to print new dynamic marks or text that should be aligned
with dynamics.  Use @code{make-dynamic-script} to create these
marks.  Note that the dynamic font only contains the characters
@code{f,m,p,r,s} and @code{z}.

Some situations (such as dynamic marks) have preset font-related
properties.  If you are creating text in such situations, it
is advisable to cancel those properties with
@code{normal-text}.  See @ref{Overview of text markup commands}
for more details.

@cindex make-dynamic-script

@lilypond[quote,verbatim,ragged-right]
sfzp = #(make-dynamic-script "sfzp")
\relative c' {
  c4 c c\sfzp c
}
@end lilypond

@cindex Dynamics, editorial
@cindex Dynamics, parenthesis

It is also possible to print dynamics in round parenthesis or square
brackets.  These are often used for adding editorial dynamics.

@lilypond[quote,verbatim,ragged-right]
rndf = \markup{ \center-align {\line { \bold{\italic (}
  \dynamic f \bold{\italic )} }} }
boxf = \markup{ \bracket { \dynamic f } }
{ c'1_\rndf c'1_\boxf }
@end lilypond



@node Preparing parts
@section Preparing parts

This section describes various notation that are useful for preparing
individual parts.

@menu
* Multi measure rests::         
* Metronome marks::             
* Rehearsal marks::             
* Bar numbers::                 
* Instrument names::            
* Instrument transpositions::   
* Ottava brackets::             
* Different editions from one source::  
@end menu


@node Multi measure rests
@subsection Multi measure rests

@cindex multi measure rests
@cindex full measure rests
@cindex Rests, multi measure
@cindex Rests, full measure
@cindex whole rests for a full measure
@funindex R

Rests for one full measure (or many bars) are entered using @samp{R}.  It
is specifically meant for full bar rests and for entering parts: the rest
can expand to fill a score with rests, or it can be printed as a single
multi-measure rest.  This expansion is controlled by the property
@code{Score.skipBars}.  If this is set to true, empty measures will not
be expanded, and the appropriate number is added automatically

@lilypond[quote,ragged-right,fragment,verbatim]
\time 4/4 r1 | R1 | R1*2 \time 3/4 R2. \time 2/4 R2 \time 4/4
\set Score.skipBars = ##t R1*17 R1*4
@end lilypond

The @code{1} in @code{R1} is similar to the duration notation used for
notes.  Hence, for time signatures other than 4/4, you must enter other
durations.  This can be done with augmentation dots or fractions

@lilypond[quote,ragged-right,fragment,verbatim]
\set Score.skipBars = ##t
\time 3/4
R2. | R2.*2
\time 13/8
R1*13/8
R1*13/8*12 |
\time 10/8 R4*5*4 |
@end lilypond

An @code{R} spanning a single measure is printed as either a whole rest
or a breve, centered in the measure regardless of the time signature.

If there are only a few measures of rest, LilyPond prints @q{church rests}
(a series of rectangles) in the staff.  To replace that with a simple
rest, use @code{MultiMeasureRest.expand-limit}.

@lilypond[quote,ragged-right,fragment,verbatim]
\set Score.skipBars = ##t
R1*2 | R1*5 | R1*9
\override MultiMeasureRest #'expand-limit = 1
R1*2 | R1*5 | R1*9
@end lilypond

@cindex text on multi-measure rest
@cindex script on multi-measure rest
@cindex fermata on multi-measure rest

Texts can be added to multi-measure rests by using the
@var{note}-@code{markup} syntax @ref{Text markup}.
A variable (@code{\fermataMarkup}) is provided for
adding fermatas

@lilypond[quote,ragged-right,verbatim,fragment]
\set Score.skipBars = ##t
\time 3/4
R2.*10^\markup { \italic "ad lib." }
R2.^\fermataMarkup
@end lilypond

Warning!  This text is created by @code{MultiMeasureRestText}, not
@code{TextScript}.

@lilypond[quote,ragged-right,verbatim,fragment]
\override TextScript #'padding = #5
R1^"low"
\override MultiMeasureRestText #'padding = #5
R1^"high"
@end lilypond

If you want to have text on the left end of a multi-measure rest,
attach the text to a zero-length skip note, i.e.,

@example
s1*0^"Allegro"
R1*4
@end example


@seealso

Program reference: @internalsref{MultiMeasureRestMusicGroup},
@internalsref{MultiMeasureRest}.

The layout object @internalsref{MultiMeasureRestNumber} is for the
default number, and @internalsref{MultiMeasureRestText} for user
specified texts.


@refbugs

It is not possible to use fingerings (e.g., @code{R1-4}) to put numbers
over multi-measure rests.  And the pitch of multi-measure rests (or
staff-centered rests) can not be influenced.

@cindex condensing rests

There is no way to automatically condense multiple rests into a single
multi-measure rest.  Multi-measure rests do not take part in rest
collisions.

Be careful when entering multi-measure rests followed by whole
notes.  The following will enter two notes lasting four measures each
@example
R1*4 cis cis
@end example
When @code{skipBars} is set, the result will look OK, but the bar
numbering will be off.


@node Metronome marks
@subsection Metronome marks

@cindex Tempo
@cindex beats per minute
@cindex metronome marking

Metronome settings can be entered as follows
@example
\tempo @var{duration} = @var{per-minute}
@end example

In the MIDI output, they are interpreted as a tempo change.  In the
layout output, a metronome marking is printed
@funindex \tempo
@lilypond[quote,ragged-right,verbatim,fragment]
\tempo 8.=120 c''1
@end lilypond


@commonprop

To change the tempo in the MIDI output without printing anything, make
the metronome marking invisible
@example
\once \override Score.MetronomeMark #'transparent = ##t
@end example

To print other metronome markings, use these markup commands
@lilypond[quote,ragged-right,verbatim,relative,fragment]
c4^\markup {
  (
  \smaller \general-align #Y #DOWN \note #"16." #1
  =
  \smaller \general-align #Y #DOWN \note #"8" #1
  ) }
@end lilypond

@noindent
See @ref{Text markup} for more details.


@seealso

Program reference: @internalsref{MetronomeMark}.


@refbugs

Collisions are not checked.  If you have notes above the top line of
the staff (or notes with articulations, slurs, text, etc), then the
metronome marking may be printed on top of musical symbols.  If this
occurs, increase the padding of the metronome mark to place it
further away from the staff.

@example
\override Score.MetronomeMark #'padding = #2.5
@end example


@node Rehearsal marks
@subsection Rehearsal marks

@cindex Rehearsal marks
@funindex \mark

To print a rehearsal mark, use the @code{\mark} command

@lilypond[quote,ragged-right,fragment,verbatim,relative=2]
c1 \mark \default
c1 \mark \default
c1 \mark #8
c1 \mark \default
c1 \mark \default
@end lilypond

@noindent
The letter@tie{}@q{I} is skipped in accordance with engraving traditions.
If you wish to include the letter @q{I}, then use

@example
\set Score.markFormatter = #format-mark-alphabet
@end example

The mark is incremented automatically if you use @code{\mark
\default}, but you can also use an integer argument to set the mark
manually.  The value to use is stored in the property
@code{rehearsalMark}.

The style is defined by the property @code{markFormatter}.  It is a
function taking the current mark (an integer) and the current context
as argument.  It should return a markup object.  In the following
example, @code{markFormatter} is set to a canned procedure.  After a
few measures, it is set to function that produces a boxed number.

@lilypond[fragment,quote,ragged-right,verbatim,relative=2]
\set Score.markFormatter = #format-mark-numbers
c1 \mark \default
c1 \mark \default
\set Score.markFormatter = #format-mark-box-numbers
c1 \mark \default
c1 \mark \default
c1
@end lilypond

The file @file{scm/@/translation@/-functions@/.scm} contains the definitions
of @code{format-mark-numbers} (the default format),
@code{format-mark-box-numbers},
@code{format-mark-letters} and @code{format-mark-box-letters}.
These can be used as inspiration for other formatting functions.

You may use @code{format-mark-barnumbers}, @code{format-mark-box-barnumbers},
and @code{format-mark-circle-barnumbers} to get bar numbers instead of
incremented numbers or letters.

Other styles of rehearsal mark can be specified manually

@example
\mark "A1"
@end example

@noindent
@code{Score.markFormatter} does not affect marks specified in this manner.
However, it is possible to apply a @code{\markup} to the string.

@example
\mark \markup@{ \box A1 @}
@end example

@cindex segno
@cindex coda
@cindex D.S al Fine

Music glyphs (such as the segno sign) may be printed inside
a @code{\mark}

@lilypond[fragment,quote,ragged-right,verbatim,relative]
c1 \mark \markup { \musicglyph #"scripts.segno" }
c1 \mark \markup { \musicglyph #"scripts.coda" }
c1 \mark \markup { \musicglyph #"scripts.ufermata" }
c1
@end lilypond

@noindent
See @ref{The Feta font} for a list of symbols which may be
printed with @code{\musicglyph}.

The horizontal location of rehearsal marks can be adjusted by
setting @code{break-align-symbol}

@lilypond[fragment,quote,ragged-right,verbatim,relative]
c1
\key cis \major
\clef alto
\override Score.RehearsalMark #'break-align-symbol = #'key-signature
\mark "on-key"
cis
\key ces \major
\override Score.RehearsalMark #'break-align-symbol = #'clef
\clef treble
\mark "on clef"
ces
@end lilypond

@code{break-align-symbol} may also accept the following values:
@code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
@code{staff-bar}, @code{left-edge}, @code{key-cancellation},
@code{key-signature}, and @code{time-signature}.  Setting
@code{break-align-symbol} will only have an effect if the symbol
appears at that point in the music.


@seealso

This manual: @ref{Text marks}.

Program reference: @internalsref{RehearsalMark}.

Init files: @file{scm/@/translation@/-functions@/.scm} contains the
definition of @code{format-mark-numbers} and
@code{format-mark-letters}.  They can be used as inspiration for other
formatting functions.

Examples: @lsr{preparing,rehearsal-mark-numbers.ly}


@node Bar numbers
@subsection Bar numbers

@cindex Bar numbers
@cindex measure numbers
@funindex currentBarNumber

Bar numbers are printed by default at the start of the line.  The
number itself is stored in the @code{currentBarNumber} property, which
is normally updated automatically for every measure.

@lilypond[verbatim,ragged-right,quote,fragment,relative]
\repeat unfold 4 {c4 c c c} \break
\set Score.currentBarNumber = #50
\repeat unfold 4 {c4 c c c}
@end lilypond

Bar numbers may only be printed at bar lines; to print a bar
number at the beginning of a piece, an empty bar line must
be added

@lilypond[verbatim,ragged-right,quote,fragment,relative]
\set Score.currentBarNumber = #50
\bar ""
\repeat unfold 4 {c4 c c c} \break
\repeat unfold 4 {c4 c c c}
@end lilypond

Bar numbers can be typeset at regular intervals instead of at the
beginning of each line.  This is illustrated in the following example,
whose source is available as
@inputfileref{input/@/test,bar@/-number@/-regular@/-interval@/.ly}

@lilypondfile[ragged-right,quote]{bar-number-regular-interval.ly}

Bar numbers can be removed entirely by removing the Bar number
engraver from the score.

@lilypond[verbatim,ragged-right,quote]
\layout {
  \context {
    \Score
    \remove "Bar_number_engraver"
  }
}
\relative c''{
c4 c c c \break
c4 c c c
}
@end lilypond


@seealso

Program reference: @internalsref{BarNumber}.

Examples:
@inputfileref{input/@/test,bar@/-number@/-every@/-five@/-reset@/.ly},
and @inputfileref{input/@/test,bar@/-number@/-regular@/-interval@/.ly}.


@refbugs

Bar numbers can collide with the @internalsref{StaffGroup} bracket, if
there is one at the top.  To solve this, the
@code{padding} property of @internalsref{BarNumber} can be
used to position the number correctly.


@node Instrument names
@subsection Instrument names

In an orchestral score, instrument names are printed at the left side
of the staves.

This can be achieved by setting @internalsref{Staff}.@code{instrumentName}
and @internalsref{Staff}.@code{shortInstrumentName}, or
@internalsref{PianoStaff}.@code{instrumentName} and
@internalsref{PianoStaff}.@code{shortInstrumentName}.  This will
print text before
the start of the staff.  For the first staff, @code{instrumentName} is
used, for the following ones, @code{shortInstrumentName} is used.

@lilypond[quote,verbatim,ragged-right,relative=1,fragment]
\set Staff.instrumentName = "Ploink "
\set Staff.shortInstrumentName = "Plk "
c1
\break
c''
@end lilypond

You can also use markup texts to construct more complicated instrument
names, for example

@lilypond[quote,fragment,verbatim,ragged-right]
\set Staff.instrumentName = \markup {
  \column { "Clarinetti"
            \line { "in B" \smaller \flat } } }
c''1
@end lilypond

If you wish to center the instrument names, you must center all of them

@lilypond[quote,verbatim,ragged-right]
{ <<
\new Staff {
  \set Staff.instrumentName = \markup {
    \center-align { "Clarinetti"
      \line { "in B" \smaller \flat } } }
  c''1
}
\new Staff {
  \set Staff.instrumentName = \markup{ \center-align { Vibraphone }}
  c''1
}
>>
}
@end lilypond

For longer instrument names, it may be useful to increase the
@code{indent} setting in the @code{\layout} block.

To center instrument names while leaving extra space to the right,

@lilypond[quote,verbatim,ragged-right]
\new StaffGroup \relative
<<
  \new Staff {
    \set Staff.instrumentName = \markup { \hcenter-in #10 "blabla" }
    c1 c1
  }
  \new Staff {
    \set Staff.instrumentName = \markup { \hcenter-in #10 "blo" }
    c1 c1
  }
>>
@end lilypond

To add instrument names to other contexts (such as @code{GrandStaff},
@code{ChoirStaff}, or @code{StaffGroup}), the engraver must
be added to that context.

@example
\layout@{
  \context @{\GrandStaff \consists "Instrument_name_engraver"@}
@}
@end example

@noindent
More information about adding and removing engravers can
be found in @ref{Modifying context plug-ins}.

Instrument names may be changed in the middle of a piece,

@lilypond[quote,fragment,verbatim,ragged-right]
\set Staff.instrumentName = "First"
\set Staff.shortInstrumentName = "one"
c1 c c c \break
c1 c c c \break
\set Staff.instrumentName = "Second"
\set Staff.shortInstrumentName = "two"
c1 c c c \break
c1 c c c \break
@end lilypond


@seealso

Program reference: @internalsref{InstrumentName}.



@node Instrument transpositions
@subsection Instrument transpositions

@cindex transposition, MIDI
@cindex transposition, instrument

The key of a transposing instrument can also be specified.  This
applies to many wind instruments, for example, clarinets (B-flat, A, and
E-flat), horn (F) and trumpet (B-flat, C, D, and E-flat).

The transposition is entered after the keyword @code{\transposition}

@example
\transposition bes   %% B-flat clarinet
@end example

@noindent
This command sets the property @code{instrumentTransposition}.  The value of
this property is used for MIDI output and quotations.  It does not
affect how notes are printed in the current staff.  To change the printed
output, see @ref{Transpose}.

The pitch to use for @code{\transposition} should correspond to the
real sound heard when a @code{c'} written on the staff is played by the
transposing instrument.  For example, when entering a score in
concert pitch, typically all voices are entered in C, so
they should be entered as

@example
clarinet = @{
  \transposition c'
  ...
@}
saxophone = @{
  \transposition c'
  ...
@}
@end example

The command @code{\transposition} should be used when the music is
entered from a (transposed) orchestral part.  For example, in
classical horn parts, the tuning of the instrument is often changed
during a piece.  When copying the notes from the part, use
@code{\transposition}, e.g.,

@example
\transposition d'
c'4^"in D"
...
\transposition g'
c'4^"in G"
...
@end example


@node Ottava brackets
@subsection Ottava brackets

@q{Ottava} brackets introduce an extra transposition of an octave for
the staff.  They are created by invoking the function
@code{set-octavation}

@cindex ottava
@cindex 15ma
@cindex octavation

@lilypond[quote,ragged-right,verbatim,fragment]
\relative c''' {
  a2 b
  #(set-octavation 1)
  a b
  #(set-octavation 0)
  a b
}
@end lilypond

The @code{set-octavation} function also takes -1 (for 8va bassa), 2@tie{}(for 15ma),
and -2 (for 15ma bassa) as arguments.  Internally the function sets the properties
@code{ottavation} (e.g., to @code{"8va"} or @code{"8vb"}) and
@code{centralCPosition}.  For overriding the text of the bracket, set
@code{ottavation} after invoking @code{set-octavation}, i.e.,

@lilypond[quote,ragged-right,verbatim]
{
  #(set-octavation 1)
  \set Staff.ottavation = #"8"
  c'''
}
@end lilypond


@seealso

Program reference: @internalsref{OttavaBracket}.


@refbugs

@code{set-octavation} will get confused when clef changes happen
during an octavation bracket.


@node Different editions from one source
@subsection Different editions from one source

@funindex \tag
@cindex tag

The @code{\tag} command marks music expressions with a name.  These
tagged expressions can be filtered out later.  With this mechanism it
is possible to make different versions of the same music source.

In the following example, we see two versions of a piece of music, one
for the full score, and one with cue notes for the instrumental part

@example
c1
<<
  \tag #'part <<
    R1 \\
    @{
      \set fontSize = #-1
      c4_"cue" f2 g4 @}
  >>
  \tag #'score R1
>>
c1
@end example

The same can be applied to articulations, texts, etc.: they are
made by prepending
@example
-\tag #@var{your-tag}
@end example
to an articulation, for example,
@example
c1-\tag #'part ^4
@end example

This defines a note with a conditional fingering indication.

@cindex keepWithTag
@cindex removeWithTag
By applying the @code{\keepWithTag} and @code{\removeWithTag}
commands, tagged expressions can be filtered.  For example,
@example
<<
  @var{the music}
  \keepWithTag #'score @var{the music}
  \keepWithTag #'part @var{the music}
>>
@end example
would yield

@lilypondfile[ragged-right,quote]{tag-filter.ly}

The arguments of the @code{\tag} command should be a symbol
(such as @code{#'score} or @code{#'part}), followed by a
music expression.  It is possible to put multiple tags on
a piece of music with multiple @code{\tag} entries,

@example
  \tag #'original-part \tag #'transposed-part @dots{}
@end example


@seealso

Examples: @lsr{preparing,tag@/-filter@/.ly}


@refbugs

Multiple rests are not merged if you create the score with both tagged
sections.



@node Orchestral music
@section Orchestral music

Orchestral music involves some special notation, both in the full
score and the individual parts.  This section explains how to tackle
some common problems in orchestral music.

@menu
* Automatic part combining::    
* Hiding staves::               
* Quoting other voices::        
* Formatting cue notes::        
* Aligning to cadenzas::        
@end menu


@node Automatic part combining
@subsection Automatic part combining
@cindex automatic part combining
@cindex part combiner

Automatic part combining is used to merge two parts of music onto a
staff.  It is aimed at typesetting orchestral scores.  When the two
parts are identical for a period of time, only one is shown.  In
places where the two parts differ, they are typeset as separate
voices, and stem directions are set automatically.  Also, solo and
@emph{a due} parts are identified and can be marked.

The syntax for part combining is

@example
\partcombine @var{musicexpr1} @var{musicexpr2}
@end example


The following example demonstrates the basic functionality of the part
combiner: putting parts on one staff, and setting stem directions and
polyphony

@lilypond[quote,verbatim,ragged-right,fragment]
\new Staff \partcombine
  \relative g' { g g a( b) c c r r }
  \relative g' { g g r4 r e e g g }
@end lilypond

The first @code{g} appears only once, although it was
specified twice (once in each part).  Stem, slur, and tie directions are
set automatically, depending whether there is a solo or unisono.  The
first part (with context called @code{one}) always gets up stems, and
@q{Solo}, while the second (called @code{two}) always gets down stems and
@q{Solo II}.

If you just want the merging parts, and not the textual markings, you
may set the property @code{printPartCombineTexts} to false

@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
\new Staff <<
  \set Staff.printPartCombineTexts = ##f
  \partcombine
    \relative g' { g a( b) r }
    \relative g' { g r4 r f }
>>
@end lilypond

To change the text that is printed for solos or merging, you may
set the @code{soloText}, @code{soloIIText}, and @code{aDueText}
properties.

@lilypond[quote,verbatim,ragged-right,fragment,relative=2]
\new Staff <<
  \set Score.soloText = #"ichi"
  \set Score.soloIIText = #"ni"
  \set Score.aDueText = #"tachi"
  \partcombine
    \relative g' { g4 g a( b) r }
    \relative g' { g4 g r r f }
>>
@end lilypond

Both arguments to @code{\partcombine} will be interpreted as
@internalsref{Voice} contexts.  If using relative octaves,
@code{\relative} should be specified for both music expressions, i.e.,

@example
\partcombine
  \relative @dots{} @var{musicexpr1}
  \relative @dots{} @var{musicexpr2}
@end example

@noindent
A @code{\relative} section that is outside of @code{\partcombine} has
no effect on the pitches of @var{musicexpr1} and @var{musicexpr2}.

@seealso

Program reference: @internalsref{PartCombineMusic}.

@refbugs

When @code{printPartCombineTexts} is set, when the two voices play the
same notes on and off, the part combiner may typeset @code{a2} more
than once in a measure.

@code{\partcombine} cannot be inside @code{\times}.

@code{\partcombine} cannot be inside @code{\relative}.

Internally, the @code{\partcombine} interprets both arguments as
@code{Voice}s named @code{one} and @code{two}, and then decides when
the parts can be combined.  Consequently, if the arguments switch to
differently named @internalsref{Voice} contexts, the events in those
will be ignored.


@node Hiding staves
@subsection Hiding staves

@cindex Frenched scores
@cindex Hiding staves

In orchestral scores, staff lines that only have rests are usually
removed; this saves some space.  This style is called @q{French Score}.
For @internalsref{Lyrics},
@internalsref{ChordNames} and @internalsref{FiguredBass}, this is
switched on by default.  When the lines of these contexts turn out
empty after the line-breaking process, they are removed.

For normal staves, a specialized @internalsref{Staff} context is
available, which does the same: staves containing nothing (or only
multi-measure rests) are removed.  The context definition is stored in
@code{\RemoveEmptyStaffContext} variable.  Observe how the second staff
in this example disappears in the second line

@lilypond[quote,ragged-right,verbatim]
\layout {
  \context { \RemoveEmptyStaffContext }
}

{
  \relative c' <<
    \new Staff { e4 f g a \break c1 }
    \new Staff { c4 d e f \break R1 }
  >>
}
@end lilypond

The first system shows all staves in full.  If empty staves should be
removed from the first system too, set @code{remove-first} to true in
@internalsref{VerticalAxisGroup}.

@example
\override Score.VerticalAxisGroup #'remove-first = ##t
@end example

To remove other types of contexts, use @code{\AncientRemoveEmptyStaffContext}
or @code{\RemoveEmptyRhythmicStaffContext}.

Another application is making ossia sections, i.e., alternative
melodies on a separate piece of staff, with help of a Frenched
staff.  


@node Quoting other voices
@subsection Quoting other voices

@cindex cues

With quotations, fragments of other parts can be inserted into a part
directly.  Before a part can be quoted, it must be marked especially as
quotable.  This is done with the @code{\addQuote} command.

@example
\addQuote @var{name} @var{music}
@end example


@noindent
Here, @var{name} is an identifying string.  The @var{music} is any kind
of music.  Here is an example of @code{\addQuote}

@example
\addQuote clarinet \relative c' @{
  f4 fis g gis
@}
@end example

This command must be entered at toplevel, i.e., outside any music
blocks.

After calling @code{\addQuote}, the quotation may then be done with
@code{\quoteDuring} or @code{\cueDuring},

@example
\quoteDuring #@var{name} @var{music}
@end example

During a part, a piece of music can be quoted with the @code{\quoteDuring}
command.

@example
\quoteDuring #"clarinet" @{ s2. @}
@end example

This would cite three quarter notes (the duration of @code{s2.})  of
the previously added @code{clarinet} voice.


More precisely, it takes the current time-step of the part being
printed, and extracts the notes at the corresponding point of the
@code{\addQuote}d voice.  Therefore, the argument to @code{\addQuote}
should be the entire part of the voice to be quoted, including any
rests at the beginning.

Quotations take into account the transposition of both source and target
instruments, if they are specified using the @code{\transposition} command.

@lilypond[quote,ragged-right,verbatim]
\addQuote clarinet \relative c' {
  \transposition bes
  f4 fis g gis
}

{
  e'8 f'8 \quoteDuring #"clarinet" { s2 }
}
@end lilypond

The type of events that are present in cue notes can be trimmed with
the @code{quotedEventTypes} property.  The default value is
@code{(note-event rest-event)}, which means that only notes and
rests of the cued voice end up in the @code{\quoteDuring}.
Setting

@example
\set Staff.quotedEventTypes =
       #'(note-event articulation-event dynamic-event)
@end example

@noindent
will quote notes (but no rests), together with scripts and dynamics.

@refbugs

Only the contents of the first @internalsref{Voice} occurring in an
@code{\addQuote} command will be considered for quotation, so
@var{music} can not contain @code{\new} and @code{\context Voice}
statements that would switch to a different Voice.

Quoting grace notes is broken and can even cause LilyPond to crash.

Quoting nested triplets may result in poor notation.


@seealso

In this manual: @ref{Instrument transpositions}.

Examples:
@c  FIXME: Add when LSR is updated.  -gp
@c @i nputfileref{input/@/regression,quote@/.ly}
@c @i nputfileref{input/@/regression,quote@/-transposition@/.ly}

Program reference: @internalsref{QuoteMusic}.


@node Formatting cue notes
@subsection Formatting cue notes

@cindex cues, formatting

The previous section deals with inserting notes from another voice.
There is a more advanced music function called @code{\cueDuring},
which makes formatting cue notes easier.

The syntax is

@example
  \cueDuring #@var{name} #@var{updown} @var{music}
@end example

This will insert notes from the part @var{name} into a
@internalsref{Voice} called @code{cue}.  This happens simultaneously
with @var{music}, which usually is a rest.  When the cue notes start,
the staff in effect becomes polyphonic for a moment.  The argument
@var{updown} determines whether the cue notes should be notated as a
first or second voice.


@lilypond[verbatim,ragged-right]
smaller = {
  \set fontSize = #-2
  \override Stem #'length-fraction = #0.8
  \override Beam #'thickness = #0.384
  \override Beam #'length-fraction = #0.8
}

\addQuote clarinet \relative {
  R1*20
  r2 r8 c f f
}

\new Staff \relative  <<

  % setup a context for  cue  notes.
  \new Voice = "cue" { \smaller \skip 1*21 }

  \set Score.skipBars = ##t

  \new Voice {
    R1*20
    \cueDuring #"clarinet" #1 {
      R1
    }
    g4 g2.
  }
>>
@end lilypond


Here are a couple of hints for successful cue notes

@itemize @bullet
@item
Cue notes have smaller font sizes.
@item
 the cued part is marked with the instrument playing the cue.
@item
 when the original part takes over again, this should be marked with
 the name of the original instrument.

@c really?  Are you sure about that last point?  I'll check after 3.0 -gp

@c Yes, this is good practice.  Otherwise, the start of the original
@c part can only be seen from the font size.  This is not good enough
@c for sight-reading.  It is possilbe to use other
@c markers (e.g. a big close-bracket over the staff) to indicate the cue
@c   notes are
@c finished.
@c -hwn


Any other changes introduced by the cued part should also be
undone.  For example, if the cued instrument plays in a different clef,
the original clef should be stated once again.

@end itemize

The macro @code{\transposedCueDuring} is
useful to add cues to instruments which use a completely different
octave range (for example, having a cue of a piccolo flute within
a contra bassoon part).

@lilypond[verbatim,ragged-right,quote]
picc = \relative c''' {
  \clef "treble^8"
  R1 |
  c8 c c e g2 |
  a4 g g2 |
}
\addQuote "picc" { \picc }

cbsn = \relative c, {
  \clef "bass_8"
  c4 r g r
  \transposedCueDuring #"picc" #UP c,, { R1 } |
  c4 r g r |
}

<<
  \context Staff = "picc" \picc
  \context Staff = "cbsn" \cbsn
>>
@end lilypond



@node Aligning to cadenzas
@subsection Aligning to cadenzas

In an orchestral context, cadenzas present a special problem:
when constructing a score that includes a cadenza, all other
instruments should skip just as many notes as the length of the
cadenza, otherwise they will start too soon or too late.

A solution to this problem are the functions @code{mmrest-of-length}
and @code{skip-of-length}.  These Scheme functions take a piece of music
as argument, and generate a @code{\skip} or multi-rest, exactly as
long as the piece.  The use of @code{mmrest-of-length} is demonstrated
in the following example.

@lilypond[verbatim,ragged-right,quote]
cadenza = \relative c' {
  c4 d8 << { e f g } \\ { d4. } >>
  g4 f2 g4 g
}

\new GrandStaff <<
  \new Staff { \cadenza c'4 }
  \new Staff {
    #(ly:export (mmrest-of-length cadenza))
    c'4
  }
>>
@end lilypond




@node Contemporary notation
@section Contemporary notation

In the 20th century, composers have greatly expanded the musical
vocabulary.  With this expansion, many innovations in musical notation
have been tried.  The book @q{Music Notation in the 20th century} by
Kurt Stone gives a comprehensive overview (see @ref{Literature
list}).

This section describes notation that does
not fit into traditional notation categories, such as pitches,
tuplet beams, and articulation.  For contemporary notation
that fits into traditional notation categories, such as
microtones, nested tuplet beams, and unusual fermatas, please
see those sections of the documentation.

@menu
* Polymetric notation::         
* Time administration::         
* Proportional notation::       
* Clusters::                    
* Special noteheads::           
* Feathered beams::             
* Improvisation::               
* Selecting notation font size::  
@end menu


@node Polymetric notation
@subsection Polymetric notation

@cindex double time signatures
@cindex signatures, polymetric
@cindex polymetric signatures
@cindex meter, polymetric

Double time signatures are not supported explicitly, but they can be
faked.  In the next example, the markup for the time signature is
created with a markup text.  This markup text is inserted in the
@internalsref{TimeSignature} grob. See also
@inputfileref{input/@/test,compound@/-time@/.ly}).

@lilypond[verbatim,ragged-right]
% create 2/4 + 5/8
tsMarkup =\markup {
  \override #'(baseline-skip . 2) \number {
    \column { "2" "4" }
    \vcenter "+"
    \bracket \column { "5" "8" }
  }
}

{
  \override Staff.TimeSignature #'stencil = #ly:text-interface::print
  \override Staff.TimeSignature #'text = #tsMarkup
  \time 3/2
  c'2 \bar ":" c'4 c'4.
}
@end lilypond

Each staff can also have its own time signature.  This is done by
moving the @internalsref{Timing_translator} to the @internalsref{Staff}
context.

@example
\layout @{
  \context @{ \Score
     \remove "Timing_translator"
     \remove "Default_bar_line_engraver"
  @}
  \context @{
    \Staff
    \consists "Timing_translator"
    \consists "Default_bar_line_engraver"
  @}

@}
@end example


Now, each staff has its own time signature.
@example
<<
  \new Staff @{
    \time 3/4
    c4 c c | c c c |
  @}
  \new Staff @{
    \time 2/4
    c4 c | c c | c c
  @}
  \new Staff @{
    \time 3/8
    c4. c8 c c c4. c8 c c
  @}
>>
@end example

@lilypond[quote,ragged-right]
\layout{
  \context{
     \Score
     \remove "Timing_translator"
     \remove "Default_bar_line_engraver"
    }
  \context{ \Staff
    \consists "Timing_translator"
    \consists "Default_bar_line_engraver"
  }
}

\relative c' <<
  \new Staff {
    \time 3/4
    c4 c c | c c c |
  }
  \new Staff {
    \time 2/4
    c4 c | c c | c c
  }
  \new Staff {
    \time 3/8
    c4. c8 c c c4. c8 c c
  }
>>
@end lilypond


A different form of polymetric notation is where note lengths have
different values across staves.

This notation can be created by setting a common time signature for
each staff but replacing it manually using
@code{timeSignatureFraction} to the desired fraction.  Then the printed
durations in each staff are scaled to the common time signature.
The latter is done with @code{\compressMusic}, which is used similar
to @code{\times}, but does not create a tuplet bracket. The syntax is
@example
\compressMusic #'(@var{numerator} . @var{denominator}) @var{musicexpr}
@end example



In this example, music with the time signatures of 3/4, 9/8, and 10/8 are
used in parallel.  In the second staff, shown durations are multiplied by
2/3, so that 2/3 * 9/8 = 3/4, and in the third staff, shown durations are
multiplied by 3/5, so that 3/5 * 10/8 = 3/4.

@lilypond[quote,ragged-right,verbatim,fragment]
\relative c' { <<
  \new Staff {
    \time 3/4
    c4 c c | c c c |
  }
  \new Staff {
    \time 3/4
    \set Staff.timeSignatureFraction = #'(9 . 8)
    \compressMusic #'(2 . 3)
      \repeat unfold 6 { c8[ c c] }
  }
  \new Staff {
    \time 3/4
    \set Staff.timeSignatureFraction = #'(10 . 8)
    \compressMusic #'(3 . 5) {
      \repeat unfold 2 { c8[ c c] }
      \repeat unfold 2 { c8[ c] }
      | c4. c4. \times 2/3 { c8 c c } c4
    }
  }
>> }
@end lilypond




@refbugs

When using different time signatures in parallel, the spacing is
aligned vertically, but bar lines distort the regular spacing.


@node Time administration
@subsection Time administration

@cindex Time administration

Time is administered by the @internalsref{Time_signature_engraver},
which usually lives in the @internalsref{Score} context.  The
bookkeeping deals with the following variables

@table @code
@item currentBarNumber
The measure number.

@item measureLength
The length of the measures in the current time signature.  For a 4/4
time this is@tie{}1, and for 6/8 it is 3/4.

@item measurePosition
The point within the measure where we currently are.  This quantity
is reset to@tie{}0 whenever it exceeds @code{measureLength}.  When that
happens, @code{currentBarNumber} is incremented.

@item timing
If set to true, the above variables are updated for every time
step.  When set to false, the engraver stays in the current measure
indefinitely.
@end table

Timing can be changed by setting any of these variables explicitly.
In the next example, the 4/4 time signature is printed, but
@code{measureLength} is set to 5/4.  After a while, the measure is
shortened by 1/8, by setting @code{measurePosition} to 7/8 at 2/4
in the measure, so the next bar line will fall at 2/4 + 3/8.  The
3/8 arises because 5/4 normally has 10/8, but we have manually
set the measure position to be 7/8 and 10/8 - 7/8 = 3/8.

@lilypond[quote,ragged-right,verbatim,relative,fragment]
\set Score.measureLength = #(ly:make-moment 5 4)
c1 c4
c1 c4
c4 c4
\set Score.measurePosition = #(ly:make-moment 7 8)
b8 b b
c4 c1
@end lilypond

@noindent
As the example illustrates, @code{ly:make-moment n m} constructs a
duration of n/m of a whole note.  For example, @code{ly:make-moment 1 8} is
an eighth
note duration and @code{ly:make-moment 7 16} is the duration of
seven sixteenths notes.


@node Proportional notation
@subsection Proportional notation
@cindex Proportional notation

Notes can be spaced proportionally to their time-difference by
assigning a duration to @code{proportionalNotationDuration}

@lilypond[quote,ragged-right,verbatim,relative=2,fragment]
<<
  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
  \new Staff { c8[ c c c c c]  c4 c2 r2 }
  \new Staff { c2  \times 2/3 { c8 c c } c4 c1 }
>>
@end lilypond

Setting this property only affects the ideal spacing between
consecutive notes.  For true proportional notation, the following
settings are also required.

@itemize @bullet

@item True proportional notation requires that symbols are allowed to
overstrike each other.  That is achieved by removing the
@internalsref{Separating_line_group_engraver} from
@internalsref{Staff} context.

@item Spacing influence of  prefatory matter (clefs, bar lines, etc.)
is removed by setting the @code{strict-note-spacing} property to
@code{#t} in @internalsref{SpacingSpanner} grob.

@item Optical spacing tweaks are switched by setting 
@code{uniform-stretching} in @internalsref{SpacingSpanner} to true.


@end itemize

@seealso

Examples: @lsr{spacing,proportional@/-spacing@/.ly}, 
@lsr{spacing,proportional@/-strict@/-grace@/-notes@/.ly}, and
@lsr{spacing,proportional@/-strict@/-notespacing@/.ly}

An example of strict proportional notation is in the
example file @file{input/proportional.ly}.


@node Clusters
@subsection Clusters

@cindex cluster

A cluster indicates a continuous range of pitches to be played.  They
can be denoted as the envelope of a set of notes.  They are entered by
applying the function @code{makeClusters} to a sequence of
chords, e.g.,
@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\makeClusters { <c e > <b f'> }
@end lilypond

The following example (from
@inputfileref{input/@/regression,cluster@/.ly}) shows what the result
looks like

@lilypondfile[ragged-right,quote]{cluster.ly}

Ordinary notes and clusters can be put together in the same staff,
even simultaneously.  In such a case no attempt is made to
automatically avoid collisions between ordinary notes and clusters.

@seealso

Program reference: @internalsref{ClusterSpanner},
@internalsref{ClusterSpannerBeacon},
@internalsref{Cluster_spanner_engraver}.

Examples: @inputfileref{input/@/regression,cluster@/.ly}.

@refbugs

Music expressions like @code{<< @{ g8 e8 @} a4 >>} are not printed
accurately.  Use @code{<g a>8 <e a>8} instead.


@node Special noteheads
@subsection Special noteheads

@cindex note heads, special

Different noteheads are used by various instruments for various
meanings -- crosses are used for @q{parlato} with vocalists, stopped
notes on guitar; diamonds are used for harmonics on string instruments,
etc.  There is a shorthand (@code{\harmonic}) for diamond shapes; the
other notehead styles are produced by tweaking the property

@lilypond[ragged-right,relative=1,fragment,verbatim,quote]
c4 d
\override NoteHead #'style = #'cross
e f
\revert NoteHead #'style
e d <c f\harmonic> <d a'\harmonic>
@end lilypond

@noindent
To see all notehead styles, please see
@ref{Note head styles}.


@seealso

Program reference: @internalsref{NoteHead}.


@node Feathered beams
@subsection Feathered beams

Feathered beams are printed by setting the @code{grow-direction}
property of a @code{Beam}.  The @code{\featherDurations} function
can be used to adjust note durations.

@lilypond[ragged-right,relative=1,fragment,verbatim,quote]
\featherDurations #(ly:make-moment 5 4) 
{
  \override Beam #'grow-direction = #LEFT
  c16[ c c c c c c]
}
@end lilypond

@refbugs

The @code{\featherDuration} command only works with very short
music snippets.

@node Improvisation
@subsection Improvisation

Improvisation is sometimes denoted with slashed note heads.  Such note
heads can be created by adding a @internalsref{Pitch_squash_engraver}
to the @internalsref{Staff} or @internalsref{Voice} context.  Then, the
following command

@example
\set squashedPosition = #0
\override NoteHead #'style = #'slash
@end example

@noindent
switches on the slashes.

There are shortcuts @code{\improvisationOn} (and an accompanying
@code{\improvisationOff}) for this command sequence.  They are used in
the following example

@lilypond[verbatim,ragged-right,quote]
\new Staff \with {
  \consists Pitch_squash_engraver
} \transpose c c' {
  e8 e g a a16(bes)(a8) g \improvisationOn
  e8
  ~e2~e8 f4 fis8
  ~fis2 \improvisationOff a16(bes) a8 g e
}
@end lilypond


@node Selecting notation font size
@subsection Selecting notation font size

The easiest method of setting the font size of any context is by
setting the @code{fontSize} property.

@lilypond[quote,fragment,relative=1,verbatim]
c8
\set fontSize = #-4
c f
\set fontSize = #3
g
@end lilypond

@noindent
It does not change the size of variable symbols, such as beams or
slurs.

Internally, the @code{fontSize} context property will cause the
@code{font-size} property to be set in all layout objects.  The value
of @code{font-size} is a number indicating the size relative to the
standard size for the current staff height.  Each step up is an
increase of approximately 12% of the font size.  Six steps is exactly a
factor two.  The Scheme function @code{magstep} converts a
@code{font-size} number to a scaling factor.  The @code{font-size}
property can also be set directly, so that only certain layout objects are
affected.

@lilypond[quote,fragment,relative=1,verbatim]
c8
\override NoteHead #'font-size = #-4
c f
\override NoteHead #'font-size = #3
g
@end lilypond

Font size changes are achieved by scaling the design size that is
closest to the desired size.  The standard font size (for
@code{font-size} equals 0), depends on the standard staff height.  For
a 20pt staff, a 10pt font is selected.

The @code{font-size} property can only be set on layout objects that
use fonts. These are the ones supporting the
@internalsref{font-interface} layout interface.

@refcommands

The following commands set @code{fontSize} for the current voice:

@funindex \tiny
@code{\tiny},
@funindex \small
@code{\small},
@funindex \normalsize
@code{\normalsize}.



@node Educational use
@section Educational use

With the amount of control that LilyPond offers, one can make great
teaching tools in addition to great musical scores.

@menu
* Balloon help::                
* Blank music sheet::           
* Hidden notes::                
* Shape note heads::            
* Easy Notation note heads::    
* Analysis brackets::           
* Coloring objects::            
* Parentheses::                 
* Grid lines::                  
@end menu

@node Balloon help
@subsection Balloon help

Elements of notation can be marked and named with the help of a square
balloon.  The primary purpose of this feature is to explain notation.

The following example demonstrates its use.

@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
\new Voice \with { \consists "Balloon_engraver" }
{
  \balloonGrobText #'Stem #'(3 . 4) \markup { "I'm a Stem" }
  <c-\balloonText #'(-2 . -2) \markup { Hello }  >8
}
@end lilypond

@noindent
There are two music functions, @code{balloonText} and
@code{balloonGrobText}. The latter takes the name of the grob to
adorn, while the former may be used as an articulation on a note. 
The other arguments  are the offset and the text of the label.

@cindex balloon
@cindex notation, explaining

@seealso

Program reference: @internalsref{text-balloon-interface}.




@node Blank music sheet
@subsection Blank music sheet

@cindex Sheet music, empty
@cindex Staves, blank sheet

A blank music sheet can be produced also by using invisible notes, and
removing @code{Bar_number_engraver}.


@lilypond[quote,verbatim]
\layout{ indent = #0 }
emptymusic = {
  \repeat unfold 2 % Change this for more lines.
  { s1\break }
  \bar "|."
}
\new Score \with {
  \override TimeSignature #'transparent = ##t
% un-comment this line if desired
%  \override Clef #'transparent = ##t
  defaultBarType = #""
  \remove Bar_number_engraver
} <<

% modify these to get the staves you want
  \new Staff \emptymusic
  \new TabStaff \emptymusic
>>
@end lilypond


@node Hidden notes
@subsection Hidden notes

@cindex Hidden notes
@cindex Invisible notes
@cindex Transparent notes

@funindex \hideNotes
@funindex \unHideNotes
Hidden (or invisible or transparent) notes can be useful in preparing theory
or composition exercises.

@lilypond[quote,ragged-right,verbatim,relative=2,fragment]
c4 d4
\hideNotes
e4 f4
\unHideNotes
g4 a
@end lilypond


@node Shape note heads
@subsection Shape note heads

@cindex note heads, shape

In shape note head notation, the shape of the note head corresponds
to the harmonic function of a note in the scale.  This notation was
popular in the 19th century American song books.

Shape note heads can be produced by setting @code{\aikenHeads} or
@code{\sacredHarpHeads}, depending on the style desired.

@lilypond[verbatim,relative=1,fragment]
  \aikenHeads
  c8 d4 e8 a2 g1
  \sacredHarpHeads
  c8 d4. e8 a2 g1
@end lilypond

Shapes are determined on the step in the scale, where the base of the
scale is determined by  the @code{\key} command

@funindex \key
@funindex shapeNoteStyles
@funindex \aikenHeads
@funindex \sacredHarpHeads

Shape note heads are implemented through the @code{shapeNoteStyles}
property.  Its value is a vector of symbols.  The k-th element indicates
the style to use for the k-th step of the scale.  Arbitrary
combinations are possible, e.g.

@lilypond[verbatim,relative=1,fragment]
  \set shapeNoteStyles  = ##(cross triangle fa #f mensural xcircle diamond)
  c8 d4. e8 a2 g1
@end lilypond


@node Easy Notation note heads
@subsection Easy Notation note heads

@cindex note heads, practice
@cindex note heads, easy notation
@cindex easy notation
@cindex Hal Leonard

The @q{easy play} note head includes a note name inside the head.  It is
used in music for beginners

@lilypond[quote,ragged-right,verbatim,fragment,staffsize=26]
  \setEasyHeads
  c'2 e'4 f' | g'1
@end lilypond

The command @code{\setEasyHeads} overrides settings for the
@internalsref{NoteHead} object.  To make the letters readable, it has
to be printed in a large font size.  To print with a larger font, see
@ref{Setting the staff size}.

@refcommands

@funindex \setEasyHeads
@code{\setEasyHeads}


@node Analysis brackets
@subsection Analysis brackets
@cindex brackets
@cindex phrasing brackets
@cindex musicological analysis
@cindex note grouping bracket

Brackets are used in musical analysis to indicate structure in musical
pieces.  LilyPond supports a simple form of nested horizontal
brackets.  To use this, add the @internalsref{Horizontal_bracket_engraver}
to @internalsref{Staff} context.  A bracket is started with
@code{\startGroup} and closed with @code{\stopGroup}

@lilypond[quote,ragged-right,verbatim]
\score {
  \relative c'' {
    c4\startGroup\startGroup
    c4\stopGroup
    c4\startGroup
    c4\stopGroup\stopGroup
  }
  \layout {
    \context {
      \Staff \consists "Horizontal_bracket_engraver"
}}}
@end lilypond

@seealso

Program reference: @internalsref{HorizontalBracket}.


@node Coloring objects
@subsection Coloring objects

Individual objects may be assigned colors.  You may use the
color names listed in the @ref{List of colors}.

@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
\override NoteHead #'color = #red
c4 c
\override NoteHead #'color = #(x11-color 'LimeGreen)
d
\override Stem #'color = #blue
e
@end lilypond

The full range of colors defined for X11 can be accessed by using the
Scheme function x11-color.  The function takes one argument that can be a
symbol

@example
\override Beam #'color = #(x11-color 'MediumTurquoise)
@end example

or a string

@example
\override Beam #'color = #(x11-color "MediumTurquoise")
@end example

The first form is quicker to write and is more efficient.  However, using
the second form it is possible to access X11 colors by the multi-word
form of its name

@example
\override Beam #'color = #(x11-color "medium turquoise")
@end example

If x11-color cannot make sense of the parameter then the color returned
defaults to black.  It should be obvious from the final score that
something is wrong.

This example illustrates the use of x11-color.  Notice that the stem
color remains black after being set to (x11-color 'Boggle), which is
deliberate nonsense.

@lilypond[quote,ragged-right,verbatim]
{
  \override Staff.StaffSymbol #'color = #(x11-color 'SlateBlue2)
  \set Staff.instrumentName = \markup {
    \with-color #(x11-color 'navy) "Clarinet"
  }
  \time 2/4
  gis''8 a''
  \override Beam #'color = #(x11-color "medium turquoise")
  gis'' a''
  \override NoteHead #'color = #(x11-color "LimeGreen")
  gis'' a''
  \override Stem #'color = #(x11-color 'Boggle)
  gis'' a''
}
@end lilypond


@seealso

Appendix: @ref{List of colors}.


@refbugs
Not all x11 colors are distinguishable in a web browser.  For web use
normal colors are recommended.

An x11 color is not necessarily exactly the same shade as a similarly
named normal color.

Notes in a chord cannot be colored with @code{\override}; use
@code{\tweak} instead.  See @ref{Objects connected to the input}
for details.


@node Parentheses
@subsection Parentheses

@cindex ghost notes
@cindex notes, ghost
@cindex notes, parenthesized

Objects may be parenthesized by prefixing @code{\parenthesize} to the music
event,

@lilypond[relative=2,fragment,verbatim,ragged-right]
<
  c
  \parenthesize d
  g
>4-\parenthesize -.
@end lilypond

This only functions inside chords, even for single notes

@example
< \parenthesize NOTE>
@end example


@node Grid lines
@subsection Grid lines

@c FIXME: get an example for grid lines.  -gp
Vertical lines can be drawn between staves synchronized with
the notes.

Examples: @inputfileref{input/@/regression,grid@/-lines@/.ly}.

