GNU LilyPond – Manuel de notation: 1.8.3 Fontes

### 1.8.3 Fontes

Ce chapitre est consacré aux fontes et polices de caractère, à leur gestion. Vous y apprendrez aussi comment changer de fonte en cours de partition.

#### Tout savoir sur les fontes

La gestion des fontes est assurée par plusieurs bibliothèques : FontConfig se charge de répertorier les différentes fontes disponibles ; quant à Pango, elle se charge plus particulièrement de leur rendu.

En sus de celles déjà installées sur le système, d’autres fontes peuvent s’ajouter au répertoire de FonConfig, ce qui les rendra donc disponibles pour les partitions LilyPond, à l’aide des commandes suivantes :

>     #(ly:font-config-add-font "chemin/au/fichier-fonte.otf")

>     #(ly:font-config-add-directory "chemin/au/dossier/")

Le chemin fourni à ces deux commandes peut être absolu ou relatif, ce qui permet de compiler une partition sur n’importe quel système dans la mesure où les fichiers de fontes concernés sont transmis avec les fichiers sources de la partition.

Une fois qu’elles ont été détectées, les fontes se sélectionnent selon les méthodes indiquées dans Attribution d’une fonte en particulier et Choix des fontes par défaut. Dès lors que la liste affichée est exhaustive, l’instruction `#(ly:font-config-display-fonts)` permettra de vérifier quelles fontes auront été détectées ainsi que leur nom exact, celui-ci pouvant être différent du nom du fichier.

Les fontes musicales peuvent se décrire comme un jeu de glyphes spécifiques regroupés dans plusieurs familles. L’exemple qui suit montre la syntaxe à utiliser pour accéder, en mode markup, aux différents glyphes `Feta` non textuels de LilyPond.

>     a'1^\markup {
>       \vcenter {
>         \override #'(font-encoding . fetaBraces)
>         \lookup "brace120"
>         \override #'(font-encoding . fetaText)
>         \column { 1 3 sf }
>         \override #'(font-encoding . fetaMusic)
>         \lookup "noteheads.s0petrucci"
>       }
>     }

Tous ces glyphes, à l’exception des accolades qui sont regroupées dans `fetaBraces`, sont accessibles avec la syntaxe indiquée dans Notation musicale dans du texte formaté.

Une remarque s’impose au sujet des glyphes contenus dans `fetaBraces` : chacun d’eux est formé du mot brace auquel est accolé un numéro d’ordre. Lorsque vous désirez imprimer une accolade, vous devez la « chercher » par son numéro d’ordre – d’où la fonction `\lookup` de l’exemple ci-dessus –, tout en sachant qu’il est compris entre `0` (la plus petite) et `575` (la plus grande). Vous serez souvent amené à procéder par tâtonnement pour arriver au résultat optimal. Par ailleurs, `fetaBraces` ne comporte que des accolades ouvrantes. Pour obtenir une accolade fermante, il suffit d’appliquer une rotation au glyphe sélectionné, comme indiqué à la rubrique Rotation des objets.

Vous disposez de trois familles de fontes textuelles : roman pour la police sérif ou avec empattement, une police sans empattement (sans sérif) et une police à chasse fixe (monospace ou typewriter).

Pour le moteur `svg` :

Famille | Fonte par défaut
--- | ---
roman | `serif`
sans | `sans-serif`
typewriter | `monospace`

`serif`, `sans-serif` et `monospace` sont des `generic-family` au titre des spécifications SVG et CSS.

Pour les autres moteurs :

Famille | Fonte par défaut (alias) | Listes de définition des alias
--- | --- | ---
roman | `LilyPond Serif` | C059, Century SchoolBook URW, Century Schoolbook L, TeX Gyre Schola, DejaVu Serif, ..., serif
sans | `LilyPond Sans Serif` | Nimbus Sans, Nimbus Sans L, TeX Gyre Heros, DejaVu Sans, ..., sans-serif
typewriter | `LilyPond Monospace` | Nimbus Mono PS, Nimbus Mono, Nimbus Mono L, TeX Gyre Cursor, DejaVu Sans Mono, ..., monospace

Il est à noter que les fontes URW distribuées avec LilyPond (« C059 », « Nimbus Mono PS » et « Nimbus Sans ») disposent d’une particularité : par défaut, et en complément des ligatures standard telles que « fl » ou « ffi », elles substituent la chaîne « Nr. » par le caractère « Numero Sign » (U+2116) dès lors que le script « latn » est sélectionné. On peut toutefois s’en préserver temporairement par l’insertion d’un caractère de largeur nulle et non jointant (zero-width non-joiner ZWNJ, U+200C) entre les caractères « N » et « r ». Les lignes ci-dessous auront pour conséquence que LilyPond insérera toujours un caractère ZWNJ.

