@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

@c \version "2.19.21"

@node Staff notation
@section Staff notation

@c The line width is a bit of a hack to allow space for the
@c  instrument names.
@lilypondfile[quote,ragged-right,line-width=14.5\cm,staffsize=16]{staff-headword.ly}

This section explains how to influence the appearance of staves,
how to print scores with more than one staff, and how to add tempo
indications and cue notes to staves.

@menu
* Displaying staves::
* Modifying single staves::
* Writing parts::
@end menu


@node Displaying staves
@subsection Displaying staves

This section describes the different methods of creating and
grouping staves.

@menu
* Instantiating new staves::
* Grouping staves::
* Nested staff groups::
* Separating systems::
@end menu


@node Instantiating new staves
@unnumberedsubsubsec Instantiating new staves

@cindex new staff
@cindex staff initiation
@cindex staff instantiation
@cindex staff, new
@cindex staff, single
@cindex staff, drum
@cindex staff, percussion
@cindex drum staff
@cindex percussion staff
@cindex Gregorian transcription staff
@cindex rhythmic staff
@cindex tablature

@funindex \drummode
@funindex DrumStaff
@funindex RhythmicStaff
@funindex TabStaff
@funindex MensuralStaff
@funindex VaticanaStaff
@funindex GregorianTranscriptionStaff

@notation{Staves} (singular: @notation{staff}) are created with
the @code{\new} or @code{\context} commands.  For details, see
@ref{Creating and referencing contexts}.

The basic staff context is @code{Staff}:

@lilypond[verbatim,quote]
\new Staff \relative { c''4 d e f }
@end lilypond

The @code{DrumStaff} context creates a five-line staff set up for
a typical drum set.  Each instrument is shown with a different
symbol.  The instruments are entered in drum mode following a
@code{\drummode} command, with each instrument specified by name.
For details, see @ref{Percussion staves}.

@lilypond[verbatim,quote]
\new DrumStaff {
  \drummode { cymc hh ss tomh }
}
@end lilypond

@code{RhythmicStaff} creates a single-line staff that only
displays the rhythmic values of the input.  Real durations are
preserved.  For details, see @ref{Showing melody rhythms}.

@lilypond[verbatim,quote]
\new RhythmicStaff { c4 d e f }
@end lilypond

@code{TabStaff} creates a tablature with six strings in standard
guitar tuning.  For details, see @ref{Default tablatures}.

@lilypond[verbatim,quote]
\new TabStaff \relative { c''4 d e f }
@end lilypond

There are two staff contexts specific for the notation of ancient
music: @code{MensuralStaff} and @code{VaticanaStaff}.  They are
described in @ref{Pre-defined contexts}.

The @code{GregorianTranscriptionStaff} context creates a staff to
notate modern Gregorian chant.  It does not show bar lines.

@lilypond[verbatim,quote]
\new GregorianTranscriptionStaff \relative { c''4 d e f e d }
@end lilypond

New single staff contexts may be defined.  For details, see
@ref{Defining new contexts}.

@seealso
Music Glossary:
@rglos{staff},
@rglos{staves}.

Notation Reference:
@ref{Creating and referencing contexts},
@ref{Percussion staves},
@ref{Showing melody rhythms},
@ref{Default tablatures},
@ref{Pre-defined contexts},
@ref{Staff symbol},
@ref{Gregorian chant contexts},
@ref{Mensural contexts},
@ref{Defining new contexts}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{Staff},
@rinternals{DrumStaff},
@rinternals{GregorianTranscriptionStaff},
@rinternals{RhythmicStaff},
@rinternals{TabStaff},
@rinternals{MensuralStaff},
@rinternals{VaticanaStaff},
@rinternals{StaffSymbol}.


@node Grouping staves
@unnumberedsubsubsec Grouping staves

@cindex start of system
@cindex staff, multiple
@cindex system start delimiter
@cindex bracket, vertical
@cindex brace, vertical
@cindex choir staff
@cindex grand staff
@cindex piano staff
@cindex staff group
@cindex staff, choir
@cindex staff, piano
@cindex staff, grand
@cindex system

Various contexts exist to group single staves together in order to
form multi-staff systems.  Each grouping context sets the style of
the system start delimiter and the behavior of bar lines.

If no context is specified, the default properties will be used:
the group is started with a vertical line, and the bar lines are
not connected.

@lilypond[verbatim,quote]
<<
  \new Staff \relative { c''1 c }
  \new Staff \relative { c''1 c }
>>
@end lilypond

In the @code{StaffGroup} context, the group is started with a
bracket and bar lines are drawn through all the staves.

@lilypond[verbatim,quote]
\new StaffGroup <<
  \new Staff \relative { c''1 c }
  \new Staff \relative { c''1 c }
>>
@end lilypond

In a @code{ChoirStaff}, the group starts with a bracket, but bar
lines are not connected.

