Changer la famille de polices pour les caractères d'une certaine langue / script à l'aide de fontconfig?

8

Je suis sur Arch Linux, Deepin Desktop. J'utilise Noto Serif comme police standard, mais je n'aime pas ses caractères arabes. Mon objectif est donc d'utiliser une autre police uniquement pour les caractères arabes.

Voici ce que j'ai essayé. J'ai créé un nouveau fichier de configuration /etc/fonts/conf.d/avec le contenu suivant:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>sans-serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="lang" compare="contains">
            <string>ar</string>
        </test>
        <test qual="any" name="family">
            <string>serif</string>
        </test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Noto Naskh Arabic</string>
        </edit>
    </match>
</fontconfig>

J'ai ensuite couru fc-cache -r. Mais cela n'a pas fonctionné, la même police est toujours utilisée et exécute des fc-matchretours NotoSerif-Regular.ttf: "Noto Serif" "Regular"comme auparavant.

Omar Emara
la source
Quel nom avez-vous donné à votre fichier de configuration? Quelle est votre locale (ou, plus précisément, la LC_CTYPEcatégorie locale)?
Gunnar Hjalmarsson le
@GunnarHjalmarsson J'utilise 99-bangla.confdans le ~/.config/fontconfig/conf.drépertoire. Il semble que j'obtienne la valeur par défaut lors de l'exécution LANG=bn fc-match. Mais Google Chrome choisit toujours une autre police
Anwar

Réponses:

2

De nombreuses polices Noto signalent au système qu'elles prennent en charge le script arabe, ce qu'elles font, en partie. L'une de ces polices est la police ourdou , et pour une raison quelconque, elle a la priorité sur les autres polices qui prennent en charge le script arabe.

Vous pouvez préférer une police spécifique aux autres comme suit:

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

<alias>
  <family>sans-serif</family>
  <prefer>
   <family>Noto Sans</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>serif</family>
  <prefer>
   <family>Noto Serif</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

 <alias>
  <family>monospace</family>
  <prefer>
   <family>Noto Sans Mono</family>
   <family>Noto Naskh Arabic</family>
  </prefer>
 </alias>

</fontconfig>

Plus la position de la police est élevée, plus elle est préférée. Dans ce cas, nous préférons Noto Naskh Arabicles autres polices de script arabes.

Vous pouvez bien sûr le faire avec n'importe quelle langue ou police de votre choix.

Pour une raison quelconque, seul le fichier de configuration utilisateur a fonctionné pour moi, ceux situés dans ~/.config/fontconfig/fonts.conf. Notez que $XDG_CONFIG_HOMEla variable d'environnement doit être définie sur votre .configrépertoire dans votre répertoire personnel, donc $HOME/.config.

Vous devez ensuite reconstruire la configuration pour qu'elle prenne effet à l'aide de fc-cache. Seule l'application nouvellement lancée sera affichée avec la nouvelle configuration. Redémarrez le serveur X ou votre bureau pour que les modifications prennent effet à l'échelle mondiale.

Modifier: si vous vous arcomparez aux paramètres régionaux, cela ne fonctionnera tout simplement pas sur tous les sites Web, car certains sites Web utilisent des enparamètres régionaux tout en affichant des caractères arabes UTF-8.

Si vous allez /etc/fonts/conf.det lisez READMEpuis lisez n'importe quel fichier de configuration commençant par [30-40]vous saurez que c'est la bonne réponse.

Si, par exemple, un site Web demande une police Serif; fontconfig parcourt cette liste, tout d'abord Noto Serif, lorsqu'il trouve un caractère arabe, il recourt à la deuxième police de la liste - Noto Naskh Arabic- et constate que la police prend en charge le script arabe, donc il est utilisé.

Khaled Emara
la source
1
Merci! Il semble que Deepin ajoute simplement <string>Noto Naskh Arabic</string>au ~/.config/fontconfig/conf.d/99-deepin.conffichier.
Omar Emara
Le nom de fichier devrait aller de 50 à 69 dans Ubuntu je suppose
Anwar