LilyPond snippets: Staff notation

# Staff notation

Staff notation

## Un ambitus par voix

L’`ambitus` peut être individualisé par voix. Il faut en pareil cas éviter qu’ils se chevauchent.

    \new Staff <<
      \new Voice \with {
        \consists "Ambitus_engraver"
      } \relative c'' {
        \override Ambitus.X-offset = #2.0
        \voiceOne
        c4 a d e
        f1
      }
      \new Voice \with {
        \consists "Ambitus_engraver"
      } \relative c' {
        \voiceTwo
        es4 f g as
        b1
      }
    >>

## Ajout d’une portée supplémentaire après un saut de ligne

Lorsqu’une nouvelle portée vient s’ajouter après un saut de ligne, LilyPond préserve un espace juste avant le saut de ligne – pour un éventuel changement d’armure qui, quoi qu’il en soit, ne sera pas imprimé. L’astuce consiste alors, comme indiqué dans l’exemple suivant, à ajuster `Staff.explicitKeySignatureVisibility`.

    \score {
      \new StaffGroup \relative c'' {
        \new Staff
        \key f \major
        c1 c^"Unwanted extra space" \break
        << { c1 | c }
           \new Staff {
             \key f \major
             \once \omit Staff.TimeSignature
             c1 | c
           }
        >>
        c1 | c^"Fixed here" \break
        << { c1 | c }
           \new Staff {
             \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible
             \key f \major
             \once \omit Staff.TimeSignature
             c1 | c
           }
        >>
      }
    }

## Ajout d’une portée supplémentaire

Vous pouvez ajouter une nouvelle portée, éventuellement de manière temporaire, après le début d’un morceau.

    \score {
      <<
        \new Staff \relative c'' {
          c1 | c | c | c | c
        }
        \new StaffGroup \relative c'' {
          \new Staff {
            c1 | c
            <<
              {
                c1 | d
              }
              \new Staff {
                \once \omit Staff.TimeSignature
                c1 | b
              }
            >>
            c1
          }
        }
      >>
    }

## Ajout d’indicateurs à une portée dédoublée après un saut de ligne

Dans cet extrait sont définies les commandes `\splitStaffBarLine`, `convUpStaffBarLine` et `convDownStaffBarLine`. Ces commandes ajoutent une double flèche après la dernière barre de mesure d’une portée, indiquant par là que ses différentes voix disposeront de leur propre portée à la ligne suivante.

    #(define-markup-command (arrow-at-angle layout props angle-deg length fill)
       (number? number? boolean?)
       (let* (
               (PI-OVER-180 (/ (atan 1 1) 34))
               (degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
               (angle-rad (degrees->radians angle-deg))
               (target-x (* length (cos angle-rad)))
               (target-y (* length (sin angle-rad))))
         (interpret-markup layout props
           (markup
            #:translate (cons (/ target-x 2) (/ target-y 2))
            #:rotate angle-deg
            #:translate (cons (/ length -2) 0)
            #:concat (#:draw-line (cons length 0)
                       #:arrow-head X RIGHT fill)))))

    splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
      \combine
      \arrow-at-angle #45 #(sqrt 8) ##t
      \arrow-at-angle #-45 #(sqrt 8) ##t
    }

    splitStaffBarLine = {
      \once \override Staff.BarLine.stencil =
      #(lambda (grob)
         (ly:stencil-combine-at-edge
          (ly:bar-line::print grob)
          X RIGHT
          (grob-interpret-markup grob splitStaffBarLineMarkup)
          0))
      \break
    }

    convDownStaffBarLine = {
      \once \override Staff.BarLine.stencil =
      #(lambda (grob)
         (ly:stencil-combine-at-edge
          (ly:bar-line::print grob)
          X RIGHT
          (grob-interpret-markup grob #{
            \markup\with-dimensions #'(0 . 0) #'(0 . 0) {
              \translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t
            }#})
          0))
      \break
    }

    convUpStaffBarLine = {
      \once \override Staff.BarLine.stencil =
      #(lambda (grob)
         (ly:stencil-combine-at-edge
          (ly:bar-line::print grob)
          X RIGHT
          (grob-interpret-markup grob #{
            \markup\with-dimensions #'(0 . 0) #'(0 . 0) {
              \translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t
            }#})
          0))
      \break
    }

    \paper {
      ragged-right = ##t
      short-indent = 10\mm
    }

    separateSopranos = {
      \set Staff.instrumentName = "AI AII"
      \set Staff.shortInstrumentName = "AI AII"
      \splitStaffBarLine
      \change Staff = "up"
    }
    convSopranos = {
      \convDownStaffBarLine
      \change Staff = "shared"
      \set Staff.instrumentName = "S A"
      \set Staff.shortInstrumentName = "S A"
    }

    sI = {
      \voiceOne
      \repeat unfold 4 f''2
      \separateSopranos
      \repeat unfold 4 g''2
      \convSopranos
      \repeat unfold 4 c''2
    }
    sII = {
      s1*2
      \voiceTwo
      \change Staff = "up"
      \repeat unfold 4 d''2
    }
    aI = {
      \voiceTwo
      \repeat unfold 4 a'2
      \voiceOne
      \repeat unfold 4 b'2
      \convUpStaffBarLine
      \voiceTwo
      \repeat unfold 4 g'2
    }
    aII = {
      s1*2
      \voiceTwo
      \repeat unfold 4 g'2
    }
    ten = {
      \voiceOne
      \repeat unfold 4 c'2
      \repeat unfold 4 d'2
      \repeat unfold 4 c'2
    }
    bas = {
      \voiceTwo
      \repeat unfold 4 f2
      \repeat unfold 4 g2
      \repeat unfold 4 c2
    }

    \score {
      <<
        \new ChoirStaff <<
          \new Staff = up \with {
            instrumentName = "SI SII"
            shortInstrumentName = "SI SII"
          } {
            s1*4
          }

          \new Staff = shared \with {
            instrumentName = "S A"
            shortInstrumentName = "S A"
          } <<
            \new Voice = sopI \sI
            \new Voice = sopII \sII
            \new Voice = altI \aI
            \new Voice = altII \aII
          >>
          \new Lyrics \with {
            alignBelowContext = up
          }
          \lyricsto sopII { e f g h }
          \new Lyrics \lyricsto altI { a b c d e f g h i j k l }

          \new Staff = men \with {
            instrumentName = "T B"
            shortInstrumentName = "T B"
          } <<
            \clef F
            \new Voice = ten \ten
            \new Voice = bas \bas
          >>
          \new Lyrics \lyricsto bas { a b c d e f g h i j k l }
        >>
      >>
      \layout {
        \context {
          \Staff \RemoveEmptyStaves
          \override VerticalAxisGroup.remove-first = ##t
        }
      }
    }

## Indication de l’instrument cité dans l’accompagnement d’une partition pour chœur

