1.8.3 Fontes

La gestion des fontes dans LilyPond 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.

Ce chapitre indique comment accéder aux fontes et polices de caractère dans LilyPond. Vous y apprendrez aussi comment changer de fonte en cours de partition.


Localisation des fontes

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

#(ly:font-config-add-font "chemin/au/fichier-fonte")
#(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.

L’instruction #(ly:font-config-display-fonts) permettra de vérifier que la fonte requise est bien détectée par FontConfig. Elle affiche en console la liste exhaustive des fontes du système ainsi que le nom exact qu’il faudra transmettre à LilyPond ; ce nom peut être différent du nom du fichier.

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.


Familles de fontes

Vous disposez de trois familles de fontes1 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). En fonction du moteur de rendu utilisé, ces familles seront mappées selon des alias différents.

Pour le moteur svg :

Famille génériqueFamille de fonte SVG
romanserif
sanssans-serif
typewritermonospace

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

Pour les autres moteurs :

Famille génériqueFonte par défaut (alias)Listes de définition des alias
romanLilyPond SerifC059, Century SchoolBook URW, Century Schoolbook L, TeX Gyre Schola, DejaVu Serif, …, serif
sansLilyPond Sans SerifNimbus Sans, Nimbus Sans L, TeX Gyre Heros, DejaVu Sans, …, sans-serif
typewriterLilyPond MonospaceNimbus Mono PS, Nimbus Mono, Nimbus Mono L, TeX Gyre Cursor, DejaVu Sans Mono, …, monospace

Lorsqu’un caractère est absent de la première fonte listée, il sera remplacé par celui de la fonte suivante.

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’ qui se trouve normalement dans le répertoire ‘/usr/local/share/lilypond/2.24.4/fonts’.

Chaque famille dispose en principe de différents styles et niveaux de graisse. 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.TextMark.font-family = #'typewriter
\textMark "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

[image of music]

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

[image of music]


Fonctionnalités des fontes

Le recours aux fontes OpenType permet d’utiliser certaines fonctionnalités de ces fontes.2 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 », autrement dit le style romain de la famille.

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

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

\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 : εφπρθ } }

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

[image of music]

Une liste exhaustive des fonctionnalités des fontes OpenType est disponible à l’adresse https://www.microsoft.com/typography/otspec/featurelist.htm, et les différents types de fonctionnalités des fontes OpenType sont recensés dans le message https://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

La plupart des fontes installées sur le système et reconnues par FontConfig peuvent s’utiliser dans une partition, à l’exception des polices bitmap – qui ne sont pas supportées de par leur conception – et les OpenType Variation Fonts (non prises en charge à ce jour).

LilyPond appelle la fonction pango_font_description_from_string de la bibliothèque Pango pour accéder aux fontes ; elle utilise la forme syntaxique suivante pour le nom des fontes.3

[family-list] [style-options]

family-list est une liste, dont le séparateur est la virgule, des familles éventuellement terminée par une virgule, et style-options une liste, dont le séparateur est l’espace, de mots dont chacun désigne un style, une variante, une graisse, une chasse, ou une orientation.

Les termes suivants sont considérés comme des styles : Normal (par défaut), Roman, Oblique, Italic.

Les termes suivants sont considérés comme des variantes : Small-Caps. Il n’y a pas de variante par défaut.

Les termes suivants sont considérés comme des graisses : Thin, Ultra-Light, Extra-Light, Light, Semi-Light, Demi-Light, Book, Regular (the default), Medium, Semi-Bold, Demi-Bold, Bold, Ultra-Bold, Extra-Bold, Heavy, Black, Ultra-Black, Extra-Black.

Les termes suivants sont considérés comme des valeurs de chasse : Ultra-Condensed, Extra-Condensed, Condensed, Semi-Condensed, Semi-Expanded, Expanded, Extra-Expanded, Ultra-Expanded. Il n’y a pas d’étirement par défaut.

Les termes suivants sont considérés comme des valeurs d’orientation : Not-Rotated, South, Upside-Down, North, Rotated-Left, East, Rotated-Right, West. Il n’y a pas d’orientation par défaut.

Partant du principe que la syntaxe est correcte, déterminer le nom d’une police n’échoue jamais. Si aucune famille de fonte n’est reconnue (ou aucune famille n’a été donnée), FontConfig renvoie une fonte par défaut dépendant du système. Si aucune option de style n’est reconnue (ou aucune option de style n’a été spécifiée), seront utilisées les valeurs par défaut.

Dans l’exemple qui suit, la fonte de la métrique est déterminée à « Bitstream Charter ». Dans la mesure où aucun style n’est spécifié, FontConfig utilisera les valeurs par défaut comme vu ci-dessus. Pour la chaîne de markup sont demandées les familles « Bitstream Vera Sans » et « sans-serif », ce qui indique à FontConfig de rechercher en premier « Bitstream Vera Sans » et, si elle n’est pas disponible, de se reporter sur une famille « sans-serif » générique comme indiqué dans Familles de fontes. Le style du markup est défini à « Oblique Bold » ; FontConfig tentera donc de trouver une fonte qui soit à la fois penchée et grasse. Si elle échoue, elle tentera de trouver soit une fonte penchée, soit une fonte grasse. Si elle échoue à nouveau, elle essaiera une fonte répondant aux options de style par défaut.

