5.1.7 Ordonnancement des contextes

Les contextes viennent en principe se positionner selon leur ordre d’apparition dans le fichier source. Lorsque plusieurs contextes sont imbriqués, le contexte englobant supportera les différents contextes mentionnés dans le fichier source, à la stricte condition qu’ils soient dûment « agréés ». Les contextes imbriqués qui ne font pas partie de la « liste d’agréments » du contexte englobant se retrouveront en dessous de celui-ci au lieu d’y être imbriqués.

La liste des « agréments » d’un contexte se gère à l’aide des instructions \accepts ou \denies\accepts pour ajouter un contexte à la liste, \denies pour retirer l’agrément.

Par exemple, un TabStaff accepte par défaut des contextex TabVoice mais ne supporte pas de contextes Voice. Un contexte Voice apparaissant dans un TabStaff se verrait repositionné sur une portée séparée.

\score {
  \new TabStaff <<
    \new TabVoice { c'1 }
    \new Voice { d'1 }
    >>
}

[image of music]

Néanmoins, et grâce à une instruction \accepts, un contexte Voice peut se voir ajouté au TabStaff :

\score {
  \new TabStaff <<
    \new TabVoice { c'1 }
    \new Voice { d'1 }
    >>
  \layout {
    \context {
      \TabStaff
      \accepts Voice
    }
  }
}

[image of music]

L’instruction \denies permet, lorsqu’un nouveau contexte reprend les définitions d’un contexte existant, d’en ajuster les composantes. C’est par exemple le cas du contexte VaticanaStaff, réplique du contexte Staff, au sein duquel le contexte VaticanaVoice se substitue au contexte Voice dans la « liste d’agrément ».

Gardez à l’esprit que, face à une instruction qui ne s’appliquerait à aucun contexte déjà existant, LilyPond créera un nouveau contexte implicite.

Lors de la définition d’un contexte, les types de contextes sous-jacents susceptibles d’être créés implicitement sont spécifiés à l’aide d’une commande \defaultchild. Un certain nombre d’événements musicaux requièrent un contexte de plus bas niveau ; face à un tel événement, LilyPond crée autant de « sous-contextes » que nécessaire, jusqu’au contexte ne comportant aucun defaultchild.

La création implicite de contexte peut donc finir par engendrer de manière intempestive une nouvelle portée ou une autre partition. L’utilisation d’une instruction \new pour créer explicitement des contextes permet d’éviter ces problèmes.

Il arrive qu’un contexte ne doive exister que pendant un court instant, ce qui est le cas par exemple pour une ossia. Le plus simple consiste alors à initialiser la définition d’un contexte à l’endroit approprié, en parallèle avec le fragment correspondant dans la musique principale. Ce contexte temporaire sera par défaut positionné sous les autres contextes existants. Le repositionner au-dessus du contexte « principal » demande de le définir ainsi :

\new Staff \with { alignAboveContext = "principal" }

Il en va de même pour les contextes temporaires de paroles au sein d’un système à plusieurs portées comme un ChoirStaff lorsque, par exemple, un couplet supplémentaire apparaît à l’occasion d’une reprise. Ce contexte de paroles temporaire se place par défaut sous les portées inférieures. Lui adjoindre une instruction alignBelowContext dès son initialisation permet de l’accoler au contexte de paroles (nommé) qui contient le premier couplet.

Des exemples de repositionnement de contexte temporaire sont disponibles aux rubriques Expressions musicales imbriquées, Modification de portées individuelles et Situations particulières en matière de paroles.

Voir aussi

Manuel d’initiation : Expressions musicales imbriquées.

Manuel de notation : Modification de portées individuelles, Situations particulières en matière de paroles.

Manuel d’utilisation : Apparition d’une portée supplémentaire.

Fichiers d’initialisation : ly/engraver-init.ly.


GNU LilyPond – Manuel de notation v2.25.21 (branche de développement).