@lilypond[verbatim,quote]
\new ChoirStaff <<
  \new Staff \relative { c''1 c }
  \new Staff \relative { c''1 c }
>>
@end lilypond

In a @code{GrandStaff}, the group begins with a brace, and bar
lines are connected between the staves.

@lilypond[verbatim,quote]
\new GrandStaff <<
  \new Staff \relative { c''1 c }
  \new Staff \relative { c''1 c }
>>
@end lilypond

The @code{PianoStaff} is identical to a @code{GrandStaff}, except
that it supports printing the instrument name directly.  For
details, see @ref{Instrument names}.

@lilypond[verbatim,quote]
\new PianoStaff \with { instrumentName = "Piano" }
<<
  \new Staff \relative { c''1 c }
  \new Staff \relative { \clef bass c1 c }
>>
@end lilypond

Each staff group context sets the property
@code{systemStartDelimiter} to one of the following values:
@code{SystemStartBar}, @code{SystemStartBrace}, or
@code{SystemStartBracket}.  A fourth delimiter,
@code{SystemStartSquare}, is also available, but it must be
explicitly specified.

New staff group contexts may be defined.  For details, see
@ref{Defining new contexts}.


@snippets

@cindex square bracket, at start of staff group
@cindex bracket, square, at start of staff group
@cindex staff group, with square bracket at start
@lilypondfile[verbatim,quote,texidoc,doctitle]
{use-square-bracket-at-the-start-of-a-staff-group.ly}

@cindex bracket, at start of single staff
@cindex brace, at start of single staff
@cindex staff, single, with bracket or brace
@cindex single staff with bracket or brace
@lilypondfile[verbatim,quote,texidoc,doctitle]
{display-bracket-with-only-one-staff-in-a-system.ly}

@cindex mensurstriche layout
@cindex renaissance music
@cindex transcription of mensural music
@cindex mensural music, transcription of
@cindex bar line, between staves
@lilypondfile[verbatim,quote,texidoc,doctitle]
{mensurstriche-layout-bar-lines-between-the-staves.ly}


@seealso
Music Glossary:
@rglos{brace},
@rglos{bracket},
@rglos{grand staff}.

Notation Reference:
@ref{Instrument names},
@ref{Defining new contexts}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{Staff},
@rinternals{StaffGroup},
@rinternals{ChoirStaff},
@rinternals{GrandStaff},
@rinternals{PianoStaff},
@rinternals{SystemStartBar},
@rinternals{SystemStartBrace},
@rinternals{SystemStartBracket},
@rinternals{SystemStartSquare}.


@node Nested staff groups
@unnumberedsubsubsec Nested staff groups

@cindex staff, nested
@cindex nesting of staves
@cindex system start delimiter, nested
@cindex nested staff bracket
@cindex bracket, nesting of
@cindex brace, nesting of

Staff-group contexts can be nested to arbitrary depths.  In this
case, each child context creates a new bracket adjacent to the
bracket of its parent group.

