3 votes

Pourquoi fc-match ne respecte-t-il pas ma règle de correspondance et de modification pour Courier alors qu'il le fait pour Consolas ?

J'utilise Debian avec XFCE.

Comportement par défaut : Pas de correspondance ou d'alias

Tout d'abord, laissez-moi montrer le comportement par défaut de mon système lorsque ~/.config/fontconfig/fonts.conf n'a pas de balises de correspondance ou d'alias.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
</fontconfig>

Dans ce cas, fc-match produit les résultats suivants pour Courier et Consolas.

lone@debian:~$ fc-match Courier
n022003l.pfb: "Nimbus Mono L" "Regular"
lone@debian:~$ fc-match Consolas
DejaVuSans.ttf: "DejaVu Sans" "Book"

Comportement personnalisé : Lorsque la correspondance est définie

Maintenant, j'ai ce qui suit dans ~/.config/fontconfig/fonts.conf.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <!-- Courier => DejaVu Sans Mono -->
    <match>
        <test name="family"><string>Courier</string></test>
        <edit name="family"><string>Deja Vu Sans Mono</string></edit>
    </match>

    <!-- Consolas => DejaVu Sans Mono -->
    <match>
        <test name="family"><string>Consolas</string></test>
        <edit name="family"><string>Deja Vu Sans Mono</string></edit>
    </match>
</fontconfig>

Dans ce cas, fc-match produit le résultat suivant.

lone@debian:~$ fc-match Courier
n022003l.pfb: "Nimbus Mono L" "Regular"
lone@debian:~$ fc-match Consolas
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

Nous voyons ici que le système a respecté ma règle de substitution pour Consolas, mais qu'il n'a pas respecté ma règle de substitution pour Courier. Pourquoi la sortie de fc-match Courier toujours "Nimbus Mono L" et non "DejaVu Sans Mono" ?

5voto

memartin Points 66

Je sais que cette question est probablement dépassée, mais je l'ai rencontrée lors de ma propre recherche d'une solution pour passer outre le remplacement par le système d'Arial par Liberation Sans, que je n'aimais pas sur un nouveau bureau Kubuntu Xenial 16.04.

Si vous souhaitez remplacer les remplacements par défaut de fontconfig pour votre utilisateur, vous serez peut-être intéressé par mon article sur Askubuntu : https://askubuntu.com/a/793363/306420

Résumé succinct

Sur les systèmes modernes, fontconfig tire la configuration utilisateur de ~/.config/fontconfig/fonts.conf ou (mieux pour les besoins de la séparation) ~/.config/fontconfig/conf.d .

Dans mon cas, je voulais que Firefox rende le texte avec une police de caractères CSS définie pour préférer Arial à Noto Sans. Fontconfig est configuré par défaut pour utiliser Liberation Sans en tant qu'extension métrique d'Arial ( /etc/fonts/conf.avail/30-metric-aliases.conf ), ce qui, au départ, semblait impossible à contourner sans modifier les fichiers de configuration principaux de fontconfig.

Après de longues recherches, des essais et des erreurs, la solution était très simple : Les surcharges sont respectées lorsqu'elles sont dans les répertoires utilisateurs mentionnés et nommées selon les attentes de fontconfig sous la forme suivante [0-9][0-9]*.conf (voir /etc/fonts/conf.avail/50-user.conf y /etc/fonts/conf.d/README ).

Ma configuration de travail pour remplacer Arial :

~/.config/fontconfig/conf.d/00-arial-noto.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <!-- Map Arial to Noto Sans instead of Liberation Sans
       (overrides /etc/fonts/conf.d/30-metric-aliases.conf) -->
  <alias binding="same">
    <family>Arial</family>
    <accept>
      <family>Noto Sans</family>
    </accept>
  </alias>
</fontconfig>

Vérifiez avec fc-match Arial sur la console en tant qu'utilisateur, il devrait afficher "Noto Sans" (ou quelle que soit votre nouvelle configuration) sans effort supplémentaire.

Après avoir passé une demi-journée à résoudre tout cela, y compris la lecture d'histoires très aventureuses sur des combats courageux dans les domaines de fontconfig, j'espère que cela pourra aider d'autres personnes.

0voto

Mr Lister Points 254

Si vous n'avez rien changé à la configuration par défaut, les fichiers de configuration des polices de caractères dans le répertoire /etc/fonts/conf.d/ ne contiennent pas de références à Consolas, donc votre paramètre est utilisé pour celui-là.

Cependant, ils contiennent déjà des entrées pour Courier, en les aliasant à Nimbus Mono L.

Ainsi, au moment où votre fonts.conf est analysé, Courier a déjà été traité et il n'y a plus de Courier sur lequel travailler, seulement un Nimbus Mono L.

Solutions :

Soit vous travaillez sur la police Nimbus Mono L dans votre fonts.conf.
Si vous écrivez

<match>
    <test name="family"><string>Nimbus Mono L</string></test>
    <edit name="family"><string>DejaVu Sans Mono</string></edit>
</match>

では fc-match Courier produira DejaVu Sans Mono.

Ou bien, supprimez les alias Courier de tous les fichiers .conf dans /etc/fonts/conf.d.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X