¿Cambiar la familia de fuentes para los caracteres de un determinado idioma / script usando fontconfig?

8

Estoy en Arch Linux, Deepin Desktop. Estoy usando Noto Serif como mi fuente estándar, pero no me gustan sus caracteres árabes. Entonces mi objetivo es usar otra fuente solo para los caracteres árabes.

Esto es lo que he intentado. Creé un nuevo archivo de configuración /etc/fonts/conf.d/con los siguientes contenidos:

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

Entonces corrí fc-cache -r. Pero esto no funcionó, la misma fuente todavía está en uso y ejecuta fc-matchdevoluciones NotoSerif-Regular.ttf: "Noto Serif" "Regular"como antes.

Omar Emara
fuente
¿Qué nombre le diste a tu archivo de configuración? ¿Cuál es su configuración regional (o, más específicamente, la LC_CTYPEcategoría de configuración regional)?
Gunnar Hjalmarsson
@GunnarHjalmarsson que uso 99-bangla.confen el ~/.config/fontconfig/conf.ddirectorio. Parece que obtengo el valor predeterminado cuando lo ejecuto LANG=bn fc-match. Pero Google Chrome todavía elige otra fuente
Anwar

Respuestas:

2

Muchas fuentes Noto informan al sistema que admiten la escritura árabe, lo que hacen, en parte. Una de estas fuentes es la fuente Urdu , y por cualquier razón tiene prioridad sobre otras fuentes que admiten la escritura árabe.

Puede preferir una fuente específica sobre las otras de la siguiente manera:

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

Cuanto más alta sea la posición de la fuente, más preferida será. En este caso, preferimos Noto Naskh Arabicotras fuentes de escritura árabe.

Puede hacerlo, por supuesto, con cualquier idioma o fuente de su elección.

Por alguna razón, solo el archivo de configuración del usuario funcionó para mí, aquellos ubicados en ~/.config/fontconfig/fonts.conf. Tenga en cuenta que $XDG_CONFIG_HOMEla variable de entorno debe establecerse en su .configdirectorio en su directorio de inicio, por lo tanto $HOME/.config.

Luego debe reconstruir la configuración para que surta efecto con fc-cache. Solo la aplicación recién iniciada se mostrará con la nueva configuración. Reinicie el servidor X o su escritorio para que los cambios surtan efecto globalmente.

Editar: si coincide con la arconfiguración regional que simplemente no funcionará en todos los sitios web, porque algunos sitios web usan una enconfiguración regional mientras muestran caracteres árabes UTF-8.

Si va /etc/fonts/conf.dy lee el READMEarchivo y luego lee cualquier archivo de configuración que comience [30-40], sabrá que esta es la respuesta correcta.

Si, por ejemplo, un sitio web solicita una fuente Serif; fontconfig revisa esta lista, primero Noto Serif, cuando encuentra un carácter árabe, recurre a la segunda fuente de la lista Noto Naskh Arabic, y descubre que la fuente admite la escritura árabe, por lo que se utiliza.

Khaled Emara
fuente
1
¡Gracias! Parece que para Deepin, simplemente agregar <string>Noto Naskh Arabic</string>al ~/.config/fontconfig/conf.d/99-deepin.confarchivo hace el trabajo.
Omar Emara
El nombre del archivo debe ir entre 50 y 69 en Ubuntu, supongo
Anwar