@lilypond[verbatim,quote]
\new StaffGroup <<
  \new Staff \relative { c''2 c | c2 c }
  \new StaffGroup <<
    \new Staff \relative { g'2 g | g2 g }
    \new StaffGroup \with {
      systemStartDelimiter = #'SystemStartSquare
    }
    <<
      \new Staff \relative { e'2 e | e2 e }
      \new Staff \relative { c'2 c | c2 c }
    >>
  >>
>>
@end lilypond

New nested staff group contexts can be defined.  For details, see
@ref{Defining new contexts}.


@snippets

@lilypondfile[verbatim,quote,texidoc,doctitle]
{nesting-staves.ly}


@seealso
Notation Reference:
@ref{Grouping staves},
@ref{Instrument names},
@ref{Defining new contexts}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{StaffGroup},
@rinternals{ChoirStaff},
@rinternals{SystemStartBar},
@rinternals{SystemStartBrace},
@rinternals{SystemStartBracket},
@rinternals{SystemStartSquare}.


@node Separating systems
@unnumberedsubsubsec Separating systems

@cindex system separator mark

If the number of systems per page changes from page to page it is
customary to separate the systems by placing a system separator mark
between them.  By default the system separator is blank, but can be
turned on with a @code{\paper} option.

@c \book is required here to display the system separator
@c ragged-right is required as there are two systems
@lilypond[verbatim,quote,ragged-right]
\book {
  \score {
    \new StaffGroup <<
      \new Staff {
        \relative {
          c''4 c c c
          \break
          c4 c c c
        }
      }
      \new Staff {
        \relative {
          c''4 c c c
          \break
          c4 c c c
        }
      }
    >>
  }
  \paper {
    system-separator-markup = \slashSeparator
    % following commands are needed only to format this documentation
    paper-width = 100\mm
    paper-height = 100\mm
    tagline = ##f
  }
}
@end lilypond

@seealso
Notation Reference:
@ref{Page layout}.

Snippets:
@rlsr{Staff notation}.


@node Modifying single staves
@subsection Modifying single staves

This section explains how to change specific attributes of one
staff: for example, modifying the number of staff lines or the
staff size.  Methods to start and stop staves and set ossia
sections are also described.

@menu
* Staff symbol::
* Ossia staves::
* Hiding staves::
@end menu


@node Staff symbol
@unnumberedsubsubsec Staff symbol

@cindex staff symbol
@cindex staff line, stopping and starting
@cindex staff line, modifying
@cindex ledger line
@cindex ledger line, internal
@cindex ledger line, modifying

@funindex \startStaff
@funindex \stopStaff

The @code{\stopStaff} and @code{\startStaff} commands can be used to
stop or (re)start the staff lines respectively, from being printed at
any point witin a score.

@lilypond[verbatim,quote]
\relative {
  \stopStaff f''4 d \startStaff g, e
  f'4 d \stopStaff g, e
  f'4 d \startStaff g, e
}
@end lilypond

@predefined
@code{\startStaff},
@code{\stopStaff}.
@endpredefined

The lines of a staff belong to the @code{StaffSymbol} grob (including
ledger lines) and can be modified using @code{StaffSymbol} properties, but
these modifications must be made before the staff is (re)started.

The number of staff lines can be altered:

@lilypond[verbatim,quote]
\relative {
  f''4 d \stopStaff
  \override Staff.StaffSymbol.line-count = #2
  \startStaff g, e |

  f'4 d \stopStaff
  \revert Staff.StaffSymbol.line-count
  \startStaff g, e |
}
@end lilypond

The position of each staff line can also be altered.  A list of
numbers sets each line's position.  @code{0}@tie{}corresponds to the normal
center line, and the normal line positions are
@code{(-4@tie{}-2@tie{}0@tie{}2@tie{}4)}.  A single staff line is
printed for every value entered so that the number of staff lines, as
well as their position, can be changed with a single override.

@lilypond[verbatim,quote]
\relative {
  f''4 d \stopStaff
  \override Staff.StaffSymbol.line-positions = #'(1 3 5 -1 -3)
  \startStaff g, e |
  f'4 d \stopStaff
  \override Staff.StaffSymbol.line-positions = #'(8 6.5 -6 -8 -0.5)
  \startStaff g, e |
}
@end lilypond

To preserve typical stem directions (in the bottom half of the staff
stems point up, in the top half they point down), align the center
line (or space) of the customized staff with the position of the
normal center line (0).  The clef position and the position of
middle@tie{}C may need to be adjusted accordingly to fit the new
lines.  See @ref{Clef}.

Staff line thickness can be altered.  Ledger lines and note stems, by
default, are also affected.

@lilypond[verbatim,quote]
\new Staff \with {
  \override StaffSymbol.thickness = #3
} \relative {
  f''4 d g, e
}
@end lilypond

It is also possible to set ledger line thickness independently of staff
lines.

@lilypond[verbatim,quote]
\new Staff \with {
  \override StaffSymbol.thickness = #2
  \override StaffSymbol.ledger-line-thickness = #'(0.5 . 0.4)
} \relative {
  f'''4 a, a,, f
}
@end lilypond

@noindent
The first value is multiplied by the staff line thickness, the second by
the staff space and then the two values are added together to give the
new thickness of the ledger line.

The vertical positions of ledger lines can be altered,

@lilypond[verbatim,quote]
\new Staff \with {
  \override StaffSymbol.ledger-positions = #'(-3 -2 -1 2 5 6)
} \relative {
  f'''4 a, a,, f
}
@end lilypond

Additional ledger lines can be made to appear above or below note heads
depending on the current position relative to other note heads that
also have their own ledger lines.

@lilypond[verbatim,quote]
\new Staff \with {
  \override StaffSymbol.ledger-extra = #4
} \relative {
  f'''4 a, d, f,
}
@end lilypond

Ledger lines can also be made to appear inside the staff where custom
staff lines are required.  The example shows the default position of
ledger lines when the explicit @code{ledger-position} is and is not set.
The @code{\stopStaff} is needed in the example to revert the
@code{\override} for the whole @code{StaffSymbol}.

@lilypond[verbatim,quote]
\relative d' {
  \override Staff.StaffSymbol.line-positions = #'(-8 0 2 4)
  d4 e f g
  \stopStaff
  \startStaff
  \override Staff.StaffSymbol.ledger-positions = #'(-8 -6 (-4 -2) 0)
  d4 e f g
}
@end lilypond

The distance between staff lines can be altered.  This affects ledger
line spacing as well.

@lilypond[verbatim,quote]
\new Staff \with {
  \override StaffSymbol.staff-space = #1.5
} \relative {
  f'''4 d, g, e,
}
@end lilypond


@snippets

@lilypondfile[verbatim,quote,texidoc,doctitle]
{making-some-staff-lines-thicker-than-the-others.ly}


@seealso
Music Glossary:
@rglos{line},
@rglos{ledger line},
@rglos{staff}.

Notation Reference:
@ref{Clef}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{StaffSymbol},
@rinternals{staff-symbol-interface}.


@node Ossia staves
@unnumberedsubsubsec Ossia staves

@cindex staff, Frenched
@cindex ossia
@cindex Frenched staff
@cindex staff, resizing of
@cindex resizing of staves

@funindex \startStaff
@funindex \stopStaff

@notation{Ossia} staves can be set by creating a new simultaneous
staff in the appropriate location:

@lilypond[verbatim,quote]
\new Staff \relative {
  c''4 b d c
  <<
    { c4 b d c }
    \new Staff { e4 d f e }
  >>
  c4 b c2
}
@end lilypond

@noindent
However, the above example is not what is usually desired.  To
create ossia staves that are above the original staff, have no
time signature or clef, and have a smaller font size, tweaks must
be used.  The Learning Manual describes a specific technique to
achieve this goal, beginning with
@rlearning{Nesting music expressions}.

The following example uses the @code{alignAboveContext} property
to align the ossia staff.  This method is most appropriate when
only a few ossia staves are needed.

@lilypond[verbatim,quote]
\new Staff = "main" \relative {
  c''4 b d c
  <<
    { c4 b d c }

    \new Staff \with {
      \remove "Time_signature_engraver"
      alignAboveContext = "main"
      \magnifyStaff #2/3
      firstClef = ##f
    }
    { e4 d f e }
  >>
  c4 b c2
}
@end lilypond

If many isolated ossia staves are needed, creating an empty
@code{Staff} context with a specific @emph{context id} may be more
appropriate; the ossia staves may then be created by
@emph{calling} this context and using @code{\startStaff} and
@code{\stopStaff} at the desired locations.  The benefits of this
method are more apparent if the piece is longer than the following
example.

@lilypond[verbatim,quote,ragged-right]
<<
  \new Staff = "ossia" \with {
    \remove "Time_signature_engraver"
    \hide Clef
    \magnifyStaff #2/3
  }
  { \stopStaff s1*6 }

  \new Staff \relative {
    c'4 b c2
    <<
      { e4 f e2 }
      \context Staff = "ossia" {
        \startStaff e4 g8 f e2 \stopStaff
      }
    >>
    g4 a g2 \break
    c4 b c2
    <<
      { g4 a g2 }
      \context Staff = "ossia" {
        \startStaff g4 e8 f g2 \stopStaff
      }
    >>
    e4 d c2
  }
>>
@end lilypond


Using the @code{\RemoveAllEmptyStaves} command to create ossia
staves may be used as an alternative.  This method is most
convenient when ossia staves occur immediately following a line
break.  For more information about
@code{\RemoveAllEmptyStaves}, see @ref{Hiding staves}.

@lilypond[verbatim,quote,ragged-right]
<<
  \new Staff = "ossia" \with {
    \remove "Time_signature_engraver"
    \hide Clef
    \magnifyStaff #2/3
    \RemoveAllEmptyStaves
  } \relative {
    R1*3
    c''4 e8 d c2
  }
  \new Staff \relative {
    c'4 b c2
    e4 f e2
    g4 a g2 \break
    c4 b c2
    g4 a g2
    e4 d c2
  }
>>
@end lilypond


@snippets

@cindex ossia, positioning
@cindex lyrics, positioning
@cindex position, lyrics
@cindex position, ossia
@funindex alignBelowContext
@funindex alignAboveContext
@lilypondfile[verbatim,quote,texidoc,doctitle]
{vertically-aligning-ossias-and-lyrics.ly}


@seealso
Music Glossary:
@rglos{ossia},
@rglos{staff},
@rglos{Frenched staff}.

Learning Manual:
@rlearning{Nesting music expressions},
@rlearning{Size of objects},
@rlearning{Length and thickness of objects}.

Notation Reference:
@ref{Hiding staves}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{StaffSymbol}.


@node Hiding staves
@unnumberedsubsubsec Hiding staves

@cindex Frenched score
@cindex Frenched staff
@cindex staff, hiding
@cindex staff, empty
@cindex hiding staves
@cindex hiding ancient staves
@cindex hiding rhythmic staves
@cindex hiding vaticana staves
@cindex empty staff

@funindex \RemoveEmptyStaves
@funindex \RemoveAllEmptyStaves
@funindex Staff_symbol_engraver
@funindex \stopStaff


Staff lines can be hidden by removing the
@code{Staff_symbol_engraver} from the @code{Staff} context.  As an
alternative, @code{\stopStaff} may be used.

@lilypond[verbatim,quote]
\new Staff \with {
  \remove "Staff_symbol_engraver"
}
\relative { a''8 f e16 d c b a2 }
@end lilypond


Empty staves can be hidden (for a so-called @q{Frenched Score})
by applying the @code{\RemoveEmptyStaves} command on a context, which
can be done globally (in a @code{\layout} block) as well as for
specific staves only (in a @code{\with} block).  This command removes
all empty staves in a score except for those in the first system.  If
you want those in the first system to be hidden also, use
@code{\RemoveAllEmptyStaves}.  Supported contexts are @code{Staff},
@code{RhythmicStaff} and @code{VaticanaStaff}.

@warning{A staff is considered empty when it contains only
multi-measure rests, rests, skips, spacer rests, or a combination of these
elements.}

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

\relative <<
  \new Staff {
    e'4 f g a \break
    b1 \break
    a4 b c2
  }
  \new Staff {
    c,4 d e f \break
    R1 \break
    f4 g c,2
  }
>>
@end lilypond

@cindex ossia

@noindent
@code{\RemoveAllEmptyStaves} can also be used to create ossia
sections for a staff.  For details, see @ref{Ossia staves}.


@predefined
@code{\RemoveEmptyStaves},
@code{\RemoveAllEmptyStaves}.
@endpredefined

@seealso
Music Glossary:
@rglos{Frenched staff}.

Learning Manual:
@rlearning{Visibility and color of objects}.

Notation Reference:
@ref{Changing context default settings},
@ref{Staff symbol},
@ref{Ossia staves},
@ref{Hidden notes},
@ref{Invisible rests},
@ref{Visibility of objects}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{ChordNames},
@rinternals{FiguredBass},
@rinternals{Lyrics},
@rinternals{Staff},
@rinternals{VerticalAxisGroup},
@rinternals{Staff_symbol_engraver}.

@knownissues
Removing @code{Staff_symbol_engraver} also hides bar lines.  If
bar line visibility is forced, formatting errors may occur.  In
this case, use the following overrides instead of removing the
engraver:

@example
\omit StaffSymbol
\override NoteHead.no-ledgers = ##t
@end example

For the Known issues and warnings associated with
@code{\Staff \RemoveEmptyStaves} see
@ref{Changing context default settings}.


@node Writing parts
@subsection Writing parts

This section explains how to insert tempo indications and
instrument names into a score.  Methods to quote other voices and
format cue notes are also described.

@menu
* Instrument names::
* Quoting other voices::
* Formatting cue notes::
@end menu

@node Instrument names
@unnumberedsubsubsec Instrument names

@cindex instrument name
@cindex instrument name, short

Instrument names can be printed on the left side of staves in the
@code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff}
and @code{ChoirStaff} contexts.  The value of
@code{instrumentName} is used for the first staff, and the value
of @code{shortInstrumentName} is used for all succeeding staves.

@lilypond[verbatim,quote,ragged-right]
\new Staff \with {
  instrumentName = "Violin "
  shortInstrumentName = "Vln. "
} \relative {
  c'4.. g'16 c4.. g'16 \break | c1 |
}
@end lilypond

@cindex instrument name, complex

@code{\markup} can be used to create more complex instrument names:

@lilypond[verbatim,quote]
\new Staff \with {
  instrumentName = \markup {
    \column { "Clarinetti"
      \line { "in B" \smaller \flat }
    }
  }
} \relative {
  c''4 c,16 d e f g2
}
@end lilypond

@cindex instrument name, centering

When two or more staff contexts are grouped together, the instrument
names and short instrument names are centered by default.  To center
multi-line instrument names, @code{\center-column} must be used:

@lilypond[verbatim,quote,indent=1.5\cm]
<<
  \new Staff \with {
    instrumentName = "Flute"
  } \relative {
    f''2 g4 f
}
  \new Staff \with {
    instrumentName = \markup {
      \center-column { "Clarinet"
        \line { "in B" \smaller \flat }
      }
    }
  } \relative { c''4 b c2 }
>>
@end lilypond

@funindex indent
@funindex short-indent

However, if the instrument names are longer, the instrument names in a
staff group may not be centered unless the @code{indent} and
@code{short-indent} settings are increased.  For details about these
settings, see @ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents}.

@lilypond[verbatim,quote,ragged-right]
<<
  \new Staff \with {
    instrumentName = "Alto Flute in G"
    shortInstrumentName = "Flt."
  } \relative {
    f''2 g4 f \break
    g4 f g2
  }
  \new Staff \with {
    instrumentName = "Clarinet"
    shortInstrumentName = "Clar."
  } \relative {
    c''4 b c2 \break
    c2 b4 c
  }
>>

\layout {
  indent = 3.0\cm
  short-indent = 1.5\cm
}
@end lilypond

@cindex instrument name, adding to other contexts

To add instrument names to other contexts (such as @code{ChordNames} or
@code{FiguredBass}), @code{Instrument_name_engraver} must be added to
that context.  For details, see @ref{Modifying context plug-ins}.

@cindex instrument name, changing
@cindex changing instrument name

The @code{shortInstrumentName} may be changed in the middle of a piece,
along with other settings as needed for the new instrument.
However, only the first instance of @code{instrumentName} will be
printed and subsequent changes will be ignored:

@lilypond[verbatim,quote,ragged-right]
prepPiccolo = <>^\markup \italic { muta in Piccolo }

prepFlute = <>^\markup \italic { muta in Flauto }

setPiccolo = {
  <>^\markup \bold { Piccolo }
  \transposition c''
}

setFlute = {
  <>^\markup \bold { Flute }
  \transposition c'
}

\new Staff \with {
  instrumentName = "Flute"
  shortInstrumentName = "Flt."
}
\relative {
  g'1 g g g \break
  g1 g \prepPiccolo R R \break
  \set Staff.instrumentName = "Piccolo"
  \set Staff.shortInstrumentName = "Picc."
  \setPiccolo
  g1 g g g \break
  g1 g \prepFlute R R \break
  \set Staff.instrumentName = "Flute"
  \set Staff.shortInstrumentName = "Flt."
  \setFlute
  g1 g g g
}
@end lilypond


@seealso
Notation Reference:
@ref{paper variables for shifts and indents,,@code{@bs{}paper} variables for shifts and indents},
@ref{Modifying context plug-ins}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{InstrumentName},
@rinternals{PianoStaff},
@rinternals{Staff}.


@node Quoting other voices
@unnumberedsubsubsec Quoting other voices

@cindex quote, voices
@cindex voice, quoting
@cindex fragment, quoting
@cindex cue note

@funindex \addQuote
@funindex \quoteDuring
@funindex \transposition

It is very common for one voice to use the same notes as those from
another voice.  For example, first and second violins playing the same
phrase during a particular passage of the music.  This is done by
letting one voice @emph{quote} the other, without having to re-enter the
music all over again for the second voice.

The @code{\addQuote} command, used in the top level scope, defines a
stream of music from which fragments can be quoted.

The @code{\quoteDuring} command is used to indicate the point where the
quotation begins.  It is followed by two arguments: the name of the
quoted voice, as defined with @code{\addQuote}, and a music expression
for the duration of the quote.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  a'4 gis g gis | b4^"quoted" r8 ais\p a4( f)
}

