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

### 5.3.2 La commande `\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 là le rôle de la commande `\set`.

>     \set contexte.propriété = #valeur

Ainsi :

>     R1*2
>     \set Score.skipBars = ##t
>     R1*2

Cette commande permet de condenser les mesures vides de notes, en des silences multimesures. 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.

Ce changement étant appliqué « à la volée », il n’affecte que le second groupe de notes.

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`. Dans l’exemple suivant,

>     c8 c c c
>     \set autoBeaming = ##f
>     c8 c c c

aucun argument contexte n’a été donné à la commande `\set`. De ce fait, les ligatures automatiques sont désactivées dans le contexte actuel, c’est-à-dire Voice. 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`, et 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 modifé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é à été définie dans ce contexte précis ; ainsi,

>     \set Staff.autoBeaming = ##f

même s’il s’applique à tous les contextes `Voice` contenus dans le contexte `Staff`, ne peut être annulé au niveau `Voice`. Le code suivant sera sans effet.

>     \unset Voice.autoBeaming

En d’autres termes, la commande `\unset` doit impérativement être accompagnée du même contexte que la commande `\set` d’origine. Pour annuler l’effet, dans notre exemple, de `Staff.autoBeaming = ##f`, il faut donc entrer :

>     \unset Staff.autoBeaming

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 sont équivalentes.

>     \set Voice.autoBeaming = ##t
>     \set autoBeaming = ##t

Pour modifier une propriété de façon à ce qu’elle ne s’applique qu’une seule fois, il convient d’employer la commande `\once` :

>     c4
>     \once \set fontSize = #4.7
>     c4
>     c4

Ici le changement de taille est annulé aussitôt après la note concernée.

La référence du programme contient une description exhaustive de toutes les propriétés contexte par contexte : voir Tunable context properties.

Autres langues : English, deutsch, español, 日本語.

#### LilyPond — Manuel de notation