>     \paper {
>       #(add-text-replacements!
>           `(("Nr." . ,(format #f "N~ar." (ly:wide-char->utf-8 #x200C)))))
>     }

`LilyPond Serif`, `LilyPond Sans Serif` et `LilyPond Monospace` sont des alias de fonte définis dans le fichier de configuration de FontConfig spécifique à LilyPond `00-lilypond-fonts.conf`. Lorsqu’un caractère est absent de la première fonte listée, il sera remplacé par celui de la fonte suivante. Pour plus de détails sur les définitions des alias, consultez le fichier `00-lilypond-fonts.conf` dans le répertoire d’installation.

Chaque famille dispose en principe de différents styles et niveaux de gras. L’exemple qui suit illustre la manière de changer la famille, le style, la graisse ou la taille. Notez bien que l’argument fourni à `font-size` correspond à la correction à apporter à la taille par défaut.

>     \override Score.RehearsalMark.font-family = #'typewriter
>     \mark \markup "Ouverture"
>     \override Voice.TextScript.font-shape = #'italic
>     \override Voice.TextScript.font-series = #'bold
>     d''2.^\markup "Allegro"
>     \override Voice.TextScript.font-size = #-3
>     c''4^smaller

Cette syntaxe s’applique aussi en mode markup, bien que celui-ci dispose d’une syntaxe allégée comme nous l’avons vu dans Sélection de la fonte et de la taille :

>     \markup {
>       \column {
>         \line {
>           \override #'((font-shape . italic) (font-size . 4))
>           Idomeneo,
>         }
>         \line {
>           \override #'(font-family . typewriter)
>           {
>             \override #'(font-series . bold)
>             re
>             di
>           }
>           \override #'(font-family . sans)
>           Creta
>         }
>       }
>     }

Le recours aux fontes OpenType permet d’utiliser certaines fonctionnalités de ces fontes. Toutefois, les fontes OpenType ne disposent pas toutes de l’intégralité de ces fonctionnalités. Dans le cas où la fonctionnalité demandée n’est pas disponible dans la fonte choisie, cette fonctionnalité est tout bonnement ignorée. Les exemples ci-dessous utilisent TeX Gyre Schola.

>     % Vraies petites capitales
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               Style normal : Hello HELLO }
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \caps { Petites capitales : Hello } }
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \override #'(font-features . ("smcp"))
>               { Vraies petites capitales : Hello } }

>     % Styles numériques
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               Style numérique normal : 0123456789 }
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \override #'(font-features . ("onum"))
>               { Style numérique ancien : 0123456789 } }

>     % Alternatives stylistiques
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \override #'(font-features . ("salt 0"))
>               { Alternative stylistique 0 : εφπρθ } }
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \override #'(font-features . ("salt 1"))
>               { Alternative stylistique 1 : εφπρθ } }

>     % Fonctionnalités multiples
>     \markup { \override #'(font-name . "TeX Gyre Schola")
>               \override #'(font-features . ("onum" "smcp" "salt 1"))
>               { Fonctionnalités multiples : Hello 0123456789 εφπρθ } }

Une liste exhaustive des fonctionnalités des fontes OpenType est disponible à l’adresse https://www.microsoft.com/typography/otspec/featurelist.htm

Les différents types de fonctionnalité des fontes OpenType sont recensées dans le message http://lists.gnu.org/archive/html/lilypond-devel/2017-08/msg00004.html

En plus de pouvoir jongler entre les différentes fontes prédéfinies, LilyPond vous permet d’en utiliser d’autres, ce qui fait l’objet des deux prochaines parties : Attribution d’une fonte en particulier et Choix des fontes par défaut.

#### Voir aussi

Manuel de notation : La fonte Emmentaler, Notation musicale dans du texte formaté, Rotation des objets, Sélection de la fonte et de la taille, Fonte.

#### Attribution d’une fonte en particulier

Vous pouvez utiliser n’importe quelle police installée sur votre système, dès lors qu’elle est accessible par Fontconfig et que vous respectez la syntaxe suivante :

>     \override Staff.TimeSignature.font-name = "Bitstream Charter"
>     \override Staff.TimeSignature.font-size = #2
>     \time 3/4

>     a'1_\markup {
>       \override #'(font-name .
>                    "Bitstream Vera Sans,sans-serif, Oblique Bold")
>         { Vera Oblique Bold }
>     }

font-name peut se décrire sous la forme d’une liste de polices séparées par une virgule, une espace et une liste de styles. Dès lors que la police présente dans la liste est installée et comporte le glyphe requis, elle sera utilisée ; c’est la suivante dans la liste qui sera utilisée dans le cas contraire.

LilyPond, lancé avec l’option suivante, affiche la liste de toutes les polices disponibles sur votre machine :

>     lilypond -dshow-available-fonts

#### Voir aussi

Manuel de notation : Choix des fontes par défaut, Tout savoir sur les fontes.

Morceaux choisis : Texte.

#### Choix des fontes par défaut

Vous pouvez tout à fait préférer un autre jeu de polices par défaut que celui de LilyPond. Il vous faudra alors spécifier les différentes familles, en respectant l’ordre roman, sans empattement et monospace, comme dans l’exemple suivant ; ces fontes seront automatiquement mises à l’échelle de la taille globale des portées. Tout comme indiqué dans Attribution d’une fonte en particulier, il peut s’agir d’une liste de polices séparées par une virgule, à ceci près qu’il n’est pas possible de spécifier de style. Pour plus d’explications sur les fontes, relisez Tout savoir sur les fontes.

>     \paper  {
>       #(define fonts
>         (make-pango-font-tree "Times New Roman"
>                               "Nimbus Sans,Nimbus Sans L"
>                               "Luxi Mono"
>                                (/ staff-height pt 20)))
>     }

>     \relative c'{
>       c1-\markup {
>         roman,
>         \sans sans,
>         \typewriter typewriter. }
>     }

Note : `make-pango-font-tree` réinitialise les fontes musicales à leur valeur par défaut, à savoir Emmentaler.

La syntaxe suivante permet de substituer une fonte particulière tout en laissant les autres à leur valeur par défaut. L’exemple ci-dessous produit les mêmes effets que celui utilisant `make-pango-font-tree`. De même qu’avec `make-pango-font-tree`, il est possible de fournir une liste de fontes séparées par une virgule pour les catégories `roman`, `sans` et `typewriter`. Dès lors que la taille de portée reste à sa valeur par défaut de 20 pt, l’instruction `#:factor (/ staff-height pt 20)` n’est pas nécessaire.

>     \paper {
>       #(define fonts
>         (set-global-fonts
>          #:roman "Times New Roman"
>          #:sans "Nimbus Sans,Nimbus Sans L"
>          #:typewriter "Luxi Mono"
>          ; inutile si taille de portée par défaut
>          #:factor (/ staff-height pt 20)
>         ))
>     }