oboeNotes = \relative {
  c''4 cis c b \quoteDuring "flute" { s1 }
}

\addQuote "flute" { \fluteNotes }

\score {
  <<
    \new Staff \with { instrumentName = "Flute" } \fluteNotes
    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
  >>
}
@end lilypond

If the music expression used in @code{\quoteDuring} contains notes
instead of spacer or multimeasure rests then the quote will appear as
polyphony and may produce unexpected results.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  a'4 gis g gis | b4^"quoted" r8 ais\p a4( f)
}

oboeNotes = \relative {
  c''4 cis c b \quoteDuring "flute" { e4 r8 ais b4 a }
}

\addQuote "flute" { \fluteNotes }

\score {
  <<
    \new Staff \with { instrumentName = "Flute" } \fluteNotes
    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
  >>
}
@end lilypond

If an @code{\unfoldRepeats} command in a music expression is required to
be printed when using @code{\quoteDuring}, then it too must also contain
its own @code{\unfoldRepeats} command;

@lilypond[verbatim,quote]
fluteNotes = \relative {
  \repeat volta 2 { a'4 gis g gis }
}

oboeNotesDW = \relative {
  \repeat volta 2 \quoteDuring "incorrect" { s1 }
}

oboeNotesW = \relative {
  \repeat volta 2 \quoteDuring "correct" { s1 }
}


\addQuote "incorrect" { \fluteNotes }

\addQuote "correct" { \unfoldRepeats \fluteNotes }

\score {
  \unfoldRepeats
  <<
    \new Staff \with { instrumentName = "Flute" }
    \fluteNotes
    \new Staff \with { instrumentName = "Oboe (incorrect)" }
    \oboeNotesDW
    \new Staff \with { instrumentName = "Oboe (correct)" }
    \oboeNotesW
  >>
}
@end lilypond

The @code{\quoteDuring} command uses the @code{\transposition} settings
of both quoted and quoting parts to produce notes for the quoting part
that have the same sounding pitch as those in the quoted part.

@lilypond[verbatim,quote]
clarinetNotes = \relative c'' {
  \transposition bes
  \key d \major
  b4 ais a ais | cis4^"quoted" r8 bis\p b4( f)
}

oboeNotes = \relative {
  c''4 cis c b \quoteDuring "clarinet" { s1 }
}

\addQuote "clarinet" { \clarinetNotes }


\score {
  <<
    \new Staff \with { instrumentName = "Clarinet" } \clarinetNotes
    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
  >>
}
@end lilypond

@funindex note-event
@funindex articulation-event
@funindex dynamic-event
@funindex rest-event
@funindex slur-event
@funindex crescendo-event

@funindex quotedEventTypes
@funindex quotedCueEventTypes

By default quoted music will include all articulations, dynamics,
markups, etc., in the quoted expression.  It is possible to choose which
of these objects from the quoted music are displayed by using the
@code{quotedEventTypes} context property.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  a'2 g2 |
  b4\<^"quoted" r8 ais a4\f( c->)
 }

