GNU LilyPond – Extension des fonctionnalités: 1.2.7 Variables LilyPond composites

### 1.2.7 Variables LilyPond composites

#### Décalages (offsets)

Les décalages (offset) sur deux axes (coordonnées X et Y) sont stockés sous forme de paires. Le `car` de l’offset correspond à l’abscisse (coordonnée X) et le `cdr` à l’ordonnée (coordonnée Y).

>     \override TextScript.extra-offset = #'(1 . 2)

Cette clause affecte la paire `(1 . 2)` à la propriété `extra-offset` de l’objet `TextScript`. Ces nombres sont exprimés en espace de portée. La commande aura donc pour effet de déplacer l’objet d’un espace de portée vers la droite, et de deux espaces vers le haut.

Les procédures permettant de manipuler les offsets sont regroupées dans le fichier ‘`scm/lily-library.scm`’.

#### Fractions

Les fractions, telles que LilyPond les utilise, sont aussi stockées sous forme de paire. Alors que Scheme est tout à fait capable de représenter des nombres rationnels, vous conviendrez que, musicalement parlant, ‘`2/4`’ et ‘`1/2`’ ne se valent pas ; nous devrons donc pouvoir les distinguer. Dans le même ordre d’idée, LilyPond ne connaît pas les « fractions » négatives. Pour ces raisons, `2/4` en LilyPond correspond à `(2 . 4)` en Scheme, et `#2/4` en LilyPond correspond à `1/2` en Scheme.

#### Étendues (extents)

Les paires permettent aussi de stocker des intervalles qui représentent un ensemble de nombres compris entre un minimum (le `car`) et un maximum (le `cdr`). Ces intervalles stockent l’étendue, tant au niveau horizontal (X) que vertical (Y) des objets imprimables. En matière d’étendue sur les X, le `car` correspond à la coordonnée de l’extrémité gauche, et le `cdr` à la coordonnée de l’extrémité droite. En matière d’étendue sur les Y, le `car` correspond à la coordonnée de l’extrémité basse, et le `cdr` à la coordonnée de l’extrémité haute.

Les procédures permettant de manipuler les offsets sont regroupées dans le fichier ‘`scm/lily-library.scm`’. Nous vous recommandons l’utilisation de ces procédures dans toute la mesure du possible afin d’assurer la cohérence du code.

#### Propriété en alist

Les propriétés en alist sont des structures de données particulières à LilyPond. Il s’agit de listes associatives dont les clés sont des propriétés et les valeurs des expressions Scheme fournissant la valeur requise pour cette propriété.

Les propriétés LilyPond sont des symboles Scheme, à l’instar de `'thickness`.

#### Chaînes d’alist

Une chaîne d’alist est une liste contenant les listes associatives d’une propriété.

L’intégralité du jeu de propriétés qui doivent s’appliquer à un objet graphique est en fait stocké en tant que chaîne d’alist. Afin d’obtenir la valeur d’une propriété particulière qu’un objet graphique devrait avoir, on examinera chacune des listes associatives de la chaîne, à la recherche d’une entrée contenant la clé de cette propriété. Est renvoyée la première entrée d’alist trouvée, sa valeur étant la valeur de la propriété.

L’obtention des valeurs de propriété des objets graphiques se réalise en principe à l’aide de la procédure Scheme `chain-assoc-get`.

#### LilyPond — Extension des fonctionnalités v2.24.4 (branche stable).