Lorsque le nombre d’instruments cités dans la réduction pour piano se multiplie, vous pourriez avoir intérêt à créer votre propre fonction pour gérer ces repères. La fonction musicale `\cueWhile` prend quatre arguments : la musique d’où provient la citation, telle que définie par `\addQuote`, le nom qui sera mentionné en regard de cette citation, son positionnement – `UP` ou `DOWN` selon qu’il sera attribué à `\voiceOne` et placé au-dessus ou `\voiceTwo` et placé en dessous – et enfin la musique du piano qui interviendra en parallèle. Le nom de l’instrument en question viendra s’aligner sur la gauche de la citation. Bien que vous puissiez effectuer plusieurs citations, elle ne peuvent être simultanées.

    cueWhile =
    #(define-music-function
       (instrument name dir music)
       (string? string? ly:dir? ly:music?)
       #{
         \cueDuring $instrument #dir {
           \once \override TextScript.self-alignment-X = #RIGHT
           \once \override TextScript.direction = $dir
           <>-\markup { \tiny #name }
           $music
         }
       #})

    flute = \relative c'' {
      \transposition c'
      s4 s4 e g
    }
    \addQuote "flute" { \flute }

    clarinet = \relative c' {
      \transposition bes
      fis4 d d c
    }
    \addQuote "clarinet" { \clarinet }

    singer = \relative c'' { c4. g8 g4 bes4 }
    words = \lyricmode { here's the lyr -- ics }

    pianoRH = \relative c'' {
      \transposition c'
      \cueWhile "clarinet" "Clar." #DOWN { c4. g8 }
      \cueWhile "flute" "Flute" #UP { g4 bes4 }
    }
    pianoLH = \relative c { c4 <c' e> e, <g c> }

    \score {
      <<
        \new Staff {
          \new Voice = "singer" {
            \singer
          }
        }
        \new Lyrics {
          \lyricsto "singer"
          \words
        }
        \new PianoStaff <<
          \new Staff {
            \new Voice {
              \pianoRH
            }
          }
          \new Staff {
            \clef "bass"
            \pianoLH
          }
        >>
      >>
    }

## Ajout de marques temporelles à un long glissando

Lorsqu’un glissando s’étend dans la durée, on trouve parfois des indications temporelles, matérialisées par des hampes sans tête de note. De telles hampes permettent aussi d’indiquer des éléments intermédiaires.

L’alignement des hampes avec la ligne de glissando peut requérir quelques aménagements.

    glissandoSkipOn = {
      \override NoteColumn.glissando-skip = ##t
      \hide NoteHead
      \override NoteHead.no-ledgers = ##t
    }

    glissandoSkipOff = {
      \revert NoteColumn.glissando-skip
      \undo \hide NoteHead
      \revert NoteHead.no-ledgers
    }

    \relative c'' {
      r8 f8\glissando
      \glissandoSkipOn
      f4 g a a8\noBeam
      \glissandoSkipOff
      a8

      r8 f8\glissando
      \glissandoSkipOn
      g4 a8
      \glissandoSkipOff
      a8 |

      r4 f\glissando \<
      \glissandoSkipOn
      a4\f \>
      \glissandoSkipOff
      b8\! r |
    }

## Numérotation des mesures et alternatives

Deux méthodes alternatives vous permettent de gérer la numérotation des mesures en cas de reprises.

    \relative c'{
      \set Score.alternativeNumberingStyle = #'numbers
      \repeat volta 3 { c4 d e f | }
        \alternative {
          { c4 d e f | c2 d \break }
          { f4 g a b | f4 g a b | f2 a | \break }
          { c4 d e f | c2 d }
        }
      c1 \break
      \set Score.alternativeNumberingStyle = #'numbers-with-letters
      \repeat volta 3 { c,4 d e f | }
        \alternative {
          { c4 d e f | c2 d \break }
          { f4 g a b | f4 g a b | f2 a | \break }
          { c4 d e f | c2 d }
        }
      c1
    }

## Ambitus après l’armure

L’ambitus se place par défaut à gauche de la clef. La fonction `\ambitusAfter` permet cependant de modifier ce positionnement ; sa syntaxe est `\ambitusAfter grob-interface` – voir Graphical Object Interfaces pour une liste des valeurs de `grob-interface` possibles. L’un des cas d’usage est d’insérer l’ambitus entre l’armure et la métrique.

    \new Staff \with {
      \consists Ambitus_engraver
    } \relative {
      \ambitusAfter key-signature
      \key d \major
      es'8 g bes cis d2
    }

## Numéros de mesure centrés

Les partitions pour grands ensembles disposent souvent de la numérotation des mesures centrée en dessous du système. L’extrait ci-dessous indique comment le `Measure_counter_engraver` permet de répondre à cette pratique. Le graveur est ici ajouté à un contexte `Dynamics`.

    \layout {
      \context {
        \Dynamics
        \consists #Measure_counter_engraver
        \override MeasureCounter.direction = #DOWN
        \override MeasureCounter.font-encoding = #'latin1
        \override MeasureCounter.font-shape = #'italic
        % to control the distance of the Dynamics context from the staff:
        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
      }
      \context {
        \Score
        \remove "Bar_number_engraver"
      }
    }

    pattern = \repeat unfold 7 { c'4 d' e' f' }

    \new StaffGroup <<
      \new Staff {
        \pattern
      }
      \new Staff {
        \pattern
      }
      \new Dynamics {
        \startMeasureCount
        s1*7
        \stopMeasureCount
      }
    >>

## Modification des barres de mesure par défaut

Les barres de mesure par défaut peuvent se modifier grâce à leur redéfinition au sein d’un contexte `Score`.

    % http://lsr.di.unimi.it/LSR/Item?id=964
    %%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html
    %%=> http://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html

    \layout {
      \context {
        \Score
        %% Changing the defaults from engraver-init.ly
        defaultBarType = #"!"
        startRepeatType = #"[|:"
        endRepeatType = #":|]"
        doubleRepeatType = #":|][|:"
      }
    }

    %% example:
    {
      c'1
      \repeat volta 2 { \repeat unfold 2 c' }
      \repeat volta 2 { \repeat unfold 2 c' }
      \alternative {
        { c' }
        {
          %% v2.18 workaround
          \once\override Score.VoltaBracket.shorten-pair = #'(1 . -1)
          c'
        }
      }
      \bar "|."
    }

## Modification du nombre de lignes de la portée

Le nombre de lignes d’une portée se modifie par adaptation de la propriété `line-count` du `StaffSymbol`.

    upper = \relative c'' {
      c4 d e f
    }

    lower = \relative c {
      \clef bass
      c4 b a g
    }

    \score {
      \context PianoStaff <<
        \new Staff {
          \upper
        }
        \new Staff {
          \override Staff.StaffSymbol.line-count = #4
          \lower
        }
      >>
    }

## Modification de la taille d’une portée

Bien que le meilleur moyen de définir la taille des portées consiste à utiliser `#(set-global-staff-size xx)`, une portée en particulier peut se redimensionner en affectant d’un coefficient ses propriétés `staff-space` et `fontSize`.

    <<
      \new Staff {
        \relative c'' {
          \dynamicDown
          c8\ff c c c c c c c
        }
      }
      \new Staff \with {
        fontSize = #-3
        \override StaffSymbol.staff-space = #(magstep -3)
      } {
        \clef bass
        c8 c c c c\f c c c
      }
    >>

## Impression de papier à musique

Rien n’est plus simple, pour obtenir une feuille blanche avec des portées, que de générer des mesures vides, de supprimer le `Bar_number_engraver` du contexte `Score`, et les `Time_signature_engraver`, `Clef_engraver` et `Bar_engraver` du contexte `Staff`.

    #(set-global-staff-size 20)

    \score {
      {
        \repeat unfold 12 { s1 \break }
      }
      \layout {
        indent = 0\in
        \context {
          \Staff
          \remove "Time_signature_engraver"
          \remove "Clef_engraver"
          \remove "Bar_engraver"
        }
        \context {
          \Score
          \remove "Bar_number_engraver"
        }
      }
    }

    % uncomment these lines for "letter" size
    %{
    \paper {
      #(set-paper-size "letter")
      ragged-last-bottom = ##f
      line-width = 7.5\in
      left-margin = 0.5\in
      bottom-margin = 0.25\in
      top-margin = 0.25\in
    }
    %}

    % uncomment these lines for "A4" size
    %{
    \paper {
      #(set-paper-size "a4")
      ragged-last-bottom = ##f
      line-width = 180
      left-margin = 15
      bottom-margin = 10
      top-margin = 10
    }
    %}

## Création d’armures personnalisées

LilyPond accepte les armures personnalisées. Dans cet exemple, il s’agit d’une tonalité de ré mineur à laquelle on rajoute des bémols.

    \new Staff \with {
      \override StaffSymbol.line-count = #8
      \override KeySignature.flat-positions = #'((-7 . 6))
      \override KeyCancellation.flat-positions = #'((-7 . 6))
      % presumably sharps are also printed in both octaves
      \override KeySignature.sharp-positions = #'((-6 . 7))
      \override KeyCancellation.sharp-positions = #'((-6 . 7))

      \override Clef.stencil = #
      (lambda (grob)(grob-interpret-markup grob
      #{ \markup\combine
        \musicglyph "clefs.C"
        \translate #'(-3 . -2)
        \musicglyph "clefs.F"
       #}))
        clefPosition = #3
        middleCPosition = #3
        middleCClefPosition = #3
    }

    {
      \key d\minor
      f bes, f bes,
    }

## Création de doigtés sur deux caractères

Il est tout à fait possible de noter un doigté supérieur à 5.

    \relative c' {
      c1-10
      c1-50
      c1-36
      c1-29
    }

## Hampes interportées

L’exemple ci-dessous illustre l’utilisation du `Span_stem_engraver` et de la commande `\crossStaff` afin de connecter des hampes entre les portées.

Nul n’est besoin de spécifier la taille des hampes ; le graveur calcule automatiquement la distance relative des têtes de note avec les portées.

    \layout {
      \context {
        \PianoStaff
        \consists #Span_stem_engraver
      }
    }

    {
      \new PianoStaff <<
        \new Staff {
          <b d'>4 r d'16\> e'8. g8 r\!
          e'8 f' g'4 e'2
        }
        \new Staff {
          \clef bass
          \voiceOne
          \autoBeamOff
          \crossStaff { <e g>4 e, g16 a8. c8} d
          \autoBeamOn
          g8 f g4 c2
        }
      >>
    }

## Indicateur de regroupement et portée unique

Lorsque, dans des regroupements de type `ChoirStaff` ou `StaffGroup`, une seule portée est active, aucune indication n’est donnée en début de ligne. Affecter à la propriété `collapse-height` un nombre de lignes inférieur à celui de la portée permet de modifier ce comportement par défaut.

Notez bien que dans le cas des `PianoStaff` et `GrandStaff`, pour lesquels le délimiteur de système est une accolade et non un crochet, il ne s’agit pas de la même propriété – voir le deuxième système de l’exemple.

    \score {
      \new StaffGroup <<
        % Must be lower than the actual number of staff lines
        \override StaffGroup.SystemStartBracket.collapse-height = #4
        \override Score.SystemStartBar.collapse-height = #4
        \new Staff {
          c'1
        }
      >>
    }
    \score {
      \new PianoStaff <<
        \override PianoStaff.SystemStartBrace.collapse-height = #4
        \override Score.SystemStartBar.collapse-height = #4
        \new Staff {
          c'1
        }
      >>
    }

## Allongement d’une marque de trille (`TrillSpanner`)

La propriété `minimum-length` d’une extension de trille – objet `TrillSpanner` – n’est effective qu’après un appel explicite à la procédure `set-spacing-rods`.

Pour ce faire, la propriété `set-spacing-rods` doit être définie à `ly:spanner::set-spacing-rods`.

    \relative c' {
    \key c\minor
      \time 2/4
      c16( as') c,-. des-.
      \once\override TrillSpanner.minimum-length = #15
      \once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods
      \afterGrace es4
      \startTrillSpan { d16[( \stopTrillSpan es)] }
      c( c' g es c g' es d
      \hideNotes
      c8)
    }

## Rappel du glissando à l’occasion d’une alternative

Un glissando qui se prolonge sur plusieurs sections `\alternative` peut se rappeler à l’aide d’une note d’ornement supplémentaire et masquée, à laquelle sera attaché le départ du glissando, ce dans chaque bloc `\alternative`. Cette note d’ornement devrait avoir la même hauteur que la note où commençait le glissando originel. Ceci est géré par une fonction musicale qui prendra en argument la hauteur de la note d’ornement.

Dans le cadre d’un musique polyphonique, il ne faudra pas oublier d’ajouter une note d’ornement dans toutes les autres voix afin de préserver la synchronisation.

    repeatGliss = #(define-music-function (grace)
      (ly:pitch?)
      #{
        % the next two lines ensure the glissando is long enough
        % to be visible
        \once \override Glissando.springs-and-rods
          = #ly:spanner::set-spacing-rods
        \once \override Glissando.minimum-length = #3.5
        \once \hideNotes
        \grace $grace \glissando
      #})

    \score {
      \relative c'' {
        \repeat volta 3 { c4 d e f\glissando }
        \alternative {
          { g2 d }
          { \repeatGliss f g2 e }
          { \repeatGliss f e2 d }
        }
      }
    }

    music =  \relative c' {
      \voiceOne
      \repeat volta 2 {
        g a b c\glissando
      }
      \alternative {
        { d1 }
        { \repeatGliss c \once \omit StringNumber e1\2 }
      }
    }

    \score {
      \new StaffGroup <<
        \new Staff <<
          \new Voice { \clef "G_8" \music }
        >>
        \new TabStaff  <<
          \new TabVoice { \clef "moderntab" \music }
        >>
      >>
    }

## Liaison de prolongation aplatie

La fonction ici présentée prend en argument le `Tie.stencil` par défaut et en recalcule le résultat d’après les étendues de cette valeur par défaut.

Des ajustements plus poussés sont possibles, en apportant des dérogations à `Tie.details.height-limit` ou à l’aide de la fonction `\shape`. La définition personnalisée peut aussi se modifier à la volée.

    %% http://lsr.di.unimi.it/LSR/Item?id=1031

    #(define ((flared-tie coords) grob)

      (define (pair-to-list pair)
         (list (car pair) (cdr pair)))

      (define (normalize-coords goods x y dir)
        (map
          (lambda (coord)
            ;(coord-scale coord (cons x (* y dir)))
            (cons (* x (car coord)) (* y dir (cdr coord))))
          goods))

      (define (my-c-p-s points thick)
        (make-connected-path-stencil
          points
          thick
          1.0
          1.0
          #f
          #f))

      ;; outer let to trigger suicide
      (let ((sten (ly:tie::print grob)))
        (if (grob::is-live? grob)
            (let* ((layout (ly:grob-layout grob))
                   (line-thickness (ly:output-def-lookup layout 'line-thickness))
                   (thickness (ly:grob-property grob 'thickness 0.1))
                   (used-thick (* line-thickness thickness))
                   (dir (ly:grob-property grob 'direction))
                   (xex (ly:stencil-extent sten X))
                   (yex (ly:stencil-extent sten Y))
                   (lenx (interval-length xex))
                   (leny (interval-length yex))
                   (xtrans (car xex))
                   (ytrans (if (> dir 0)(car yex) (cdr yex)))
                   (uplist
                     (map pair-to-list
                          (normalize-coords coords lenx (* leny 2) dir))))

       (ly:stencil-translate
           (my-c-p-s uplist used-thick)
         (cons xtrans ytrans)))
       '())))

    #(define flare-tie
      (flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0))))

    \layout {
      \context {
        \Voice
        \override Tie.stencil = #flare-tie
      }
    }

    \paper { ragged-right = ##f }

    \relative c' {
      a4~a
      \override Tie.height-limit = 4
      a'4~a
      a'4~a
      <a,, c e a c e a c e>~ q

      \break

      a'4~a
      \once \override Tie.details.height-limit = 14
      a4~a

      \break

      a4~a
      \once \override Tie.details.height-limit = 0.5
      a4~a

      \break

      a4~a
      \shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie
      a4~a

      \break

      a4~a
      \once \override Tie.stencil =
        #(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0)))
      a4~a

      a4~a
      \once \override Tie.stencil =
        #(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0)))
      a4~a
    }

## Adaptation de la largeur de mesure selon le `MetronomeMark`

Par défaut, les indications métronomiques n’influencent en rien l’espacement horizontal. Une simple dérogation, comme dans la deuxième partie de cet exemple, fournit la solution.

    example = {
      \tempo "Allegro"
      R1*6
      \tempo "Rall."
      R1*2
      \tempo "A tempo"
      R1*8
    }

    {
      \compressMMRests {
        \example
        R1
        R1
        \override Score.MetronomeMark.extra-spacing-width = #'(-3 . 0)
        \example
      }
    }

## Glissando par dessus un objet graphique

Un glissando peut sauter un objet `NoteColumn`.

    \relative c' {
      a2 \glissando
      \once \override NoteColumn.glissando-skip = ##t
      f''4 d,
    }

## Impression d’un double repère sur une même barre (méthode 1)

Cette méthode permet d’imprimer deux marques-repères l’une au-dessus de l’autre. Le repère inférieur est décalé sous la portée, puis s’insère au-dessus de lui un espace pour positionner le repère supérieur en surplomb de la portée.

L’ajustement des valeurs de `extra-offset` et `baseline-skip` permet d’accroître ou réduire globalement l’espace entre le repère et la portée.

La capacité de pratiquement tout type de glyphe ou chaîne de caractères à faire l’objet d’un repère les rend capables de venir se centrer au-dessus ou en dessous d’une barre de mesure.

L’adjonction de la propriété `break-visibility`, comme dans cet autre cas, permet de placer un double repère en fin de ligne.

Cette première méthode, bien que moins compliquée que la seconde, ne permet pas d’ajuster le positionnement d’un repère indépendamment de l’autre. Elle peut aussi générer quelques problèmes quant à l’espacement vertical, puisque le recours à `extra-offset` ne modifie en rien la valeur originelle de la boîte englobant le repère.

    \relative c'{
      c d e f |
      \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
      \once \override Score.RehearsalMark.baseline-skip = #9
      \mark \markup \center-column { \circle 1 \box A }
      g f e d |
      \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
      \once \override Score.RehearsalMark.baseline-skip = #9
      \mark \markup \center-column { \flat { \bold \small \italic Fine. } }
      g f e d |
      \once \override Score.RehearsalMark.extra-offset = #'(0 . -8.5)
      \once \override Score.RehearsalMark.baseline-skip = #9
      \override Score.RehearsalMark.break-visibility = #begin-of-line-invisible
      \mark \markup \center-column { \fermata \box z }
    }

## Impression d’un double repère sur une même barre (méthode 2)

Cette méthode permet d’imprimer deux marques-repères – l’une au-dessus de la portée et l’autre en dessous – à l’aide de deux voix séparées. Le graveur de repères est ensuite déplacé dans chacune des voix, sans quoi aucun repère ne sera imprimé. Enfin, chaque voix se voit attribuer un positionnement pour les repères.

Cette méthode, bien que plus complexe que la première, apporte plus de flexibilité dans l’ajustement individuel des deux composants du repère.

    \score {
      \relative c'
      <<
        \new Staff {
          <<
            \new Voice \with {
              \consists Mark_engraver
              \consists "Staff_collecting_engraver"
            }
            { c4 d e f
              \mark \markup { \box A }
              c4 d e f
            }
            \new Voice \with {
              \consists Mark_engraver
              \consists "Staff_collecting_engraver"
              \override RehearsalMark.direction = #DOWN
            }
            { s4 s s s
              \mark \markup { \circle 1 }
              s4 s s s
            }
          >>
        }
      >>
      \layout {
        \context {
          \Score
          \remove "Mark_engraver"
          \remove "Staff_collecting_engraver"
        }
      }
    }

## Incipit

Dans le cadre de la transcription de musique mensurale, un « incipit » en début de pièce permet d’indiquer tonalité et tempo originaux. Les musiciens sont maintenant habitués aux barres de mesure, ce qui n’était pas le cas à l’époque. Dans une forme de compromis, les barres de mesures sont souvent imprimées entre les portées, mise en forme que l’on appelle « lignes de mensuration ».

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % A short excerpt from the Jubilate Deo by Orlande de Lassus
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    global = {
      \set Score.skipBars = ##t
      \key g \major
      \time 4/4

      % the actual music
      \skip 1*8

      % let finis bar go through all staves
      \override Staff.BarLine.transparent = ##f

      % finis bar
      \bar "|."
    }

    discantusIncipit = {
      \clef "neomensural-c1"
      \key f \major
      \time 2/2
      c''1.
    }

    discantusNotes = {
      \transpose c' c'' {
        \clef "treble"
        d'2. d'4 |
        b e' d'2 |
        c'4 e'4.( d'8 c' b |
        a4) b a2 |
        b4.( c'8 d'4) c'4 |
        \once \hide NoteHead
        c'1 |
        b\breve |
      }
    }

    discantusLyrics = \lyricmode {
      Ju -- bi -- la -- te De -- o,
      om -- nis ter -- ra, __ om-
      "..."
      -us.
    }

    altusIncipit = {
      \clef "neomensural-c3"
      \key f \major
      \time 2/2
      r1 f'1.
    }

    altusNotes = {
      \transpose c' c'' {
        \clef "treble"
        r2 g2. e4 fis g |
        a2 g4 e |
        fis g4.( fis16 e fis4) |
        g1 |
        \once \hide NoteHead
        g1 |
        g\breve |
      }
    }

    altusLyrics = \lyricmode {
      Ju -- bi -- la -- te
      De -- o, om -- nis ter -- ra,
      "..."
      -us.
    }

    tenorIncipit = {
      \clef "neomensural-c4"
      \key f \major
      \time 2/2
      r\longa
      r\breve
      r1 c'1.
    }

    tenorNotes = {
      \transpose c' c' {
        \clef "treble_8"
        R1 |
        R1 |
        R1 |
        % two measures
        r2 d'2. d'4 b e' |
        \once \hide NoteHead
        e'1 |
        d'\breve |
      }
    }

    tenorLyrics = \lyricmode {
      Ju -- bi -- la -- te
      "..."
      -us.
    }

    bassusIncipit = {
      \clef "mensural-f"
      \key f \major
      \time 2/2
      r\maxima
      f1.
    }

    bassusNotes = {
      \transpose c' c' {
        \clef "bass"
        R1 |
        R1 |
        R1 |
        R1 |
        g2. e4 |
        \once \hide NoteHead
        e1 |
        g\breve |
      }
    }

    bassusLyrics = \lyricmode {
      Ju -- bi-
      "..."
      -us.
    }

    \score {
      <<
        \new StaffGroup = choirStaff <<
          \new Voice = "discantusNotes" <<
            \set Staff.instrumentName = "Discantus"
            \incipit \discantusIncipit
            \global
            \discantusNotes
          >>
          \new Lyrics \lyricsto discantusNotes { \discantusLyrics }
          \new Voice = "altusNotes" <<
            \set Staff.instrumentName = "Altus"
            \global
            \incipit \altusIncipit
            \altusNotes
          >>
          \new Lyrics \lyricsto altusNotes { \altusLyrics }
          \new Voice = "tenorNotes" <<
            \set Staff.instrumentName = "Tenor"
            \global
            \incipit \tenorIncipit
            \tenorNotes
          >>
          \new Lyrics \lyricsto tenorNotes { \tenorLyrics }
          \new Voice = "bassusNotes" <<
            \set Staff.instrumentName = "Bassus"
            \global
            \incipit \bassusIncipit
            \bassusNotes
          >>
          \new Lyrics \lyricsto bassusNotes { \bassusLyrics }
        >>
      >>
      \layout {
        \context {
          \Score
          %% no bar lines in staves or lyrics
          \hide BarLine
        }
        %% the next two instructions keep the lyrics between the bar lines
        \context {
          \Lyrics
          \consists "Bar_engraver"
          \consists "Separating_line_group_engraver"
        }
        \context {
          \Voice
          %% no slurs
          \hide Slur
          %% Comment in the below "\remove" command to allow line
          %% breaking also at those bar lines where a note overlaps
          %% into the next measure.  The command is commented out in this
          %% short example score, but especially for large scores, you
          %% will typically yield better line breaking and thus improve
          %% overall spacing if you comment in the following command.
          %%\remove "Forbid_line_break_engraver"
        }
        indent = 6\cm
        incipit-width = 4\cm
      }
    }

## Insertion d’un fragment dans un markup au-dessus de la portée

La commande `\markup` est polyvalente. Dans cet exemple, elle contient un bloc `\score` plutôt que du texte ou une marque.

    tuning = \markup {
      \score {
        \new Staff \with { \remove "Time_signature_engraver" }
        {
          \clef bass
          <c, g, d g>1
        }
        \layout { ragged-right = ##t  indent = 0\cm }
      }
    }

    \header {
      title = "Solo Cello Suites"
      subtitle = "Suite IV"
      subsubtitle = \markup { Originalstimmung: \raise #0.5 \tuning }
    }

    \layout { ragged-right = ##f }

    \relative c'' {
      \time 4/8
      \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
      \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
      g8 a g a
      g8 a g a
    }

## Impression de la corde aiguë d’un `TabStaff` en bas

Il est d’usage, en matière de tablature, d’imprimer la première corde en haut. Il est toutefois possible de la positionner en bas grâce à une modification de la propriété de contexte `stringOneTopmost`. Définir ce réglage au sein d’un bloc `\layout` l’appliquera à l’intégralité du contexte.

    %
    %\layout {
    %  \context {
    %    \Score
    %    stringOneTopmost = ##f
    %  }
    %  \context {
    %    \TabStaff
    %    tablatureFormat = #fret-letter-tablature-format
    %  }
    %}

    m = {
      \cadenzaOn
      e, b, e gis! b e'
      \bar "||"
    }

    <<
      \new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m }
      \new TabStaff
      {
        \m
        \set Score.stringOneTopmost = ##f
        \set TabStaff.tablatureFormat = #fret-letter-tablature-format
        \m
      }
    >>

## Tablature en lettres

Une tablature peut comporter des lettres en lieu et place des chiffres.

    music = \relative c {
      c4 d e f
      g4 a b c
      d4 e f g
    }

    <<
      \new Staff {
        \clef "G_8"
        \music
      }
      \new TabStaff \with {
        tablatureFormat = #fret-letter-tablature-format
      }
      {
        \music
      }
    >>

## Saut de ligne et glissando

L’affectation de la valeur `#t` à la propriété `breakable`, combinée à `after-line-breaking`, permet la rupture d’une indication de glissando lors d’un saut de ligne.

    glissandoSkipOn = {
      \override NoteColumn.glissando-skip = ##t
      \hide NoteHead
      \override NoteHead.no-ledgers = ##t
    }

    \relative c'' {
      \override Glissando.breakable = ##t
      \override Glissando.after-line-breaking = ##t
      f1\glissando |
      \break
      a4 r2. |
      f1\glissando
      \once \glissandoSkipOn
      \break
      a2 a4 r4 |
    }

## Empâtement de certaines lignes d’une portée

Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines lignes d’une portée plus épaisses que les autres, comme la ligne médiane, ou bien pour mettre en exergue la ligne portant la clef de sol. Il suffit pour cela d’ajouter une ligne qui sera accolée à celle qui doit être mise en évidence, grâce à la propriété `line-positions` de l’objet `StaffSymbol`.

    {
      \override Staff.StaffSymbol.line-positions =
        #'(-4 -2 -0.2 0 0.2 2 4)
      d'4 e' f' g'
    }

## Compteur de mesures

Le code ci-dessous permet, de façon détournée, d’afficher un compteur de mesures à l’aide d’une répétition en pourcent rendue transparente.

    <<
      \context Voice = "foo" {
        \clef bass
        c4 r g r
        c4 r g r
        c4 r g r
        c4 r g r
      }
      \context Voice = "foo" {
        \set countPercentRepeats = ##t
        \hide PercentRepeat
        \override PercentRepeatCounter.staff-padding = #1
        \repeat percent 4 { s1 }
      }
    >>

## Présentation à l’ancienne (barres de mesure entre les portées)

En musique mensurale, les barres de mesure ne traversent pas les portées. Pour obtenir ce résultat avec un `StaffGroup` plutôt qu’en utilisant un `ChoirStaff`, il faudra masquer les portions de barre qui recouvrent les portées à l’aide d’un `\hide`.

    global = {
      \hide Staff.BarLine
      s1 s
      % the final bar line is not interrupted
      \undo \hide Staff.BarLine
      \bar "|."
    }

    \new StaffGroup \relative c'' {
      <<
        \new Staff { << \global { c1 c } >> }
        \new Staff { << \global { c c } >> }
      >>
    }

## Modification de la pente de l’extension d’octaviation

Il est possible d’adapter la pente d’une indication d’octaviation.

    \relative c'' {
      \override Staff.OttavaBracket.stencil = #ly:line-spanner::print
      \override Staff.OttavaBracket.bound-details =
        #`((left . ((Y . 0) ; Change the integer here
                    (attach-dir . ,LEFT)
                    (padding . 0)
                    (stencil-align-dir-y . ,CENTER)))
           (right . ((Y . 5) ; Change the integer here
                     (padding . 0)
                     (attach-dir . ,RIGHT)
                     (text . ,(make-draw-dashed-line-markup
                               (cons 0 -1.2))))))
      \override Staff.OttavaBracket.left-bound-info =
         #ly:line-spanner::calc-left-bound-info-and-text
      \override Staff.OttavaBracket.right-bound-info =
         #ly:line-spanner::calc-right-bound-info
      \ottava #1
      c1
      c'''1
    }

## Imbrications de regroupements de portées

La propriété `systemStartDelimiterHierarchy` permet de créer des regroupements imbriqués complexes. La commande `\set StaffGroup.systemStartDelimiterHierarchy` prend en argument la liste alphabétique des sous-groupes à hiérarchiser. Chaque sous-groupe peut être affublé d’un délimiteur particulier. Chacun des regroupements intermédiaires doit être borné par des parenthèses. Bien que des éléments de la liste puissent être omis, le premier délimiteur embrassera toujours l’intégralité des portées. Vous disposez des quatre délimiteurs `SystemStartBar`, `SystemStartBracket`, `SystemStartBrace` et `SystemStartSquare`.

    \new StaffGroup
    \relative c'' <<
      \override StaffGroup.SystemStartSquare.collapse-height = #4
      \set StaffGroup.systemStartDelimiterHierarchy
        = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a
                                 (SystemStartSquare b)  ) c ) d)
      \new Staff { c1 }
      \new Staff { c1 }
      \new Staff { c1 }
      \new Staff { c1 }
      \new Staff { c1 }
    >>

## Armures inhabituelles

La commande `\key` détermine la propriété `keyAlterations` d’un contexte `Staff`. Des armures inhabituelles peuvent être spécifiées en modifiant directement cette propriété.

Il s’agit en l’occurrence de définir une liste :

`\set Staff.keyAlterations = #`(((octave . pas) . altération) ((octave . pas) . altération) …)`

dans laquelle, et pour chaque élément, `octave` spécifie l’octave (0 pour celle allant du do médium au si supérieur), `pas` la note dans cette octave (0 pour do et 6 pour si), et `altération` sera `,SHARP` ou `,FLAT` ou `,DOUBLE-SHARP`, etc. (attention à la virgule en préfixe).

Une formulation abrégée – `(pas . altération)` – signifie que l’altération de l’élément en question sera valide quelle que soit l’octave. En ce qui concerne les gammes microtonales dans lesquelles un « dièse » n’est pas d’un centième, `altération` se réfère à un deux-centième de ton entier.

    \include "arabic.ly"
    \relative do' {
      \set Staff.keyAlterations = #`((0 . ,SEMI-FLAT)
                                     (1 . ,SEMI-FLAT)
                                     (2 . ,FLAT)
                                     (5 . ,FLAT)
                                     (6 . ,SEMI-FLAT))
    %\set Staff.extraNatural = ##f
      re reb \dwn reb resd
      dod dob dosd \dwn dob |
      dobsb dodsd do do |
    }

## Numérotation de groupes de mesures

Cet extrait illustre l’utilisation du `Measure_counter_engraver` aux fins de numéroter un groupe de mesures successives. La section à numéroter peut éventuellement comporter des reprises.

Le graveur doit être ajouté au contexte approprié. Il est ici attaché au contexte `Staff`, mais pourrait l’être à un contexte `Dynamics`.

Le compteur est lancé par `\startMeasureCount` et arrêté par `\stopMeasureCount`. La numérotation commence à `1` par défaut, comportement qui peut se modifier à l’aide de la propriété `count-from`.

Lorsqu’une mesure s’étend après un saut de ligne, le numéro y est alors répété, entre parenthèses.

    \layout {
      \context {
        \Staff
        \consists #Measure_counter_engraver
      }
    }

    \new Staff {
      \startMeasureCount
      \repeat unfold 7 {
        c'4 d' e' f'
      }
      \stopMeasureCount
      \bar "||"
      g'4 f' e' d'
      \override Staff.MeasureCounter.count-from = #2
      \startMeasureCount
      \repeat unfold 5 {
        g'4 f' e' d'
      }
      g'4 f'
      \bar ""
      \break
      e'4 d'
      \repeat unfold 7 {
        g'4 f' e' d'
      }
      \stopMeasureCount
    }

## Orchestre, chœur et piano

Ce canevas illustre l’utilisation de contextes `StaffGroup` pour regrouper les instruments selon leur famille, imbriqués dans un `GrandStaff`, ainsi que le recours à la fonction `\transpose` pour les instruments transpositeurs. Dans tous les identificateurs, la musique est stockée en ut. Les notes peuvent tout aussi bien être saisies en ut ou dans la tonalité particulière de l’instrument avant d’être transposées puis affectées à une variable.

    #(set-global-staff-size 17)
    \paper {
      indent = 3.0\cm  % add space for instrumentName
      short-indent = 1.5\cm  % add less space for shortInstrumentName
    }

    fluteMusic = \relative c' { \key g \major g'1 b }

    % Pitches as written on a manuscript for Clarinet in A
    % are transposed to concert pitch.

    clarinetMusic = \transpose c' a
      \relative c'' { \key bes \major bes1 d }

    trumpetMusic = \relative c { \key g \major g''1 b }

    % Key signature is often omitted for horns

    hornMusic = \transpose c' f
      \relative c { d'1 fis }

    percussionMusic = \relative c { \key g \major g1 b }

    sopranoMusic = \relative c'' { \key g \major g'1 b }

    sopranoLyrics = \lyricmode { Lyr -- ics }

    altoIMusic = \relative c' { \key g \major g'1 b }

    altoIIMusic = \relative c' { \key g \major g'1 b }

    altoILyrics =  \sopranoLyrics

    altoIILyrics = \lyricmode { Ah -- ah }

    tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b }

    tenorLyrics = \sopranoLyrics

    pianoRHMusic = \relative c { \key g \major g''1 b }

    pianoLHMusic = \relative c { \clef bass \key g \major g1 b }

    violinIMusic = \relative c' { \key g \major g'1 b }

    violinIIMusic = \relative c' { \key g \major g'1 b }

    violaMusic = \relative c { \clef alto \key g \major g'1 b }

    celloMusic = \relative c { \clef bass \key g \major g1 b }

    bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b }

    \score {
      <<
        \new StaffGroup = "StaffGroup_woodwinds" <<
          \new Staff = "Staff_flute" \with { instrumentName = "Flute" }
          \fluteMusic

          \new Staff = "Staff_clarinet" \with {
            instrumentName = \markup { \concat { "Clarinet in B" \flat } }
          }

          % Declare that written Middle C in the music
          % to follow sounds a concert B flat, for
          % output using sounded pitches such as MIDI.
          %\transposition bes

          % Print music for a B-flat clarinet
          \transpose bes c' \clarinetMusic
        >>

        \new StaffGroup = "StaffGroup_brass" <<
          \new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" }
           % \transposition f
            \transpose f c' \hornMusic

          \new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in  C" }
          \trumpetMusic

        >>
        \new RhythmicStaff = "RhythmicStaff_percussion"
        \with { instrumentName = "Percussion" }
        <<
          \percussionMusic
        >>
        \new PianoStaff \with { instrumentName = "Piano" }
        <<
          \new Staff { \pianoRHMusic }
          \new Staff { \pianoLHMusic }
        >>
        \new ChoirStaff = "ChoirStaff_choir" <<
          \new Staff = "Staff_soprano" \with { instrumentName = "Soprano" }
          \new Voice = "soprano"
          \sopranoMusic

          \new Lyrics \lyricsto "soprano" { \sopranoLyrics }
          \new GrandStaff = "GrandStaff_altos"
          \with { \accepts Lyrics } <<
            \new Staff = "Staff_altoI"  \with { instrumentName = "Alto I" }
            \new Voice = "altoI"
            \altoIMusic

            \new Lyrics \lyricsto "altoI" { \altoILyrics }
            \new Staff = "Staff_altoII" \with { instrumentName = "Alto II" }
            \new Voice = "altoII"
            \altoIIMusic

            \new Lyrics \lyricsto "altoII" { \altoIILyrics }
          >>

          \new Staff = "Staff_tenor" \with { instrumentName = "Tenor" }
            \new Voice = "tenor"
            \tenorMusic

          \new Lyrics \lyricsto "tenor" { \tenorLyrics }
        >>
        \new StaffGroup = "StaffGroup_strings" <<
          \new GrandStaff = "GrandStaff_violins" <<
            \new Staff = "Staff_violinI" \with { instrumentName = "Violin I" }
            \violinIMusic

            \new Staff = "Staff_violinII" \with { instrumentName = "Violin II" }
            \violinIIMusic
          >>

          \new Staff = "Staff_viola" \with { instrumentName = "Viola" }
          \violaMusic

          \new Staff = "Staff_cello" \with { instrumentName = "Cello" }
          \celloMusic

          \new Staff = "Staff_bass" \with { instrumentName = "Double Bass" }
          \bassMusic
        >>
      >>
      \layout { }
    }

## Impression des paroles dans la portée

Des paroles peuvent venir s’inscrire dans la portée même. Ces paroles sont décalées par la dérogation `\override LyricText.extra-offset = #'(0 . dimension)` ; des commandes similaires s’occuperont des extenseurs et des tirets. Le décalage optimal ne peut s’obtenir qu’en procédant à tâtons.

    <<
      \new Staff <<
        \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 }
      >>
      \new Lyrics \with {
        \override LyricText.extra-offset = #'(0 . 8.6)
        \override LyricExtender.extra-offset = #'(0 . 8.6)
        \override LyricHyphen.extra-offset = #'(0 . 8.6)
      } \lyricsto "voc" { La la -- la __ _ la }
    >>

## Citation d’une autre voix et transposition

Les citations tiennent compte de la transposition, aussi bien celle de l’instrument d’origine que celle de la partie où elles interviennent. Dans l’exemple suivant, tous les instruments sont en tonalité de concert et seront repris par un instrument en fa. Le destinataire de la citation peut à son tour transposer à l’aide de la commande `\transpose`. En pareil cas, toutes les hauteurs seront transposées, y compris celles de la citation.

    \addQuote clarinet {
      \transposition bes
      \repeat unfold 8 { d'16 d' d'8 }
    }

    \addQuote sax {
      \transposition es'
      \repeat unfold 16 { a8 }
    }

    quoteTest = {
      % french horn
      \transposition f
      g'4
      << \quoteDuring "clarinet" { \skip 4 } s4^"clar." >>
      << \quoteDuring "sax" { \skip 4 } s4^"sax." >>
      g'4
    }

    {
      \new Staff \with {
        instrumentName = \markup { \column { Horn "in F" } }
      }
      \quoteTest
      \transpose c' d' << \quoteTest s4_"up a tone" >>
    }

## Citation d’une autre voix

Les types d’événements pris en charge pour la citation sont déterminés par la propriété `quotedEventTypes`. Par défaut, sa valeur est fixée à `(note-event rest-event tie-event beam-event tuplet-span-event)`, ce qui signifie que seuls les notes, silences, liaisons, ligatures et n-olets seront mentionnés par `\quoteDuring`. Dans l’exemple suivant, le quart de soupir n’est pas reproduit puisqu’il n’est pas mentionné parmi les `quotedEventTypes`.

Pour connaître la liste des types d’événements, reportez-vous à la rubrique Music classes de la référence des propriétés internes.

    quoteMe = \relative c' {
      fis4 r16 a8.-> b4\ff c
    }
    \addQuote quoteMe \quoteMe

    original = \relative c'' {
      c8 d s2
      \once \override NoteColumn.ignore-collision = ##t
      es8 gis8
    }

    <<
      \new Staff \with { instrumentName = "quoteMe" }
      \quoteMe

      \new Staff \with { instrumentName = "orig" }
      \original

      \new Staff \with {
        instrumentName = "orig+quote"
        quotedEventTypes = #'(note-event articulation-event)
      }
      \relative c''
      <<
        \original
        \new Voice {
          s4
          \set fontSize = #-4
          \override Stem.length-fraction = #(magstep -4)
          \quoteDuring "quoteMe" { \skip 2. }
        }
      >>
    >>

## Retrait de l’accolade à la première ligne d’une pièce pour piano

Dans cet extrait est supprimée la première accolade d’un `PianoStaff` ou d’un `GrandStaff`.

Ceci peut s’avérer utile pour couper et coller l’image générée dans de la musique préexistante.

Est utilisée la fonction `\alterBroken`.

    someMusic =  {
      \once \override Staff.Clef.stencil = ##f
      \once \override Staff.TimeSignature.stencil = ##f
      \repeat unfold 3 c1 \break
      \repeat unfold 5 c1 \break
      \repeat unfold 5 c1
    }

    \score {
      \new PianoStaff
      <<
        \new Staff = "right" \relative c'' \someMusic
        \new Staff = "left" \relative c' { \clef F \someMusic }
      >>
      \layout {
        indent=75
        \context {
          \PianoStaff
          \alterBroken transparent #'(#t) SystemStartBrace
        }
      }
    }

## Masquage de la première ligne si elle est vide

Par défaut, le premier système comportera absolument toutes les portées. Si vous préférez masquer les portées vides y compris pour le premier système, vous devrez activer la propriété `remove-first` du `VerticalAxisGroup`. Mentionnée dans un bloc `\layout`, cette commande agira de manière globale. Pour qu’elle ne soit effective que pour une portée particulière, vous devrez également spécifier le contexte (`Staff` pour qu’il ne concerne que la portée en cours) en préfixe de la propriété.

La première ligne inférieure du deuxième `StaffGroup` est bien présente, pour la simple raison que le réglage en question ne s’applique qu’à la portée dans laquelle il a été inscrit.

    \layout {
      \context {
        \Staff \RemoveEmptyStaves
        % To use the setting globally, uncomment the following line:
        % \override VerticalAxisGroup.remove-first = ##t
      }
    }
    \new StaffGroup <<
      \new Staff \relative c' {
        e4 f g a \break
        c1
      }
      \new Staff {
        % To use the setting globally, comment this line,
        % uncomment the line in the \layout block above
        \override Staff.VerticalAxisGroup.remove-first = ##t
        R1 \break
        R
      }
    >>
    \new StaffGroup <<
      \new Staff \relative c' {
        e4 f g a \break
        c1
      }
      \new Staff {
        R1 \break
        R
      }
    >>

## Séparation visuelle entre les systèmes

La séparation entre deux systèmes consécutifs peut être mise en évidence par n’importe quel markup. LilyPond dispose à cet effet d’une double oblique inversée : `\slashSeparator`.

    \paper {
      system-separator-markup = \slashSeparator
      line-width = 120
    }

    notes = \relative c' {
      c1 | c \break
      c1 | c \break
      c1 | c
    }

    \book {
      \score {
        \new GrandStaff <<
          \new Staff \notes
          \new Staff \notes
        >>
      }
    }

## Barre de mesure en encoche

Lorsque les barres de mesure ne sont là que dans un but de coordination et non pour accentuer le rythme, il arrive souvent qu’elles se présentent sous la forme d’une simple encoche.

    \relative c' {
      \set Score.defaultBarType = #"'"
      c4 d e f
      g4 f e d
      c4 d e f
      g4 f e d
      \bar "|."
    }

## Métrique entre parenthèses – méthode 3

Autre manière de mettre la métrique entre parenthèses.

    \relative c'' {
      \override Staff.TimeSignature.stencil = #(lambda (grob)
        (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
      \time 2/4
      a4 b8 c
    }

## Métrique entre parenthèses

Une métrique peut être mise entre parenthèses.

    \relative c'' {
      \override Staff.TimeSignature.stencil = #(lambda (grob)
        (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
      \time 2/4
      a4 b8 c
    }

## Affinage des propriétés d’une clef

Modifier le glyphe, la position de la clef ou son octaviation ne changeront pas la position des notes ; il faut pour y parvenir modifier aussi la position du do médium. La redéfinition préalable de `middleCClefPosition` permet de placer l’armure sur les bonnes lignes. Le positionnement est relatif à la ligne médiane, un nombre positif faisant monter, un nombre négatif abaissant.

Par exemple, la commande `\clef "treble_8"` équivaut à définir `clefGlyph`, `clefPosition` – qui contrôle la position verticale de la clef – `middleCPosition` et `clefOctavation`. Une nouvelle clef apparaîtra dès lors que l’une de ces propriétés, à l’exception de `middleCPosition`, aura été modifiée.

Les exemples qui suivent illustrent les différentes possibilités de définir ces propriétés manuellement. Sur la première ligne, la position relative des notes par rapport aux clefs est préservée, ce qui n’est pas le cas pour la deuxième ligne.

    {
      % The default treble clef
      \key f \major
      c'1
      % The standard bass clef
      \set Staff.clefGlyph = #"clefs.F"
      \set Staff.clefPosition = #2
      \set Staff.middleCPosition = #6
      \set Staff.middleCClefPosition = #6
      \key g \major
      c'1
      % The baritone clef
      \set Staff.clefGlyph = #"clefs.C"
      \set Staff.clefPosition = #4
      \set Staff.middleCPosition = #4
      \set Staff.middleCClefPosition = #4
      \key f \major
      c'1
      % The standard choral tenor clef
      \set Staff.clefGlyph = #"clefs.G"
      \set Staff.clefPosition = #-2
      \set Staff.clefTransposition = #-7
      \set Staff.middleCPosition = #1
      \set Staff.middleCClefPosition = #1
      \key f \major
      c'1
      % A non-standard clef
      \set Staff.clefPosition = #0
      \set Staff.clefTransposition = #0
      \set Staff.middleCPosition = #-4
      \set Staff.middleCClefPosition = #-4
      \key g \major
      c'1 \break

      % The following clef changes do not preserve
      % the normal relationship between notes, key signatures
      % and clefs:

      \set Staff.clefGlyph = #"clefs.F"
      \set Staff.clefPosition = #2
      c'1
      \set Staff.clefGlyph = #"clefs.G"
      c'1
      \set Staff.clefGlyph = #"clefs.C"
      c'1
      \set Staff.clefTransposition = #7
      c'1
      \set Staff.clefTransposition = #0
      \set Staff.clefPosition = #0
      c'1

      % Return to the normal clef:

      \set Staff.middleCPosition = #0
      c'1
    }

## Deux `\partCombine` sur une même portée

La fonction `\partCombine` prend deux expressions musicales contenant chacune une partie et les distribue dans quatre contextes `Voice` nommés « two », « one », « solo » et « chords » selon le moment et la manière dont ces parties fusionnent en une voix commune. Les voix issues de `\partCombine` peuvent disposer de leurs propres propriétés de mise en forme définies de manière habituelle. Sont ici définies des extensions à `\partCombine` de sorte à faciliter le placement de quatre voix sur une seule portée.

    soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
    alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
    tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
    bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

    \new Staff <<
      \key b\minor
      \clef alto
      \partial 4
      \transpose b b'
      \partCombineUp \soprano \alto
      \partCombineDown \tenor \bass
    >>

    \layout {
      \context {
        \Staff
        \accepts "VoiceBox"
      }
      \context {
        \name "VoiceBox"
        \type "Engraver_group"
        \defaultchild "Voice"
        \accepts "Voice"
        \accepts "NullVoice"
      }
    }

    customPartCombineUp =
    #(define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Up} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use upward stems."
    #{
      \new VoiceBox = "Up" <<
        \context Voice = "one" { \voiceOne }
        \context Voice = "two" { \voiceThree }
        \context Voice = "shared" { \voiceOne }
        \context Voice = "solo" { \voiceOne }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    customPartCombineDown = #
    (define-music-function (partOne partTwo)
      (ly:music? ly:music?)
    "Take the music in @var{partOne} and @var{partTwo} and return
    a @code{VoiceBox} named @q{Down} containing @code{Voice}s
    that contain @var{partOne} and @var{partTwo} merged into one
    voice where feasible.  This variant sets the default voicing
    in the output to use downward stems."
    #{
      \new VoiceBox = "Down" <<
        \set VoiceBox.soloText = #"Solo III"
        \set VoiceBox.soloIIText = #"Solo IV"
        \context Voice ="one" { \voiceFour }
        \context Voice ="two" { \voiceTwo }
        \context Voice ="shared" { \voiceFour }
        \context Voice ="solo" { \voiceFour }
        \context NullVoice = "null" {}
        \partCombine #partOne #partTwo
      >>
    #})

    soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
    alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
    tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
    bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

    \new Staff <<
      \key b\minor
      \clef alto
      \partial 4
      \transpose b b'
      \customPartCombineUp \soprano \alto
      \customPartCombineDown \tenor \bass
    >>

## Indication de regroupement de portées par un rectangle

Un regroupement de portées sera indiqué par un simple rectangle – `SystemStartSquare` – en début de ligne dès lors que vous le mentionnerez explicitement au sein d’un contexte `StaffGroup` ou `ChoirStaff`.

    \score {
      \new StaffGroup { <<
      \set StaffGroup.systemStartDelimiter = #'SystemStartSquare
        \new Staff { c'4 d' e' f' }
        \new Staff { c'4 d' e' f' }
      >> }
    }

## Utilisation d’`autoChange` avec plus d’une voix

L’instruction `\autoChange` est opérationnelle y compris en présence de voix multiples.

    \score
    {
      \new PianoStaff
      <<
        \new Staff = "up" {
          <<
            \set Timing.beamExceptions = #'()
            \set Timing.beatStructure = #'(4)
            \new Voice {
              \voiceOne
              \autoChange
              \relative c' {
                g8 a b c d e f g
                g,8 a b c d e f g
              }
            }

            \new Voice {
              \voiceTwo
              \autoChange
              \relative c' {
                g8 a b c d e f g
                g,,8 a b c d e f g
              }
            }
          >>
        }

        \new Staff = "down" {
          \clef bass
        }
      >>
    }

## Utilisation de lignes de repères dans une partition « à la française »

Le recours à des contextes `MarkLine` (tel qu’indiqué dans le LSR1010) dans une partition « à la française » peut s’avérer problématique lorsque toutes les portées entre deux contextes `Markline` sont absentes d’un système. La présence du `Keep_alive_together_engraver` au sein de chacun des `StaffGroup` permet de maintenir actif le `MarkLine` uniquement lorsque les autres portées du regroupement sont elles-mêmes actives.

    bars = {
      \tempo "Allegro" 4=120
      s1*2
      \repeat unfold 5 { \mark \default s1*2 }
      \bar "||"
      \tempo "Adagio" 4=40
      s1*2
      \repeat unfold 8 { \mark \default s1*2 }
      \bar "|."
    }
    winds = \repeat unfold 120 { c''4 }
    trumpet = { \repeat unfold 8 g'2 R1*16 \repeat unfold 4 g'2 R1*8 }
    trombone = { \repeat unfold 4 c'1 R1*8 d'1 R1*17 }
    strings = \repeat unfold 240 { c''8 }

    #(set-global-staff-size 16)
    \paper {
      systems-per-page = 5
      ragged-last-bottom = ##f
    }

    \layout {
      indent = 15\mm
      short-indent = 5\mm
      \context {
        \name MarkLine
        \type Engraver_group
        \consists Output_property_engraver
        \consists Axis_group_engraver
        \consists Mark_engraver
        \consists Metronome_mark_engraver
        \override VerticalAxisGroup.remove-empty = ##t
        \override VerticalAxisGroup.remove-layer = #'any
        \override VerticalAxisGroup.staff-affinity = #DOWN
        \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.basic-distance = 1
        keepAliveInterfaces = #'()
      }
      \context {
        \Staff
        \override VerticalAxisGroup.remove-empty = ##t
        \override VerticalAxisGroup.remove-layer = ##f
      }
      \context {
        \StaffGroup
        \accepts MarkLine
        \consists Keep_alive_together_engraver
      }
      \context {
        \Score
        \remove Mark_engraver
        \remove Metronome_mark_engraver
      }
    }

    \score {
      <<
        \new StaffGroup = "winds" \with {
          instrumentName = "Winds"
          shortInstrumentName = "Winds"
        } <<
          \new MarkLine \bars
          \new Staff \winds
        >>
        \new StaffGroup = "brass" <<
          \new MarkLine \bars
          \new Staff = "trumpet" \with {
            instrumentName = "Trumpet"
            shortInstrumentName = "Tpt"
          } \trumpet
          \new Staff = "trombone" \with {
            instrumentName = "Trombone"
            shortInstrumentName = "Tbn"
          } \trombone
        >>
        \new StaffGroup = "strings" \with {
          instrumentName = "Strings"
          shortInstrumentName = "Strings"
        } <<
          \new MarkLine \bars
          \new Staff = "strings" { \strings }
        >>
      >>
    }

## Alignement vertical de `StaffGroup`s sans `SystemStartBar`

Cet extrait indique comment obtenir des regroupements `StaffGroup` alignés verticalement, disposant chacun de leur indication de groupe `SystemStartBar`, sans qu’il ne soient connectés entre eux.

    % by Thomas Morley

    #(set-global-staff-size 18)

    \paper {
      indent = 0
      ragged-right = ##f
      print-all-headers = ##t
    }

    \layout {
      \context {
        \Staff
        \consists "Mark_engraver"
        \override RehearsalMark.self-alignment-X = #LEFT
      }
      \context {
        \StaffGroup
        systemStartDelimiterHierarchy =
          #'(SystemStartBrace (SystemStartBracket a b))
      }
      \context {
        \Score
        \override SystemStartBrace.style = #'bar-line
        \omit SystemStartBar
        \override SystemStartBrace.padding = #-0.1
        \override SystemStartBrace.thickness = #1.6
        \remove "Mark_engraver"
        \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15
      }
    }

    %%%% EXAMPLE

    txt =
    \lyricmode {
      Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
      und4 hof -- fet auf ihn al -- le Zeit2.
    }

    % First StaffGroup "exercise"

    eI =
    \relative c' {
            \mark \markup {
                    \bold Teacher:
                    This is a simple setting of the choral. Please improve it.
                    }
            \key a \minor
            \time 4/4
            \voiceOne

            \partial 4
            e4
            a b c b
            a b gis2
            e4\fermata g! g f
            e a a gis
            a2.\fermata
            \bar ":|."
    }

    eII =
    \relative c' {
            \key a \minor
            \time 4/4
            \voiceTwo
            \partial 4
            c4
            e e e gis
            a f e2
            b4 b d d
            c c d d
            c2.
            \bar ":|."
    }

    eIII =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceOne

            \partial 4
            a4
            c b a b
            c d b2
            gis4 g g b
            c a f e
            e2.
    }

    eIV =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceTwo

            \partial 4
            a,4
            a' gis a e
            a, d e2
            e,4\fermata e' b g
            c f d e
            a,2.\fermata
            \bar ":|."
    }

    exercise =
    \new StaffGroup = "exercise"
    <<

      \new Staff
        <<
          \new Voice \eI
          \new Voice \eII
        >>

      \new Lyrics \txt

      \new Staff
        <<
          \new Voice \eIII
          \new Voice \eIV
        >>
    >>

    % Second StaffGRoup "simple Bach"

    sbI =
    \relative c' {
            \mark \markup { \bold" Pupil:" Here's my version! }
            \key a \minor
            \time 4/4
            \voiceOne

            \partial 4
            e4
            a b c b
            a b gis2
            e4\fermata g! g f
            e a a gis
            a2.\fermata
            \bar ":|."
    }

    sbII =
    \relative c' {
            \key a \minor
            \time 4/4
            \voiceTwo
            \partial 4
            c8 d
            e4 e e8 f g4
            f f e2
            b4 b8 c d4 d
            e8 d c4 b8 c d4
            c2.
            \bar ":|."
    }

    sbIII =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceOne

            \partial 4
            a8 b
            c4 b a b8 c
            d4 d8 c b2
            gis4 g g8 a b4
            b a8 g f4 e
            e2.
    }

    sbIV =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceTwo

            \partial 4
            a,4
            a' gis a e
            f8 e d4 e2
            e,4\fermata e' b a8 g
            c4 f8 e d4 e
            a,2.\fermata
            \bar ":|."
    }

    simpleBach =
    \new StaffGroup = "simple Bach"
    <<

      \new Staff
        <<
          \new Voice \sbI
          \new Voice \sbII
        >>

      \new Lyrics \txt

      \new Staff
        <<
          \new Voice \sbIII
          \new Voice \sbIV
        >>
    >>

    % Third StaffGroup "chromatic Bach"

    cbI =
    \relative c' {
            \mark \markup {
              \bold "Teacher:"
              \column {
                "Well, you simply copied and transposed a version of J.S.Bach."
                "Do you know this one?"
              }
            }
            \key a \minor
            \time 4/4
            \voiceOne

            \partial 4
            e4
            a b c b
            a b gis4. fis8
            e4\fermata g! g f
            e a a8 b gis4
            a2.\fermata
            \bar ":|."
    }

    cbII =
    \relative c' {
            \key a \minor
            \time 4/4
            \voiceTwo
            \partial 4
            c8 d
            e4 e e8 fis gis4
            a8 g! f!4 e2
            b4 e e d
            d8[ cis] d dis e fis e4
            e2.
            \bar ":|."
    }

    cbIII =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceOne

            \partial 4
            a8 b
            c[ b] a gis8 a4 d,
            e8[ e'] d c b4. a8
            gis4 b c d8 c
            b[ a] a b c b b c16 d
            c2.
    }

    cbIV =
    \relative c' {
            \key a \minor
            \time 4/4
            \clef bass
            \voiceTwo

            \partial 4
            a4
            c, e a, b
            c d e2
            e4\fermata e a b8 c
            gis[ g] fis f e dis e4
            a,2.\fermata
            \bar ":|."
    }

    chromaticBach =
    \new StaffGroup = "chromatic Bach"
    <<

      \new Staff
        <<
          \new Voice \cbI
          \new Voice \cbII
        >>

      \new Lyrics \txt

      \new Staff
        <<
          \new Voice \cbIII
          \new Voice \cbIV
        >>
    >>

    % Score

    \score {
            <<
            \exercise
            \simpleBach
            \chromaticBach
            >>
            \header {
                    title = \markup
                               \column {
                                 \combine \null \vspace #1
                                 "Exercise: Improve the given choral"
                                 " "
                                }
            }
            \layout {
                    \context {
                            \Lyrics
                            \override LyricText.X-offset = #-1
                    }
            }
    }

## Crochet de reprise sous les chiffrages d’accord

L’ajout du `Volta_engraver` à la bonne portée permet d’imprimer les crochets de reprise entre les chiffrages et la portée.

    \score {
      <<
        \chords {
          c1
          c1
        }
        \new Staff \with {
          \consists "Volta_engraver"
        }
        {
          \repeat volta 2 { c'1 }
          \alternative { c' }
        }
      >>
      \layout {
        \context {
          \Score
          \remove "Volta_engraver"
        }
      }
    }

## Volta multiportée

L’ajout du `Volta_engraver` à la portée appropriée permet de répéter les indications de reprise qui normalement n’apparaissent que sur la portée supérieure de la partition.

    voltaMusic = \relative c'' {
      \repeat volta 2 {
        c1
      }
      \alternative {
        d1
        e1
      }
    }

    <<
      \new StaffGroup <<
        \new Staff \voltaMusic
        \new Staff \voltaMusic
      >>
      \new StaffGroup <<
        \new Staff \with { \consists "Volta_engraver" }
          \voltaMusic
        \new Staff \voltaMusic
      >>
    >>

#### LilyPond — Morceaux choisis v2.22.2 (branche stable).