oboeNotes = \relative {
  c''2. b4 |
  \quoteDuring "flute" { s1 }
}

\addQuote "flute" { \fluteNotes }

\score {
  <<
    \set Score.quotedEventTypes = #'(note-event articulation-event
                                     crescendo-event rest-event
                                     slur-event dynamic-event)
    \new Staff \with { instrumentName = "Flute" } \fluteNotes
    \new Staff \with { instrumentName = "Oboe" } \oboeNotes
  >>
 }
@end lilypond

Quotes can also be tagged, see @ref{Using tags}.

@seealso
Notation Reference:
@ref{Instrument transpositions},
@ref{Using tags}.

Installed Files:
@file{scm/define-event-classes.scm}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{Music classes},
@rinternals{QuoteMusic},
@rinternals{Voice}.

@knownissues
Only the contents of the first @code{Voice} occurring in an
@code{\addQuote} command will be considered for quotation, so if the music
expression contains @code{\new} or @code{\context Voice}
statements, their contents will not be quoted.  Quoting grace notes
is unsupported and may cause LilyPond to crash whereas quoting nested
triplets may result in poor notation.


@node Formatting cue notes
@unnumberedsubsubsec Formatting cue notes

@cindex cue note
@cindex fragment
@cindex cue note, formatting
@cindex formatting, cue notes
@cindex voice, quoting


