Ändern der Schriftfamilie für Zeichen einer bestimmten Sprache / eines bestimmten Skripts mithilfe von fontconfig?

8

Ich bin auf Arch Linux, Deepin Desktop. Ich verwende Noto Serif als Standardschrift, aber die arabischen Zeichen gefallen mir nicht. Mein Ziel ist es also, eine andere Schriftart nur für arabische Zeichen zu verwenden.

Folgendes habe ich versucht. Ich habe eine neue Konfigurationsdatei /etc/fonts/conf.d/mit folgendem Inhalt erstellt:

<?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>

Ich rannte dann fc-cache -r. Dies hat jedoch nicht funktioniert. Es wird immer noch dieselbe Schriftart verwendet, und es werden wie zuvor fc-matchRückgaben ausgeführt NotoSerif-Regular.ttf: "Noto Serif" "Regular".

Omar Emara
quelle
Welchen Namen haben Sie Ihrer Konfigurationsdatei gegeben? Was ist Ihr Gebietsschema (oder genauer gesagt die LC_CTYPEGebietsschemakategorie)?
Gunnar Hjalmarsson
@ GunnarHjalmarsson Ich benutze 99-bangla.confim ~/.config/fontconfig/conf.dVerzeichnis. Es sieht so aus, als würde ich beim Ausführen die Standardeinstellung erhalten LANG=bn fc-match. Aber Google Chrome wählt immer noch andere Schriftarten
Anwar

Antworten:

2

Viele Noto-Schriftarten berichten dem System, dass sie die arabische Schrift unterstützen, was sie auch tun - teilweise. Eine dieser Schriftarten ist die Urdu- Schriftart und hat aus irgendeinem Grund Vorrang vor anderen Schriftarten, die die arabische Schrift unterstützen.

Sie können eine bestimmte Schriftart den anderen wie folgt vorziehen :

<?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>

Je höher die Position der Schrift ist, desto bevorzugter ist sie. In diesem Fall bevorzugen wir Noto Naskh Arabicandere arabische Schriftarten.

Sie können dies natürlich mit jeder Sprache oder Schriftart Ihrer Wahl tun.

Aus irgendeinem Grund funktionierte nur die Benutzerkonfigurationsdatei für mich, die in ~/.config/fontconfig/fonts.conf. Beachten Sie, dass die $XDG_CONFIG_HOMEUmgebungsvariable auf Ihr .configVerzeichnis in Ihrem Ausgangsverzeichnis festgelegt werden muss $HOME/.config.

Sie müssen dann die Konfiguration neu erstellen, damit sie mit wirksam wird fc-cache. Mit der neuen Konfiguration wird nur die neu gestartete Anwendung angezeigt. Starten Sie den X-Server oder Ihren Desktop neu, damit die Änderungen global wirksam werden.

Bearbeiten: Wenn Sie mit dem arGebietsschema übereinstimmen , funktioniert dies einfach nicht auf allen Websites, da einige Websites ein enGebietsschema verwenden, während arabische UTF-8-Zeichen angezeigt werden.

Wenn Sie die Konfigurationsdatei /etc/fonts/conf.dlesen READMEund dann lesen, beginnend mit [30-40], wissen Sie, dass dies die richtige Antwort ist.

Wenn beispielsweise eine Website nach einer Serifenschrift fragt; fontconfig geht diese Liste zunächst durch Noto Serif, bis beim Auffinden eines arabischen Zeichens auf die zweite Schriftart in der Liste zurückgegriffen wird - Noto Naskh Arabic- und festgestellt wird, dass die Schriftart die arabische Schrift unterstützt und daher verwendet wird.

Khaled Emara
quelle
1
Vielen Dank! Es scheint für Deepin, dass das einfache Hinzufügen <string>Noto Naskh Arabic</string>zur ~/.config/fontconfig/conf.d/99-deepin.confDatei den Job erledigt.
Omar Emara