5.3.2 La commande de fixation \set
Chaque contexte peut avoir plusieurs propriétés, c’est-à-dire
des variables qu’il inclut. Ces dernières peuvent être modifiées « à la
volée », c’est-à-dire pendant que la compilation s’accomplit. C’est ici
le rôle de la commande \set
.
\set contexte.propriété = #valeur
Dans la mesure où valeur est constituée d’un objet Scheme, elle
doit être précédée du caractère #
.
Les propriétés des contextes se libellent sous la forme
minusculeMajuscule
. Leur rôle consiste principalement à traduire
la musique en notation : par exemple, localAlterations
déterminera quand imprimer une altération accidentelle, et
measurePosition
quand imprimer une barre de mesure. La valeur
des propriétés des contextes peut évoluer au fur et à mesure que l’on
avance dans le morceau – measurePosition
en est l’illustration
parfaite.
Ainsi la propriété de contexte skipBars
permet de condenser les
mesures vides de notes, en des silences multimesures – voir
Compression de mesures vides à ce sujet. Il s’agit d’un objet
Scheme, auquel on attribue la valeur booléenne « vrai », c’est-à-dire la
lettre #t
pour « True » en anglais :
R1*2 \set Score.skipBars = ##t R1*2
Si l’argument contexte n’est pas spécifié, alors la propriété
cherchera à s’appliquer dans le contexte le plus restreint où elle est
employée : le plus souvent ChordNames
, Voice
ou
Lyrics
.
\set Score.autoBeaming = ##f \relative { e''8 e e e \set autoBeaming = ##t e8 e e e } \\ \relative { c''8 c c c c8 c c c }
Ce changement étant appliqué « à la volée », il n’affecte que le second groupe de notes.
Notez que le contexte le plus restreint n’est pas toujours le bon, et
peut ne pas contenir la propriété qui vous intéresse : ainsi, la
propriété skipBars
, évoquée plus haut, ne relève pas du contexte
Voice
, mais du contexte Score
– le code suivant ne
fonctionnera pas.
R1*2 \set skipBars = ##t R1*2
Les contextes s’organisent de façon hiérarchique : aussi, lorsqu’un
contexte de niveau supérieur est spécifié (par exemple Staff
), la
propriété sera modifiée dans tous les contextes inférieurs (tous les
contextes Voice
, par exemple) qu’il contient.
La commande \unset
permet d’annuler la définition d’une
propriété :
\unset contexte.propriété
si et seulement si cette propriété a été définie dans ce
contexte précis. En d’autres termes, la commande \unset
doit impérativement affecter le même contexte que la commande
\set
d’origine, même en cas d’imbrication.
\set Score.autoBeaming = ##t \relative { \unset autoBeaming e''8 e e e \unset Score.autoBeaming e8 e e e } \\ \relative { c''8 c c c c8 c c c }
Si l’on se trouve dans le contexte le plus restreint, il n’est pas obligatoire, là encore, de spécifier le contexte. Ainsi, les deux lignes suivantes
\set Voice.autoBeaming = ##t \set autoBeaming = ##t
sont équivalentes si elles apparaissent dans un contexte Voice
.
Pour modifier une propriété de façon à ce que l’accommodement ne
s’applique qu’une seule fois, il convient d’adjoindre l’instruction
\once
à la commande \set
ou \unset
:
c''4 \once \set fontSize = #4.7 c''4 c''4
Ici le changement de taille est annulé aussitôt après la note concernée.
La référence des propriétés internes contient une description exhaustive de toutes les propriétés, contexte par contexte : voir Tunable context properties.
Voir aussi
Manuel de notation : Compression de mesures vides.
Référence des propriétés internes : Tunable context properties.