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