@funindex \cueDuring
@funindex \cueClef
@funindex \cueClefUnset
@funindex \cueDuringWithClef
@funindex \quoteDuring

@cindex note, smaller
@cindex smaller note
@funindex CueVoice

The simplest way to format cue notes is to explicitly create a
@code{CueVoice} context within the part.

@lilypond[verbatim]
\relative {
  R1
  <<
    { e'2\rest r4. e8 }
    \new CueVoice {
      \stemUp d'8^"flute" c d e fis2
    }
  >>
  d,4 r a r
}
@end lilypond

The @code{\cueClef} command can also be used with an explict
@code{CueVoice} context if a change of clef is required and will print
an appropriately sized clef for the cue notes.  The @code{\cueClefUnset}
command can then be used to switch back to the original clef, again with
an appropriately sized clef.

@lilypond[verbatim,noragged-right]
\relative {
  \clef "bass"
  R1
  <<
    { e'2\rest r4. \cueClefUnset e,8 }
    \new CueVoice {
      \cueClef "treble" \stemUp d''8^"flute" c d e fis2
    }
  >>
  d,,4 r a r
}
@end lilypond

The @code{\cueClef} and @code{\cueClefUnset} command can also be used
without a @code{CueVoice} if required.

@lilypond[verbatim,noragged-right]
\relative {
  \clef "bass"
  R1
  \cueClef "treble"
  d''8^"flute" c d e fis2
  \cueClefUnset
  d,,4 r a r
}
@end lilypond

For more complex cue note placement, e.g including transposition, or
inserting cue notes from multiple music sources the @code{\cueDuring} or
@code{\cueDuringWithClef} commands can be used.  These are more
specialized form of @code{\quoteDuring}, see @ref{Quoting other voices}
in the previous section.

The syntax is:

@example
\cueDuring @var{quotename} #@var{direction} @var{music}
@end example

and

@example
\cueDuringWithClef @var{quotename} #@var{direction} #@var{clef} @var{music}
@end example

The music from the corresponding measures of the @code{@var{quote name}}
is added as a @code{CueVoice} context and occurs simultaneously with the
@code{@var{music}}, which then creates a polyphonic situation.  The
@code{@var{direction}} takes the argument @code{UP} or @code{DOWN}, and
corresponds to the first and second voices respectively, determining how
the cue notes are printed in relation to the other voice.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  r2. c''4 | d8 c d e fis2 | g2 d |
}

oboeNotes = \relative c'' {
  R1
  <>^\markup \tiny { flute }
  \cueDuring "flute" #UP { R1 }
  g2 c,
}

\addQuote "flute" { \fluteNotes }

\new Staff {
  \oboeNotes
}
@end lilypond

@noindent


It is possible to adjust which aspects of the music are quoted with
@code{\cueDuring} by setting the @code{quotedCueEventTypes}
property.  Its default value is @code{'(note-event rest-event
tie-event beam-event tuplet-span-event)}, which means that only
notes, rests, ties, beams and tuplets are quoted, but not
articulations, dynamic marks, markup, etc.

