5.3.2 Les commandes \set
et \unset
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
qui répond à la syntaxe :
\set contexte.propriété = valeur
où valeur doit être précédée d’un ‘#’ si elle est un objet Scheme.
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.
Ainsi la propriété de contexte skipBars
permet de condenser les
mesures vides de notes, en des silences multimesures –
see Compression de mesures vides – dès lors qu’elle est valorisée
à #t
:
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
,
TabVoice
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 }
Notez que le contexte le plus restreint peut ne pas contenir le graveur
contenant 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.
Tous les contextes héritent des réglages établis au plus haut niveau
dans le contexte Global
via \grobdescriptions
. Certains de
ces réglages par défaut font toutefois l’objet de dérogation dans la
définition de contextes particuliers.
\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
.
Comme indiqué ci-dessus, \unset
restaure la valeur par défaut
d’une propriété de contexte. Néanmoins, il est parfois utile de
temporairement modifier une valeur puis de revenir à la précédente. Les
deux commandes \pushContextProperty
et \popContextProperty
sont prévues à cet effet : la première insère la valeur courante dans
une pile et définit une nouvelle valeur, alors que la seconde suprime
cette valeur de la pile et restaure la valeur initale.
{ c' \pushContextProperty Staff.fontSize 3 c' \pushContextProperty Staff.fontSize 6 c' \popContextProperty Staff.fontSize c' \popContextProperty Staff.fontSize c' }