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.
Notes utilisateur : http://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig
          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.22 qui peut utiliser les
          polices listées dans ~/.Xresources et
          AbiWord-3.0.4 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 installez 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}. 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.
Les commandes suivantes peuvent être utiles lorsque vous travaillez avec fontconfig :
fc-list | less : montre la liste des polices disponible (/chemin/vers/fichier : Nom de la police:style). Si vous avez installé une police il y a plus de 30 secondes mais qu'elle n'apparaît pas, alors elle ou l'un de ses répertoires n'est pas lisible par votre utilisateur.
fc-match 'Font Name' : vous indiquera 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 -a 'Type' | less : fournira une liste de toutes les polices qui peuvent être utilisée pour ce type (Monospace, Sans, Serif). Remarquez que parfois fontconfig prendra un glyphe d'une autre police disponible, même si elle n'est pas du type spécifiée, et à moins qu'il ne connaisse le type de la police, il supposera que c'est Sans.
          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.44.7 et ImageMagick-7.0.9-23 - 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 - 'zh' seul n'est pas valide).
          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 (anti-crénelage etc )
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,
          ~/.config/fontconfig/.
        
          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.
        
          Mais 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). Après cela, une police inconnue sera recherchée
          dans 45-latin.conf – si elle est
          trouvée elle sera assignée en tant que Serif ou Monospace ou Sans,
          sinon elle sera considérée comme étant Sans. Ensuite 50-latin.conf fournit les listes ordonnées des
          solutions de repli – Dejavu
          fonts seront utilisées si vous les avez installées. Le
          cyrillique et le grec semblent être traités de la même manière. Il
          y a des fichiers similaires avec un préfixe 65- pour le persan et
          d'autres systèmes d'écriture non latines. Tous ces fichiers
          préfèrent les polices commerciales si elles sont présentes, bien
          que les polices libres modernes soient souvent au moins égales.
        
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, voyez {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.
          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. Et si vous utilisez Gnome ou KDE, leurs bureaux peuvent écraser ces modifications. 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 http://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.
    hintmedium: poorly documented, maybe a synonym for hintfull.
    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 éditer le fichier avec votre éditeur préféré.
Pour plus d'exemples, voir les fils de discussion de blfs-support qui ont débuté le /2016-September/078422, en particulier 2016-September/078425, et la solution préférée du post original 2016-November/078658. Il y a d'autres exemples dans Fontconfig in the Arch wiki et Fontconfig in the Gentoo wiki.
          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
      
          Normalement, les polices du système et les polices de l'utilisateur
          sont installées dans les répertoires spécifiés dans The Xft Font Protocol et il n'y a
          pas de raison de les mettre ailleurs. Cependant, une installation
          BLFS complète de texlive-20190410 place beaucoup de
          polices dans /opt/texlive/2019/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 :
        
Il y a des centaines de fichiers, ce qui complexifie la sélection d'une police.
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 .
De nombreuses polices ont des tailles multiples et des noms courts obscurs, qui rendent la sélection de la bonne police encore plus difficile.
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 Dejavu fonts 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/2019/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
  <dir>/opt/texlive/2019/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.
Il y a beaucoup de raisons pour qu'une personne veuille avoir des pages qui spécifient une police particulière 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.
          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
          des paires d'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.13.1/ : changez
          la version si vous en avez installée une autre.
        
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 Liberation fonts 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/.
        
L'exemple suivant d'une configuration locale (c'est-à-dire applicable à tous les utilisateurs de la machine) fait plusieurs choses :
Si une police Serif est spécifiée, elle préférera les variantes UMing, pour que dans les langues zh-cn, zh-hk et zh-tw les choses semblent correctes (aussi pour zh-sq qui utilise en fait le même paramétrage que zh-cn) sans affecter le japonais.
Il préfère le japonais IPAex fonts s'il a été installé (bien que VL Gothic aura la priorité sur Sans (japonais) s'il a été aussi installé).
                Comme WenQuanYi ZenHei couvre les glyphes
                coréens Hangul et est également préféré pour Serif dans
                65-nonlatin.conf, s'il est
                installé, il sera utilisé par défaut pour le Serif coréen.
                Pour obtenir une police Serif appropriée, la police UnBatang
                est spécifiée ici – changez cette ligne si vous avez installé
                une police Serif différente dans le choix de Korean fonts.
              
Les polices Monospace sont forcées par rapport aux polices Sans préférées. Si le texte est en 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 coréen Hangul. 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>AR PL UMing</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>WenQuanYi Zen Hei</family>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
         </prefer>
    </alias>
    <alias>
         <family>monospace</family>
         <prefer>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
             <family>WenQuanYi Zen Hei</family>
         </prefer>
    </alias>
</fontconfig>
EOF
      
          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>
          
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.
Arch a beaucoup d'informations sur leur wiki dans font_configuration.
Gentoo a quelques informations dans son wiki à Fontconfig bien que beaucoup des détails (quoi activer et Infinality) sont spécifiques à Gentoo.
Last updated on 2018-08-09 23:49:29 +0200