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 : https://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.30 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 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.50.8 et ImageMagick-7.1.0-25 - 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 – Polices DejaVu 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-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.
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 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-20220321 place beaucoup de
polices dans /opt/texlive/2022/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 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/2022/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
<dir>/opt/texlive/2022/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.14.0/
: 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 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/
.
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 Polices IPAex 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 Polices coréennes.
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