LilyPond Notation Reference: 1.6.3 Writing parts

### 1.6.3 Writing parts

This section explains how to prepare parts for orchestral or ensemble music, which often requires to insert instrument names into the score. Methods to quote other voices and to format cue notes are also described, as well as a way to contract multiple consecutive empty measures in individual parts.

Aditionally, a method for printing divisi staves, sometimes used in individual or desk parts, can be found in Hiding staves.

#### Instrument names

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

>     \new Staff \with {
>       instrumentName = "Violin "
>       shortInstrumentName = "Vln. "
>     } \relative {
>       c'4.. g'16 c4.. g'16 \break | c1 |
>     }

`\markup` can be used to create more complex instrument names:

>     \new Staff \with {
>       instrumentName = \markup {
>         \column { "Clarinetti"
>           \line { "in B" \smaller \flat }
>         }
>       }
>     } \relative {
>       c''4 c,16 d e f g2
>     }

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, `\center-column` must be used:

>     <<
>       \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 }
>     >>

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

>     <<
>       \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
>     }

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

The `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 `instrumentName` will be printed and subsequent changes will be ignored:

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

#### See also

Notation Reference: `\paper` variables for shifts and indents, Modifying context plug-ins.

Snippets: Staff notation.

Internals Reference: InstrumentName, PianoStaff, Staff.

#### Quoting other voices

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 quote the other, without having to re-enter the music all over again for the second voice.

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

The `\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 `\addQuote`, and a music expression for the duration of the 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
>       >>
>     }

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

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

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

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

The `\quoteDuring` command uses the `\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.

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

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 `quotedEventTypes` context property.

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

Quotes can also be tagged, see Using tags.

#### See also

Notation Reference: Instrument transpositions, Using tags.

Installed Files: ‘`scm/define-event-classes.scm`’.

Snippets: Staff notation.

Internals Reference: Music classes, QuoteMusic, Voice.

#### Known issues and warnings

Only the contents of the first `Voice` occurring in an `\addQuote` command will be considered for quotation, so if the music expression contains `\new` or `\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.

#### Formatting cue notes

The simplest way to format cue notes is to explicitly create a `CueVoice` context within the part.

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

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

    \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
    }

The `\cueClef` and `\cueClefUnset` command can also be used without a `CueVoice` if required.

    \relative {
      \clef "bass"
      R1
      \cueClef "treble"
      d''8^"flute" c d e fis2
      \cueClefUnset
      d,,4 r a r
    }

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

The syntax is:

>     \cueDuring quotename #direction music

and

>     \cueDuringWithClef quotename #direction #clef music

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

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

It is possible to adjust which aspects of the music are quoted with `\cueDuring` by setting the `quotedCueEventTypes` property. Its default value is `'(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.

Note: When a `Voice` starts with `cueDuring`, as in the following example, the `Voice` context must be explicitly declared, or else the entire music expression would belong to the `CueVoice` context.

>     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,
>     }

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.

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

Alternatively, the `\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.

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

Like `\quoteDuring`, `\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 `\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.

>     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
>     >>

The `\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 `\killCues` command removes only the notes and events that were quoted by `\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 Using tags.

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

#### See also

Notation Reference: Quoting other voices, Instrument transpositions, Instrument names, Clef, Musical cues, Using tags.

Snippets: Staff notation.

Internals Reference: CueVoice, Voice.

#### Known issues and warnings

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

#### Compressing empty measures

By default, all measures are printed even if they are empty – which can happen if a rhythmic event (such as notes, rests or invisible rests) is so long as to span several measures. This behaviour can be changed by contracting all empty measures into a single one, as illustrated here (the second part of this example, with expanded measures, actually reverts back to the default behavior):

>     \override Score.BarNumber.break-visibility = ##(#f #t #t)
>     \time 2/4
>     \compressEmptyMeasures
>     c'1 d'1. e'\breve
>     \bar "||"
>     \expandEmptyMeasures
>     c'1 d'1. e'\breve

Although that notation is syntactically correct, it may be confusing from a musical point of view, as illustrated in the previous example; hence the need for measure numbers to be explicitly printed, using the syntax described in Using break-visibility.

Where such a notation may become more useful is when applied to Full measure rests. A multi-measure rest will then be shown as a single measure containing a multi-measure rest symbol, with the number of measures of rest printed above the measure:

>     % Default behavior
>     \time 3/4 r2. | R2.*2 |
>     \time 2/4 R2 |
>     \time 4/4
>     % Rest measures contracted to single measure
>     \compressEmptyMeasures
>     r1 | R1*17 | R1*4 |
>     \expandEmptyMeasures
>     % Rest measures expanded again
>     \time 3/4
>     R2.*2 |

Unlike `\compressEmptyMeasures`, the music function `\compressMMRests` will only apply to rests, leaving any other events uncompressed. As a function rather than a property setting, its syntax differs slightly in that it must be followed by a music expression:

>     \compressMMRests {
>       % Rests are compressed…
>       R1*7
>       % … but notes can still span multiple measures.
>       g'1 a'1*2 d'1
>       R1*2
>     }

All of the commands described in this section actually rely on the `skipBars` internal property, which is set in the `Score` context as explained in The `\set` command.

#### Predefined commands

`\compressEmptyMeasures`, `\expandEmptyMeasures`, `\compressMMRests`.

#### Selected Snippets

Numbering single measure rests

Multi measure rests show their length by a number except for single measures. This can be changed by setting `restNumberThreshold`.

>     {
>       \compressEmptyMeasures
>       R1 R1*10 R1*11 \bar "||"
>       \set restNumberThreshold = 0
>       R1 R1*10 R1*11 \bar "||"
>       \set restNumberThreshold = 10
>       R1 R1*10 R1*11
>     }

Changing form of multi-measure rests

If there are ten or fewer measures of rests, a series of longa and breve rests (called in German “Kirchenpausen” - church rests) is printed within the staff; otherwise a simple line is shown. This default number of ten may be changed by overriding the `expand-limit` property.

>     \relative c'' {
>       \compressMMRests {
>         R1*2 | R1*5 | R1*9
>         \override MultiMeasureRest.expand-limit = #3
>         R1*2 | R1*5 | R1*9
>       }
>     }

#### See also

Notation Reference: Using break-visibility, Full measure rests, The `\set` command.

Internals Reference: MultiMeasureRest, MultiMeasureRestNumber, MultiMeasureRestScript, MultiMeasureRestText.

#### LilyPond — Notation Reference v2.22.2 (stable-branch).