Il est aussi posible de substituer les fontes musicales. L’exemple ci-dessous produit les mêmes effets que ceux qui précèdent dans la mesure où les fontes musicales sont fixées à leur valeur par défaut. Pour de plus amples informations, voir Changement des fontes musicales.

>     \paper {
>       #(define fonts
>         (set-global-fonts
>          #:music "emmentaler"            ; défaut
>          #:brace "emmentaler"            ; défaut
>          #:roman "Times New Roman"
>          #:sans "Nimbus Sans,Nimbus Sans L"
>          #:typewriter "Luxi Mono"
>          ; inutile si taille de portée par défaut
>          #:factor (/ staff-height pt 20)
>         ))
>     }

En tout état de cause, tout appel à `set-global-fonts` réinitialise aussi bien les fontes musicales que les fontes textuelles. Dès lors que l’une de ces catégories n’est pas mentionnée sera utilisée la fonte par défaut y afférente.
Par ailleurs, chaque appel à `set-global-fonts` affecte les fontes du bloc `\book` qui le suit ; chaque bloc `\book` consécutif peut donc disposer de son propre jeu de fontes grâce à un simple appel à `set-global-fonts`, comme ici :

>     \paper {
>       #(define fonts
>         (set-global-fonts
>          …
>         ))
>     }
>     \book {
>       …
>     }

>     \paper {
>       #(define fonts
>         (set-global-fonts
>          …
>         ))
>     }
>     \book {
>       …
>     }

#### Voir aussi

Manuel de notation : Attribution d’une fonte en particulier, Fonte, Changement des fontes musicales, Sélection de la fonte et de la taille, Tout savoir sur les fontes.

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