GNU LilyPond – Manuel de notation: 5.3.2 La commande de fixation \set

### 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.

#### LilyPond — Manuel de notation v2.22.2 (branche stable).