@warning{When a @code{Voice} starts with @code{\cueDuring}, as in the
following example, the @code{Voice} context must be explicitly declared,
or else the entire music expression would belong to the @code{CueVoice}
context.}

@lilypond[verbatim,quote]
oboeNotes = \relative {
  r2 r8 d''16(\f f e g f a)
  g8 g16 g g2.
}
\addQuote "oboe" { \oboeNotes }

\new Voice \relative c'' {
  \set Score.quotedCueEventTypes = #'(note-event rest-event tie-event
                                      beam-event tuplet-span-event
                                      dynamic-event slur-event)
  \cueDuring "oboe" #UP { R1 }
  g2 c,
}
@end lilypond

Markup can be used to show the name of the quoted instrument.
If the cue notes require a change in clef,
this can be done manually but the original clef should also be
restored manually at the end of the cue notes.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  r2. c''4 d8 c d e fis2 g2 d2
}

bassoonNotes = \relative c {
  \clef bass
  R1
  \clef treble
  <>^\markup \tiny { flute }
  \cueDuring "flute" #UP { R1 }
  \clef bass
  g4. b8 d2
}

\addQuote "flute" { \fluteNotes }

\new Staff {
  \bassoonNotes
}
@end lilypond

Alternatively, the @code{\cueDuringWithClef} function can be used
instead.  This command takes an extra argument to specify the change of
clef that needs to be printed for the cue notes but will automatically
print the original clef once the cue notes have finished.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  r2. c''4 d8 c d e fis2 g2 d2
}

