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

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

[image of music]

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
}

[image of music]

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

[image of music]

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
}

[image of music]

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'
}

[image of music]


GNU LilyPond – Manuel de notation v2.25.21 (branche de développement).