1.2.8 Le modèle de boîte de LilyPond (GNU LilyPond – Extension des fonctionnalités)

#### 1.2.8 Le modèle de boîte de LilyPond

Le modèle de boîte « classique » pour du texte – tel qu’en vigueur par exemple chez TeX – comporte les trois dimensions largeur, hauteur et profondeur: les glyphes sont positionnés sur une ligne de base horizontale de texte ; la hauteur d’un glyphe est l’empan vertical au-dessus de cette ligne, la profondeur l’empan au-dessous de cette ligne et la largeur représente l’étendue horizontale de ce glyphe. LilyPond y ajoute une quatrième dimension, breapth,1 pour étendre la taille horizontale quelque peu sur la gauche du « point de référence » du glyphe, noté « (0, 0) » dans l’image ci-dessous. La raison principale à cette extension tient au fait que de nombreux glyphes, tel que le point d’orgue, ont une symétrie horizontale (et sont aussi attachés symétriquement à une tête de note) et que le meilleur point de référence de tels glyphes est par conséquent le centre horizontal. D’autres glyphes, comme par exemple l’altération de quart de ton présent sur la gauche de l’image, disposent quant à eux d’un breapth considérable.

Comme l’indique le glyphe de guidon sur la droite de l’image, la boîte définie pour un glyphe diffère souvent et de façon considérable avec ce qui est en fait imprimé : LilyPond positionne le côté droit du glyphe de guidon à la fin d’une portée, faisant dépasser la ligne d’extension à droite dans la marge.

Ce modèle de boîte sert non seulement aux glyphes musicaux de LilyPond, mais aussi pour les markups quelle qu’en soit la nature. Les dimensions, tant horizontale que verticale, sont spécifiées en terme d’étendue ; utilisant la notation Scheme, le glyphe de gauche dans l’image ci-dessus a une étendue horizontale de `#'(-9 . 26)` et une étendue verticale de `#'(-10 . 29)`.

LilyPond utilise aussi quelques extensions au modèle de boîte afin de couvrir certains cas particuliers.

- Lorsqu’une boîte de devrait pas intervenir dans l’algorithme d’espacement de la musique sur un axe donné, l’étendue sur cet axe est fixé à la valeur de `#'(+inf.0 . -inf.0)` qui ailleurs serait absurde, aussi disponible en tant que symbole `empty-interval`.
- En matière de markup, l’espacement, qui normalement déclenche un déplacement horizontal ou vertical de l’objet qui suit dans le markup, est aussi fixé de manière interne en tant que boîte : l’étendue sur l’axe orthogonal est définie à `empty-interval` en tant que marqueur, et une valeurs d’espacement est représentée par l’étendue `#'(0 . s)`. Contrairement aux boîtes « normales », l’espacement peut aussi être négatif : par exemple, l’étendue horizontale de la commande de markup `\hspace #-4` est `#'(0 . -4)`.

#### Footnotes

##### (1)

Il s’agit d’un terme inventé, dérivé du mot anglais « breadth » (ampleur, laize) et qui est un proche synonyme de « largeur ».

#### GNU LilyPond – Extension des fonctionnalités v2.26.0 (stable-branch).

- 1 Tutoriel Scheme
  - 1.1 Introduction à Scheme
    - 1.1.1 Le bac à sable de Scheme
    - 1.1.2 Scheme et les variables
    - 1.1.3 Types de données Scheme simples
    - 1.1.4 Types de données Scheme composites
      - Paires
      - Listes
      - Listes associatives (alists)
      - Tables de hachage
    - 1.1.5 Scheme et les calculs
    - 1.1.6 Scheme et les procédures
      - Définition de procédures
      - Prédicats
      - Valeurs de retour
    - 1.1.7 Scheme et les conditions
      - if
      - cond
  - 1.2 Scheme et LilyPond
    - 1.2.1 Syntaxe Scheme dans LilyPond
    - 1.2.2 Variables LilyPond
    - 1.2.3 Débogage de code Scheme
    - 1.2.4 Saisie de variables et Scheme
    - 1.2.5 Import de code Scheme dans LilyPond
    - 1.2.6 Propriétés des objets
    - 1.2.7 Variables LilyPond composites
      - Décalages (offsets)
      - Fractions
      - Étendues (extents)
      - Propriété en alist
      - Chaînes d’alist
    - 1.2.8 Le modèle de boîte de LilyPond
    - 1.2.9 Représentation interne de la musique
  - 1.3 Construction de fonctions complexes
    - 1.3.1 Première approche (exemple)
    - 1.3.2 Affichage d’expressions musicales
    - 1.3.3 Propriétés musicales
    - 1.3.4 Doublement d’une note avec liaison (exemple)
    - 1.3.5 Ajout d’articulation à des notes (exemple)
- 2 Interfaces pour programmeurs
  - 2.1 Blocs de code LilyPond
  - 2.2 Fonctions Scheme
    - 2.2.1 Définition de fonctions Scheme
    - 2.2.2 Utilisation de fonctions Scheme
    - 2.2.3 Fonctions Scheme fantômes
  - 2.3 Fonctions musicales
    - 2.3.1 Définition de fonctions musicales
    - 2.3.2 Utilisation de fonctions musicales
    - 2.3.3 Fonctions de substitution simple
    - 2.3.4 Fonctions de substitution intermédiaires
    - 2.3.5 De l’usage des mathématiques dans les fonctions
    - 2.3.6 Fonctions dépourvues d’argument
    - 2.3.7 Fonctions musicales fantômes
  - 2.4 Fonctions événementielles
  - 2.5 Fonctions pour markups
    - 2.5.1 Construction d’un markup en Scheme
    - 2.5.2 Fonctionnement interne des markups
    - 2.5.3 Définition d’une nouvelle commande de markup
      - Syntaxe d’une commande markup
      - Attribution de propriétés
      - Exemple commenté
      - Adaptation d’une commande incorporée
      - Conversion de markups en chaînes
    - 2.5.4 Définition d’une nouvelle commande de liste de markups
  - 2.6 Contextes pour programmeurs
    - 2.6.1 Évaluation d’un contexte
    - 2.6.2 Application d’une fonction à tous les objets de mise en forme
  - 2.7 Fonctions de rappel
  - 2.8 Conteneurs requalifiants
  - 2.9 Retouches complexes
- 3 Interfaces LilyPond Scheme
- Appendix A GNU Free Documentation License
- Appendix B Index