bassoonNotes = \relative c {
  \clef bass
  R1
  <>^\markup { \tiny "flute" }
  \cueDuringWithClef "flute" #UP "treble" { R1 }
  g4. b8 d2
}

\addQuote "flute" { \fluteNotes }

\new Staff {
  \bassoonNotes
}
@end lilypond

@funindex \transposedCueDuring

Like @code{\quoteDuring}, @code{\cueDuring} takes instrument
transpositions into account.  Cue notes are produced at the
pitches that would be written for the instrument receiving the cue
to produce the sounding pitches of the source instrument.

To transpose cue notes differently, use
@code{\transposedCueDuring}.  This command takes an extra argument
to specify (in absolute mode) the printed pitch that you want to
represent the sound of a concert middle C.  This is useful for
taking cues from an instrument in a completely different register.

@lilypond[verbatim,quote]
piccoloNotes = \relative {
  \clef "treble^8"
  R1
  c'''8 c c e g2
  c4 g g2
}

bassClarinetNotes = \relative c' {
  \key d \major
  \transposition bes,
  d4 r a r
  \transposedCueDuring "piccolo" #UP d { R1 }
  d4 r a r
}

\addQuote "piccolo" { \piccoloNotes }

<<
  \new Staff \piccoloNotes
  \new Staff \bassClarinetNotes
>>
@end lilypond

@cindex removing cue notes
@cindex cue note, removing

@funindex \killCues

The @code{\killCues} command removes cue notes from a music
expression, so the same music expression can be used to produce
the instrument part with cues and the score.  The @code{\killCues}
command removes only the notes and events that were quoted by
@code{\cueDuring}.  Other markup associated with cues, such as clef
changes and a label identifying the source instrument, can be
tagged for selective inclusion in the score; see @ref{Using tags}.

@lilypond[verbatim,quote]
fluteNotes = \relative {
  r2. c''4 d8 c d e fis2 g2 d2
}

bassoonNotes = \relative c {
  \clef bass
  R1
  \tag #'part {
    \clef treble
    <>^\markup \tiny { flute }
  }
  \cueDuring "flute" #UP { R1 }
  \tag #'part \clef bass
  g4. b8 d2
}

\addQuote "flute" { \fluteNotes }

\new Staff {
  \bassoonNotes
}

\new StaffGroup <<
  \new Staff {
    \fluteNotes
  }
  \new Staff {
    \removeWithTag #'part { \killCues { \bassoonNotes } }
  }
>>
@end lilypond

@seealso
Notation Reference:
@ref{Quoting other voices},
@ref{Instrument transpositions},
@ref{Instrument names},
@ref{Clef},
@ref{Musical cues},
@ref{Using tags}.

Snippets:
@rlsr{Staff notation}.

Internals Reference:
@rinternals{CueVoice},
@rinternals{Voice}.

@knownissues
Collisions can occur with rests, when using @code{\cueDuring},
between @code{Voice} and @code{CueVoice} contexts.  When using
@code{\cueDuringWithClef} or @code{\transposedCueDuring} the extra
argument required for each case must come after the quote and the
direction.
