Réglages de Fontconfig

Aperçu de Fontconfig

Si vous lisez des textes seulement en anglais et êtes contents avec les polices libres génériques listés dans la page suivante, vous pourriez n'avoir jamais besoin de vous occuper des détails de fonctionnement de Fontconfig. Mais il y a plein de choses qui peuvent être modifiées si elles ne vous conviennent pas.

Bien que cette page soit longue, elle ne fait qu'effleurer la surface et vous pourrez trouver plein d'alternatives sur le web (mais rappelez-vous que certaines choses changent au fil des ans, par exemple l'autohinter n'est plus utilisé par défaut). Le but est ici de vous donner assez d'information pour comprendre les changements que vous faîtes, pourquoi ils ne fonctionnent pas toujours et comment identifier des informations en ligne qui ne sont plus d'actualité.

Malheureusement, une partie de la terminologie est ambiguë (p. ex. « font face » (fonte) peut signifie un nom connu de Fontconfig, ou les variations normales, condensées, etc d'une police) et « style » peut être utilisé pour différencier les polices « ordinaires » et « italiques » ou pour décrire certaines classes de polices à empattement.

Les liens suivants aident la navigation dans cette page.

Le Protocole de Police Xft

Le protocole de police Xft fournit un rendu de polices anti-crénelé à travers freetype et les polices sont contrôlées depuis le côté client avec Fontconfig (sauf pour rxvt-unicode-9.31 qui peut utiliser les polices listées dans ~/.Xresources et AbiWord-3.0.5 qui n'utilise que les polices spécifiées). Le chemin de recherche par défaut est /usr/share/fonts et ~/.local/share/fonts bien que pour le moment le vieil emplacement obsolète ~/.fonts fonctionne toujours. Fontconfig recherche récursivement dans ces répertoires et maintient un cache des caractéristiques des polices dans chaque répertoire. Si le cache a l'air périmé, il est ignoré et les informations sont retrouvées depuis les polices elles-mêmes (ce qui peut prendre quelques secondes si vous avez installé beaucoup de polices).

Si vous avez installé Xorg dans un autre préfixe que /usr, les polices X n'ont pas été installées dans un répertoire connu de Fontconfig. Des liens symboliques ont été créés entre les répertoires de polices OTF et TTF de X et /usr/share/fonts/X11-{OTF,TTF} dans les polices Xorg. Cela permet à Fontconfig d'utiliser les polices OpenType et TrueType fournies par X, même si beaucoup de monde préférera utiliser des polices plus modernes.

Fontconfig utilise les noms pour définir les polices. Les applications utilisent en général des noms de polices génériques comme « Monospace », « Sans » et « Serif ». Fontconfig résout ces noms en une police dont les caractères couvrent toutes les possibilités de la langue indiquée par les paramètres régionaux.

Commandes utiles

Les commandes suivantes peuvent être utiles lorsque vous travaillez avec Fontconfig, en particulier si vous souhaitez remplacer les polices qui seront choisies.

fc-list | less : montre la liste des polices disponible (/chemin/vers/fichier : Nom de la police:style). Si vous avez installé une police et qu'elle n'apparaît pas, alors le répertoire qui la contient n'est pas lisible par votre utilisateur.

fc-match 'Font Name' : indique quelle police sera utilisée si la police de ce nom est demandée. Généralement vous l'utiliserez pour voir ce qui arrive si une police non-installée est demandée, mais vous pouvez aussi l'utiliser si le système utilise une police différente de ce à quoi vous vous attendiez (peut-être parce que Fontconfig ne pense pas que la police supporte votre langue).

fc-match Type : affiche les polices qui seront utilisées dans la langue actuelle pour ce TYPE (Monospace, Sans, Serif (la lettre majuscule au début est facultative)). Si cette police n'a pas un code de point, Fontconfig peut prendre un glyphe d'une autre police disponible, même si elle n'est pas du type spécifié. Toute autre valeur de TYPE sera considérée comme du Sans.

fc-match 'Serif :lang=ja:weight=bold' vous indiquera la police et la graisse utilisée pour le texte japonais en gras. Elle ne signifie pas que la police indiquée pourra nécessairement afficher les idéogrammes japonais, et donc une police secondaire pourrait être utilisée, ou certains glyphes pourraient manquer. Pour les codes de langue, utilisez les valeurs ISO-639 comme « fr », « ja » ou « zh-cn ». Remarquez qu'une valeur non reconnue comme simplement « zh » ne renverra aucune correspondance. Pour illustrer le fonctionnement des polices par défaut, sur un système où les polices Noto Sans Mono et DejaVu Sans Mono sont installées, fc-match 'monospace :lang=en montre que Noto Sans Mono sera utilisée, mais si la langue change en « ar » (arabe) DejaVu Sans sera utilisée.

Si vous voulez déterminer si un fichier de police a des hintings (de nombreuses polices anciennes n'en ont pas à cause d'un brevet), utilisez fc-query /chemin/vers/fichier-de-police | grep 'fonthashint:' : cela montrera « True(s) » ou « False(s) ». Certaines polices récentes avec des versions TTF et OTF auront le hinting dans le fichier TTF.

Si vous souhaitez connaître quelle police sera utilisée pour une chaîne de caractères (c'est-à-dire un ou plusieurs glyphes, séparés par un espace), copiez la commande suivante et remplacez xyz par le texte qui vous préoccupe.

FC_DEBUG=4 pango-view --font=monospace -t xyz | grep family : ceci requiert Pango-1.51.2 et ImageMagick-7.1.1-28 - qui va invoquer display pour afficher le texte dans une petite fenêtre, et à la fermeture, la dernière ligne de la sortie montrera quelle police d'écriture a été utilisée. C'est particulièrement pratique pour les langues CJK, et vous pouvez également passer un langage, ex: PANGO_LANGUAGE=en;ja (Anglais, puis présume Japonais) ou simplement zh-cn (ou d'autres variantes comme zh-sg ou zh-tw).

Les fichiers de configuration

Les fichiers principaux sont dans /etc/fonts/conf.d/. C'est un répertoire prévu pour être rempli de liens symboliques vers des fichiers dans /usr/share/fontconfig/conf.avail/, mais de nombreuses personnes, et quelques paquets, créent les fichiers directement. Chaque fichier doit être nommé comme suit : deux chiffres, un tiret, nom.conf et ils sont lus séquentiellement.

Par convention, les nombres sont assignés comme suit :

  • 00-09 répertoires de polices supplémentaires

  • 10-19 rendus systèmes par défaut (comme l'anti-crénelage)

  • 20-29 options de rendu des polices

  • 30-39 substitution par famille

  • 40-49 correspondance entre famille et type générique

  • 50-59 chargement des fichiers de configuration alternatifs

  • 60-69 alias génériques, fait correspondre les noms générique à la famille

  • 70-79 adapte quelles polices sont disponibles

  • 80-89 correspond aux numérisations (modification des modèles numérisés)

  • 90-99 synthèse de police

Vous pouvez avoir aussi un fichier fonts.conf personnel dans $XDG_CONFIG_HOME (c'est-à-dire ~/.config/fontconfig/).

Les règles de choix d'une police

Si la police demandée est installée, et à condition qu'elle contienne le point de code requis pour la langue actuelle (dans les sources, voir les fichiers .orth dans le répertoire fc-lang/), elle sera utilisée.

Cependant, si le document ou la page demande une police qui n'est pas installée (ou, parfois, ne contient pas tous les points de codes requis) les règles suivantes sont appliquées : en premier, 30-metric-aliases.conf est utilisé pour assigner des alias à certaines polices avec la même métrique (même taille, etc). Remarquez qu'il y a à la fois des alias forts et faibles si bien que les alias pour une forme comme Helvetica ou times New Roman peuvent être satisfaits par d'autres style, c.-à-d. tous les alias d'Arial ou Times dans ces exemples. Des exemples de polices latines avec les mêmes métriques se trouvent dans les PDF « Substitutes » de zarniwhoop.uk.

Ensuite, une police inconnue sera recherchée dans 45-latin.conf : « Latin » couvre le cyrillique et le grec, et maintenant aussi les polices pour l'interface système qui sont utilisées pour les messages de l'interface utilisateur dans d'autres systèmes d'écriture. Si la police est trouvée elle correspondra à serif, sans-serif, monospace, fantasy, cursive ou system-ui. Autrement, 49-sansserif.conf la considérera comme Sans.

Ensuite 60-latin.conf fournit des listes ordonnées de polices par défaut — polices Noto sera utilisée si vous les avez installées. Le cyrillique et le grec ont l'air d'être traités de la même manière. Tous ces fichiers préfèrent les polices commerciales si elles sont présentes, bien que les polices libres modernes sont souvent au moins égales. Enfin, si un code de point n'est toujours pas trouvé il peut être récupéré de n'importe quelle police du système disponible. Les détails suivants mentionnent seulement les polices disponibles librement.

Les polices perses sont traitées dans 65-fonts-persian.conf. Il semble que toutes les polices listées soient commerciales. Utiliser des polices qui prennent en charge le perse (qui a sa propre variante de l'alphabet arabe et ses propres styles de police) n'est pas dans les compétences des auteurs de BLFS.

Tous les autres systèmes d'écriture pour lesquels Fontconfig a une préférence (les écritures CJK, indiennes) sont traitées dans 65-nonlatin.conf. Elles sont également groupées en Serif, Sans-Serif, Monospace. Parmi les polices libres, WenQuanYi Zen Hei (Sans Pan-CJK) apparaît en premier pour Serif et Sans. Ainsi, si vous l'installez comme police par défaut mais voulez utiliser d'autres polices pour le japonais ou le coréen vous devrez définir une préférence. De même, l'ancienne police fireflysung Serif est listée dans les polices Sans.

Après les polices Pan-CJK et chinoises viennent plusieurs polices japonaises puis plusieurs polices coréennes (partagées correctement entre Sans et Serif). Enfin viennent les diverses familles Lohit indic (un fichier de police par écriture), partagées entre Sans et Serif.

Les polices à chasse fixe listées dans 65-nonlatin.conf ne contiennent pas WenQuanYi Zen Hei bien qu'elle soit disponible comme solution de repli si elle est installée. Plusieurs polices gothiques japonaise sont listées, suivies par AR PL KaitiM GB (une police « pinceau » zh-sc), des polices AR PL Serif pour zh-sc (SungtiL) et zh-tw (Mingti2L), des polices coréennes Sans et diverses familles indiennes Lohit.

Pour les polices d'interface, diverses polices Noto Sans UI sont les seules polices indiquées.

Les diverses polices Noto CJK ne se trouvent pas parmi les polices listées, sans doute parce que les développeurs de RedHat préfèrent d'autres polices. Elles proposent maintenant de nombreuses variantes et la plupart des utilisateurs qui les utilise n'installeront pas les autres polices CJK.

Avant Fontconfig-2.14, la première famille de polices latines était Bitsream Vera. En pratique elle était rarement utilisée parce qu'elle avait une mauvaise couverture. Après cela, DejaVu était la deuxième famille préférée, et on recommandait de l'installer. Cela a maintenant changé, Bitstream Vera a été remplacé par les polices Noto correspondantes (Serif, Sans, Sans Mono), donc elles seront préférées si elles sont installées, suivies par DejaVu.

Pour les polices à empattement, Times New Roman pourrait avoir été un alias pour liberation Serif ou tinos, et Times pour TeX Gyre Termes, donc bien que ces polices ne soient pas libres, des polices à métrique compatible peuvent être utilisées. En ignorant les autres polices non libres, l'ordre suivant pour serif est : Times New Roman, Luxi Serif, Nimbus Roman No9 L et Times. En pratique, cela signifie que ces polices à la fin de la liste seront peu probablement utilisées à moins qu'une page web ne les demande.

Pour les sans-serif, l'ordre suivant est tout ce qui correspond à Arial, Luxi Sans, Numbus Sans L et tout ce qui correspond à Helvetica.

Les alternatives restantes pour les polices à chasse fixe sont Incosolata, tout ce qui correspond à Courier New, Luxi Mono, Nimbus Mono et tout ce qui correspond à Courier.

Pour les polices fantaisistes, il n'y a aucune police libre, donc Fontconfig utilisera par défaut une police sans-serif.

Pour les polices cursives, la seule police libre est TeX Gyre Chorus qui est un alias de ITC Zapf chancery, sinon Fontconfig utilisera aussi par défaut une police sans-serif.

La catégorie system-ui est différente. Elle est dédiée aux messages de l'interface et certaines écritures ont besoin de versions spéciales pour rentrer dans l'espace disponible. Pour les polices latines, grecques et cyrilliques une police Sans ordinaire devrait faire l'affaire sans problème. Cependant, la première police préférée est Cantarell, suivie de Noto Sans UI. Cantarelle a commencé comme police sans-serif latine et a été forkée dans Gnome sous le même nom mais ils ne fournissent que les sources. Les polices Noto Sans UI sont pour les autres langues.

Depuis Fontconfig-2.12.5, il y a aussi des règles de familles génériques pour certaines polices d'emoji et de maths, consultez {45,60}-generic.conf.

Dans les rares cas ou une police ne contient pas tous les points de codes attendus, voir 'Essayez en premier :' dans I stared into the fontconfig pour plus de détails.

Hinting et Anticrénelage

Il est possible de changer la façon dont, ou si, les polices sont hintées. L'exemple de fichier suivant contient les paramètres par défaut, mais avec des commentaires. Les paramètres sont laissées aux préférences de l'utilisateur et au choix de police, de sorte qu'un changement qui améliore certaines pages peut en aggraver d'autres. L'endroit préférable pour ce fichier est : ~/.config/fontconfig/fonts.conf

Pour tester différents paramétrages, vous aurez peut être besoin de sortir de Xorg et ensuite relancer startx pour que toutes les applications utilisent le nouveau paramétrage. Il y a plusieurs manières de réécrire les paramètres de fontconfig, consultez Éléments qui peuvent contourner Fontconfig ci-dessous pour plus de détails. Pour explorer les possibilités, créez un fichier pour votre utilisateur :

mkdir -pv ~/.config/fontconfig &&
cat > ~/.config/fontconfig/fonts.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>

  <match target="font" >
    <!-- autohint was the old automatic hinter when hinting was patent
    protected, so turn it off to ensure any hinting information in the font
    itself is used, this is the default -->
    <edit mode="assign" name="autohint">  <bool>false</bool></edit>

    <!-- hinting is enabled by default -->
    <edit mode="assign" name="hinting">   <bool>true</bool></edit>

    <!-- for the lcdfilter see https://www.spasche.net/files/lcdfiltering/ -->
    <edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>

    <!-- options for hintstyle:
    hintfull: is supposed to give a crisp font that aligns well to the
    character-cell grid but at the cost of its proper shape. However, anything
    using Pango >= 1.44 will not support full hinting, Pango now uses harfbuzz
    for hinting. Apps which use Skia (e.g. Chromium, Firefox) should not be
    affected by this. 

    hintmedium: is reported to be broken.
    hintslight is the default: - supposed to be more fuzzy but retains shape.

    hintnone: seems to turn hinting off.
    The variations are marginal and results vary with different fonts -->
    <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>

    <!-- antialiasing is on by default and really helps for faint characters
    and also for 'xft:' fonts used in rxvt-unicode -->
    <edit mode="assign" name="antialias"> <bool>true</bool></edit>

    <!-- subpixels are usually rgb, see
    http://www.lagom.nl/lcd-test/subpixel.php -->
    <edit mode="assign" name="rgba">      <const>rgb</const></edit>

    <!-- thanks to the Arch wiki for the lcd and subpixel links -->
  </match>

</fontconfig>
EOF

Vous devrez maintenant modifier le fichier avec votre éditeur préféré. Beaucoup de ces paramètres font des différences subtiles et le résultat peut dépendre des polices que vous utilisez.

[Note]

Note

Si le hinting est activé, il est fait par FreeType. Depuis FreeType-2.7, l'interpréteur TrueType par défaut est la v40. Le moteur de hinting v35 original peut être activé par une variable d'environnement, mais ce n'est véritablement approprié que pour les polices TTF originales de Microsoft (Arial, etc). Le moteur v38 (Infinality) n'est pas construit par défaut et toutes les options pour le régler ont été supprimées. Pour les détails complets, consultez subpixel-hinting (en résumé : il n'y a PAS de hinting sous-pixel, le code ignore simplement toutes les instructions de hinting horizontales).

Xorg suppose que les écrans ont 96 points par pouce (DPI). La plupart des écrans LCD en sont proches, mais certaines personnes détectent des problèmes de couleur si leur écran diverge de cette taille. Consultez calc-dpi.

Si vous avez un écran haute densité (souvent appelé « 4K » ou supérieur) vous devrez probablement utiliser des tailles de police plus grandes et vous aurez avantage à désactiver le hinting.

Pour plus d'exemples, voir les fils de discussion de blfs-support qui ont débuté le 2016-09/00128, en particulier 2016-09/00137, et la solution préférée de l'auteur du message initial 2016-09/00147. Il y a d'autres exemples dans Fontconfig dans le wiki Arch et Fontconfig dans le wiki Gentoo.

Désactivation des polices Bitmaps

Dans les versions précédentes de BLFS, les vieilles polices laides de Xorg étaient installées. Maintenant, beaucoup de personnes n'ont plus besoin d'installer aucune d'entre elles. Mais si pour une raison ou une autre vous avez installé une ou plusieurs polices bitmap, vous pouvez empêcher leur utilisation par Fontconfig en créant le fichier suivant en tant qu'utilisateur root :

cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>
EOF

Modifications synthétiques

Le fichier 90-synthetic.conf contient des exemples d'application synthétique d'italique et de graisse à une police. La graisse synthétique peut être appliquée à une police visuellement fine, mais le résultat n'est pas toujours celui attendu : avec seulement embolden, Epiphany montre des polices plus foncées mais pas Firefox — donc à moins que firefox n'utilise maintenant Cairo, le commentaire à propos de Weight est toujours valide. Mais en indiquant les deux, Epiphany affichera du texte en gras par défaut, et affichera du texte très gras si la balise « bold » est utilisée. Dans les deux cas, ni libreOffice ni falkon n'ont affiché de texte en gras.

Ajout des répertoires de polices supplémentaires

Normalement, les polices du système et les polices de l'utilisateur sont installées dans les répertoires spécifiés dans Le Protocole de Police Xft et il n'y a pas de raison de les mettre ailleurs. Cependant, une installation BLFS complète de texlive-20230313 place beaucoup de polices dans /opt/texlive/2023/texmf-dist/fonts/ dans les sous-répertoires opentype/ et truetype/. Bien que l'extraction de tous ces fichiers puisse sembler utile (cela permet de les utiliser dans des programmes non TeX), il y a plusieurs problèmes avec une telle approche :

  1. Il y a des centaines de fichiers, ce qui complexifie la sélection d'une police.

  2. Certains des fichiers font des choses bizarres, comme l'affichage de drapeaux sémaphore au lieu de lettres ASCII, ou le mappage de codes cyrilliques vers des formes de caractères appropriés à la vieille église slave au lieu des formes actuelles attendues : bien si c'est ce dont vous avez besoin, mais pénible pour une utilisation normale .

  3. De nombreuses polices ont des tailles multiples et des noms courts obscurs, qui rendent la sélection de la bonne police encore plus difficile.

  4. Quand une police est ajoutée à CTAN, elle est accompagnée par un paquet TeX à utiliser dans les anciens moteurs (xelatex n'a normalement pas besoin de cela), et ensuite la version est souvent gelée tandis que la police est maintenue séparément. Certaines de ces polices comme Polices DejaVu sont déjà probablement installées dans votre système BLFS dans une version plus récente, et si vous avez plusieurs versions d'une police on ne sait pas laquelle sera utilisée par Fontconfig.

Cependant, il est parfois utile de regarder ces polices dans des applications non-TeX, seulement pour voir si vous voulez installer une version récente. Si vous avez tout installé de texlive, l'exemple suivant rendra une des polices OpenType Arkandis disponible pour d'autres applications, ainsi que les trois polices TrueType de ParaType. Modifiez ou répétez les lignes comme vous le souhaitez, pour soit rendre toutes les polices opentype/ ou truetype disponibles, ou pour sélectionner différents répertoires de polices. En tant qu'utilisateur root :

cat > /etc/fonts/conf.d/09-texlive.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <dir>/opt/texlive/2023/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
  <dir>/opt/texlive/2023/texmf-dist/fonts/truetype/paratype</dir>
</fontconfig>
EOF

SI vous faites cela, pensez à changer toutes les instances de l'année dans ce fichier quand vous mettez à jour texlive à la dernière version.

Choix de certaines polices

En dehors de pages web qui utilisent des polces WOFF et les fournissent ou pointent vers google pour les télécharger, les pages web ont traditionnellement suggéré une liste de nom de familles de polices préférés si elles s'en préoccupaient (p. ex. Times New Roman, Serif). Il y a beaucoup de raisons pour qu'une personne veuille avoir des pages qui spécifient une police préférée et qui utilisent une police différente, ou préfèrent des polices spécifiques dans Monospace ou Sans ou Serif. Comme vous pouvez vous y attendre, il y a de nombreuses façons de faire cela.

Documentation utilisateur de Fontconfig

Fontconfig installe une documentation utilisateur contenant un exemple de « fichier de configuration utilisateur » qui, entre autres, préfère WenQuanYi ZenHei (une police Sans) si une police Serif est demandée pour le chinois (cette partie pourrait être anachronique à moins que vous ayez des polices chinoises non-libres, car dans 65-nonlatin.conf cette police est déjà parmi les polices préférées lorsque Serif est spécifiée pour le chinois) et préfère la police moderne VL Gothic si une police Sans est spécifiée dans une page japonaise (cependant quelques autres polices pourront être préférées si elles ont été installées).

Si vous avez installé la dernière version, la documentation utilisateur est disponible en HTML, PDF et texte dans /usr/share/doc/fontconfig-2.15.0/ : changez la version si vous en avez installée une autre.

Choisissez une police spécifique

Par exemple, si pour une raison ou une autre vous souhaitiez utiliser la police Nimbus Roman No9 L alors que Times New Roman est référencée (elles ont des métriques identiques, et préférable pour Times Roman, mais la police Serif de Polices Liberation sera préférable pour la police Times New Roman si elle est installée), en tant qu'utilisateur individuel vous pouvez installer la police et ensuite créer le fichier suivant :

mkdir -pv ~/.config/fontconfig/conf.d &&
cat >  ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- prefer Nimbus Roman No9 L for Times New Roman as well as for Times,
 without this Tinos and Liberation Serif take precedence for Times New Roman
 before Fontconfig falls back to whatever matches Times -->
    <alias binding="same">
        <family>Times New Roman</family>
        <accept>
            <family>Nimbus Roman No9 L</family>
        </accept>
    </alias>
</fontconfig>
EOF

C'est quelque chose que vous feriez normalement pour les paramètres d'un utilisateur individuel, mais le dossier dans ce cas aura été préfixé '35 - ' alors qu'il peut, si vous le souhaitez, être utilisé à l'échelle du système dans /etc/fonts/conf.d/.

Choisissez les polices CJK préférées

L'exemple suivant d'une configuration locale (c.-à-d. qui s'applique à tous les utilisateurs de la machine) fait plusieurs choses. Elle est particulièrement appropriée lorsqu'aucune langue n'est spécifiée ou pour lire du texte CJK avec un paramètre linguistique non CJK et quand vous préférez les formes japonaises des points de code partagés avec le chinois. En particulier, les approches alternatives consisteraient à spécifier une police chinoise avant une police japonaise, ce qui signifie que les symboles kana seraient utilisés depuis la police japonaise, ou à ne pas spécifier DejaVu pour que la première police de chaque ensemble de préférence soit préférée pour le texte utilisant les alphabets latins.

  1. Si une police Serif est spécifiée, Polices DejaVu sera utilisé. Si un point de code Han est trouvé, ou que la langue japonaise est spécifiée, la police Mincho de Polices IPAex sera utilisée. Si des points de code Hangul sont trouvés ou que la langue coréenne est spécifiée, UnBatang (voir Polices coréennes) sera utilisée : changez cette ligne si vous voulez utiliser une autre police serif coréenne. Après cela, WenQuanYi ZenHei (Sans, mais une police par défaut pour Serif et monospace) sera utilisée. Une version précédente de cette page mentionnait l'utilisation d'UMing qui est une police chinoise traditionnelle qui était embarquée dans un ancien fichier de configuration qui la préférait pour les codes de langue zh-tw et zh-hk (et pour sans-serif et monospace). Mais sans ce fichier de configuration, Fontconfig ne la considérera comme acceptable que pour zh-hk. Le fichier de configuration doit être modifié pour utiliser le style actuel et sera ajouté au début, donc la spécification d'UMing n'a pas à se faire dans ce fichier local.conf.

  2. Pour les préférences Sans Serif, commencez encore par Polices DejaVu, puis VL Gothic pour le japonais avant de vous replier sur WenQuanYi Zen Hei, une police sans qui couvre à la fois le chinois et les Hangul coréens.

  3. Les polices Monospace sont forcées par rapport aux polices Sans préférées. Si le texte est en chinois ou coréen alors WenQuanYi ZenHei sera utilisée.

Dans une locale non-CJK, le résultat est que les polices appropriées seront utilisées pour toutes les variantes de chinois, japonais et hangul coréen (mais les variantes japonaises des glyphes partagés avec le chinois seront utilisées). Toutes les autres langues doivent déjà fonctionner si une police est présente. En tant qu'utilisateur root :

cat > /etc/fonts/local.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <alias>
        <family>serif</family>
        <prefer>
            <family>DejaVu Serif</family>
            <family>IPAexMincho</family>
            <!-- WenQuanYi is preferred as Serif in 65-nonlatin.conf,
            override that so a real Korean font can be used for Serif -->
            <family>UnBatang</family>
        </prefer>
    </alias>
    <alias>
         <family>sans-serif</family>
         <prefer>
             <family>DejaVu Sans</family>
             <family>VL Gothic</family>
         <!-- This assumes WenQuanYi is good enough for Korean Sans -->
         </prefer>
    </alias>
    <alias>
         <family>monospace</family>
         <prefer>
             <family>DejaVu Sans Mono</family>
             <family>VL Gothic</family>
         <!-- This assumes WenQuanYi is good enough for Korean Monospace -->
         </prefer>
    </alias>
</fontconfig>
EOF

Modification des fichiers de configuration de style ancien

Certaines polices, particulièrement les polices chinoises, viennent avec des fichiers de configuration qui peuvent être installés dans /etc/fonts/conf.d. Cependant, si vous faites cela et ensuite utilisez un terminal pour lancer n'importe quelle commande qui utilise Fontconfig, vous devrez voir des messages d'erreurs comme :

Fontconfig warning: "/etc/fonts/conf.d/69-odofonts.conf", line 14: Having multiple <family> in <alias> isn't supported and may not work as expected.

En pratique, ces anciennes règles ne fonctionnent pas. Pour les utilisateurs non-CJK, Fontconfig fonctionnera bien sans ces règles. Leur origine remonte à l'époque où les utilisateurs de CJK avaient besoin de bitmaps fabriqués à la main pour être lisibles dans les petites tailles, et ils semblaient laids à côté des glyphes latins anti-crénelés - ils ont préféré utiliser la même police CJK pour les glyphes latins. Il y a un effet secondaire à faire cela : la police (Serif) est souvent aussi utilisée pour Sans, et dans une telle situation le texte (anglais) dans les menus de Gtk utilisera cette police - par rapport aux polices du système, en plus d'être serif, elle est à la fois pâle et plutôt petite. Cela peut rendre la lecture inconfortable.

Néanmoins, ces anciens fichiers de configuration peuvent être corrigés si vous souhaitez les utiliser. L'exemple suivant est la première partie de 64-arphic-uming.conf de UMing – il y a beaucoup plus d'éléments similaires qui ont aussi besoin d'être changés :

   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
   </match>

Le processus pour corriger cela est simple mais fastidieux – pour chaque élément qui produit un message d'erreur, à l'aide de votre éditeur (en tant qu'utilisateur root) éditez le fichier installé pour répéter le bloc entier autant de fois qu'il y a de variables, puis réduire chaque exemple pour n'en avoir qu'un seul. Vous pouvez travailler sur une erreur à la fois, enregistrer le fichier après chaque correction et, à partir d'un terminal séparé, exécuter une commande telle que fc-list 2>&1 | less pour voir si le correctif a fonctionné. Pour le bloc ci-dessus, la version corrigée sera :

   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>
   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>

À propos de la graisse des polices

Lorsque cette page et la suivante ont été créées, les polices latines fournissaient au maximum deux graisses — soit Regular ou Book (Book a une plus grande hauteur pour la rendre plus facile à lire dans de grands blocs de texte), soit Bold — et éventuellement un style Italic (ou Slant). Quelques polices avaient également des variantes Condensed (pour faire tenir plus de texte sur une ligne et généralement utilisées seulement si spécifiées). Sans CSS (Cascading Style Sheets), le texte utilisait la graisse Regular ou Book sauf avec la balise <b> … </b> utilisée pour le texte en gras. Les styles italiques étaient invoqués avec la balise <i> … </i>, et en combinaison avec la balise b pour l'italique gras.

Certaines polices proposent maintenant jusqu'à 9 graisses, éventuellement avec une police variable (pour économiser de l'espace en incluant toutes les alternatives dans un seul fichier et éventuellement pour permettre des graisses intermédiaires). Pour la plupart des utilisateurs de bureau qui n'ont pas besoin de cette gamme étendue de graisses pour créer du contenu, il est plus simple de n'installer qu'une ou deux graisses. Si une police a des graisses individuelles plus une police variable, la police variable est en général situé au plus haut niveau du répertoire fourni, avec des graisses individuelles dans un sous-répertoire static. En dehors d'une revue initiale de la police, il est inutile d'installer à la fois les versions statiques et variables, ni d'installer toutes les graisses possibles.

Les graisses sont classées de 100 (Thin) à 900 (Black ou Heavy) en terminologie CSS, où 400 est normale et 700 grasse. L'ensemble complet des graisses est décrit dans Tables de graisses CSS.

Si vous avez installé une police avec une gamme de graisses, vous pouvez copier font-weights.html sur votre machine locale. Telle-quelle, cette page utilisera votre police Serif par défaut en supposant que vous en ayez une. Modifiez-la pour pointer vers une police installée spécifique avec le nom connu par Fontconfig (aussi dans les éléments textuels *EDITME FONTNAME*) et ouvrez-la dans votre navigateur de bureau. Vous pouvez également l'utiliser pour regarder une police avec seulement deux graisses installées, p. ex. pour voir si vous préférez d'autres graisses.

Malgré les détails dans ce lien de Mozilla, il semble que si seules les graisses normales et grasses sont installées, SemiBold (600) sera affiché avec la police grasse.

Il semble qu'il y ait un moyen de modifier les graisses qui seront utilisées pour les graisses normales et grasses si seulement ces deux graisses sont installées. Firefox, et sans doute les autres navigateurs, cherchent la graisse immédiatement plus grasse que la version normale. Si elle est inférieur à Bold (Medium, peut-être SemiBold) elle sera utilisée pour la graisse normale et la suivante, si elle existe, sera utilisée pour les textes en gras, ce qui vous permet de rendre les polices un peu plus sombres. Inversement, si seule une graisse plus faible que normale a été installée, comme Light, elle sera utilisée à la fois pour les textes normaux et gras (la recherche vers le haut a lieu avant).

Si vous supprimez certaines graisses d'une police système, vous aurez peut-être besoin d'exécuter fc-cache en tant qu'utilisateur root puis de vous déconnecter complètement pour nettoyer les caches associés à votre utilisateur.

Éléments qui peuvent contourner Fontconfig

Plusieurs environnements de bureau, comme certains programmes, utiliseront Fontconfig pour rechercher les polices mais remplaceront certains paramètres.

GNOME : les paramètres dans org.gnome.desktop.interface peuvent être mis à jour avec dconf-editor. Vous pouvez indiquer les polices que vous préférez et leur taille. Pour utiliser les polices choisies par Fontconfig spécifiez par exemple « Sans 12 », « Serif 11 », « Mono 10 » comme vous le souhaitez. Vérifiez également les paramètres d'anticrénelage, de hinting et rgba. Autrement, gnome-tweaks-45.1 peut également mettre à jour les paramètres de police avec un formulaire graphique.

LXQt : modifiez les paramètres nécessaires pour suivre Fontconfig dans lxqt-config-appearance.

KDE Plasma : les paramètres peuvent être modifiés dans Paramètres Systèmes sou Apparences -> Polices. cela créera ou modifiera ~/.config/fontconfig/fonts.conf bien que ~/.config/fontconfig/fonts.conf, si installé, puisse le contourner.

bureau Xfce : les paramètres peuvent être ajustés dans Paramètres -> Apparence -> Polices. Spécifiez vos polices préférées, p. ex. « Sans Regular » (pour utiliser la police normale plutôt que Bold ou Italic) et ajustez la taille dans les options. Vérifiez les options de rendu et de DPI.

Firefox : ce navigateur vous permet de spécifier les polices par défaut. Pour la série 115esr, utilisez le menu « hamburger » pour aller aux Préférences, Général et sous Police -> Avancé, sélectionnez Sans Serif, Serif ou Monospace comme vous le souhaitez si vous voulez utiliser les polices correspondant à Fontconfig. Indiquez les tailles comme vous le souhaitez. Dans les versions suivantes, les paramètres sont dans Préférences -> Polices.

Libreoffice : des tests avec un texte anglais avec une vieille police japonaise (HanaMinA) qui prend en charge plusieurs langues européennes, mais n'avait qu'une seule graisse et aucun italique ou penché a montré que bien que Libreoffice utilise Fontconfig pour chercher les polices, il créait ses propres texte gras ou penchés. Il n'est pas clair s'il fera la même chose si une police a un style gras ou italique. De plus, la documentation montre que Libreoffice a ses propres règles de substitution lorsqu'un code de point n'est pas trouvé dans la police sélectionnée, mais il n'est pas clair de savoir si ces règles s'appliquent sur Linux avec Fontconfig.

Pango : comme montré das l'exemple de ~/.config/fontconfig ci-dessus, tout ce qui utilise Pango-1.44 (à partir de 2019) ou supérieur utilise maintenant Harfbuzz pour le hinting et non FreeType et hintfull n'est pas pris en charge.

Thunderbird : les paramètres de police peuvent être modifiés en allant dans « Édition -> Paramètres » puis en descendant à « Polices & Couleurs ».

Liens externes

I stared into the fontconfig ...

Les entrées du blog d'Eevee sont particulièrement utiles si Fontconfig ne pense pas que votre police choisie prenne en charge votre langue, et pour préférer certaines polices japonaises non-MS quand une police laide MS est déjà installée.

subpixel-hinting

La documentation de l'interpréteur FreeType v40 sur la documentation freetype explique comment le moteur de hinting actuel fonctionne et pourquoi le précédent interpréteur (lent) a été remplacé.

Calculer le DPI

Une ancienne réponse sur askubuntu donne des détails sur la manière de calculer le nombre de point par pouce d'un écran, mais vous devez simplement mesure la largeur et la hauteur de l'écran, les convertir en pouces et diviser par le nombre de pixels. Vous pouvez ensuite passer -dpi 90 en démarrant Xorg, avec votre propre valeur.

Tables de graisses CSS

Vous trouverez sans doute plus que ce dont vous rêviez sur la documentation CSS de Mozilla.

Appliquer le hinting automatique à une police

Si vous utilisez le hinting et avez une police TTF (et non OTF) qui n'a pas de hinting mais vous permet de la modifier, vous pouvez appliquer du hinting avec ttfautohint basé sur l'ancien moteur de hinting automatique. Avec la version 1.8.4, il échoue à être construit sans Qt5.

Fontconfig dans le wiki Arch

Arch a beaucoup d'informations sur leur wiki dans font_configuration.

Fontconfig dans le wiki Gentoo

Gentoo a quelques informations dans son wiki à Fontconfig bien que beaucoup des détails (quoi activer et Infinality) sont spécifiques à Gentoo.