Notez bien que FontConfig vérifie aussi la présence du glyphe requis dans la fonte demandée. Dans le cas où il y serait absent, sera essayée une autre fonte, toujours selon le même algorithme, jusqu’à ce qu’elle trouve le glyphe en question. Dans l’éventualité où FontConfig ne trouve nulle part le glyphe approprié, sera affiché un symbole de glyphe absent – habituellement un rectangle ou un simple espace blanc.

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

[image of music]

Note : Dès lors que l’une des options stylistiques mentionnées ci-dessus fait partie du nom de la (famille) fonte, il est impératif de faire suivre ce nom d’une virgule même si aucun style n’est défini. L’exemple typique est « Times New Roman » : spécifier "Times New Roman" fera rechercher à FontConfig une police « Times New » de style roman, et c’est seulement si est libellé "Times New Roman," que cette police sera réellement accédée.

Lancer lilypond en ligne de commande 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, Localisation des fontes, Familles de fontes.

Morceaux choisis : Texte.


Choix des fontes par défaut

On peut tout à fait modifier le jeu de polices par défaut de LilyPond grâce à un appel de la fonction make-pango-font-tree. Il vous faudra alors spécifier les différentes familles, en respectant l’ordre roman, sans empattement et monospace, ainsi qu’un facteur d’échelle. 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.4

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

Dans l’exemple suivant, les fontes seront mises à l’échelle de la taille globale des portées.

\paper  {
  #(define fonts
    (make-pango-font-tree "Linux Libertine O"
                          "Nimbus Sans, Nimbus Sans L"
                          "DejaVu Sans Mono"
                          (/ staff-height pt 20)))
}

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

[image of music]

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 n’est pas nécessaire.

\paper {
  #(define fonts
    (set-global-fonts
     #:roman "Linux Libertine O"
     #:sans "Nimbus Sans, Nimbus Sans L"
     #:typewriter "DejaVu Sans 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 "Linux Libertine O"
     #:sans "Nimbus Sans, Nimbus Sans L"
     #:typewriter "DejaVu Sans 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.5 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, Familles de fontes, Localisation des fontes, Sélection de la fonte et de la taille.


Fontes musicales

En matière de fontes musicales, LilyPond ne recourt ni à FontConfig, ni à Pango, mais les gère directement. Par voie de conséquence, l’interface est différente. Cette section décrit la manière d’insérer des symboles musicaux en mode markup.

Les fontes de notation musicale sont des ensembles de glyphes accessibles selon divers encodages. La syntaxe suivante permet d’accéder aux différents glyphes Emmentaler6 directement en mode markup :

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

[image of music]

Néanmoins, tous ces glyphes, à l’exception des accolades de différente taille, sont disponibles selon une syntaxe plus simple, indiquée dans Notation musicale dans du texte formaté.

Lorsque l’on accède aux accolades avec l’encodage « fetaBraces », la taille de l’accolade est spécifiée par la partie numérique du nom de glyphe, en unité arbitraire. Il s’agit d’un entier, de 0 à 575 inclus, zéro procurant la plus petite accolade. La valeur optimale s’obtient par tâtonnement. Ces glyphes sont tous des accolades gauche (ouvrantes) ; une accolade droite (fermante) s’obtient par rotation voir Rotation des objets.


Notes de bas de page

[1] Dans sa forme la plus simple, une famille de fonte contient habituellement les styles de police romain, italique, gras et gras italique.

[2] La sélection de scripts ou de langages des fontes OpenType n’est à ce jour par prise en charge.

[3] La donnée est issue des références de la version 1.46.1 de Pango ; la syntaxe prise en charge par LilyPond est en fait un sous-ensemble de ce que Pango procure.

[4] Ce qui a pour conséquence que, contrairement au cas d’une fonte particulière, aucune virgule terminale n’est nécessaire.

[5] Pour être plus précis, « emmentaler » (avec un « e » minuscule en argument à #:music et #:brace) constitue un jeu de fontes – et non une famille de fonte au sens de FontConfig – auquel LilyPond a accès et gère directement. Au lieu de plusieurs styles, elle est toutefois fournie dans différentes tailles – voir Fontes musicales et Changement des fontes musicales. Les noms de fonte, pour FontConfig, sont « Emmentaler-taille », où taille est un nombre entre 11, 13, 14, 16, 18, 20, 23 et 26.

Pour ce qui est des accolades, le nom de la fonte pour FontConfig est « Emmentaler-Brace ».

[6] Les fontes Emmentaler de LilyPond disposent de trois jeux de glyphes : Feta pour la notation moderne, Parmesan pour la notation ancienne, et des accolades (braces en anglais). Feta et Parmesan sont toutes deux accesssibles avec l’encodage « fetamusic ».


LilyPond — Manuel de notation v2.24.4 (branche stable).