Alterando a família de fontes para caracteres de um determinado idioma / script usando o fontconfig?

8

Estou no Arch Linux, Deepin Desktop. Estou usando o Noto Serif como minha fonte padrão, mas não gosto dos caracteres em árabe. Portanto, meu objetivo é usar outra fonte apenas para caracteres arábicos.

Aqui está o que eu tentei. Criei um novo arquivo de configuração /etc/fonts/conf.d/com o seguinte conteúdo:

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

Eu então corri fc-cache -r. Mas isso não funcionou, a mesma fonte ainda está em uso e a execução fc-matchretorna NotoSerif-Regular.ttf: "Noto Serif" "Regular"como antes.

Omar Emara
fonte
Qual nome você deu ao seu arquivo de configuração? Qual é a sua localidade (ou, mais especificamente, a LC_CTYPEcategoria localidade)?
Gunnar Hjalmarsson
@GunnarHjalmarsson eu uso 99-bangla.confno ~/.config/fontconfig/conf.ddiretório. Parece que eu recebo o padrão quando executado LANG=bn fc-match. Mas o Google Chrome ainda escolhe outra fonte
Anwar

Respostas:

2

Muitas fontes Noto relatam ao sistema que suportam o script em árabe, o que eles fazem - em parte. Uma dessas fontes é a fonte Urdu e, por qualquer motivo, tem prioridade sobre outras fontes que suportam o Script em árabe.

Você pode preferir uma fonte específica sobre as outras da seguinte maneira:

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

Quanto maior a posição da fonte, mais preferida é. Nesse caso, preferimos Noto Naskh Arabicoutras fontes de script em árabe.

É claro que você pode fazer isso com qualquer idioma ou fonte de sua escolha.

Por alguma razão, apenas o arquivo de configuração do usuário funcionou para mim, aqueles localizados em ~/.config/fontconfig/fonts.conf. Observe que $XDG_CONFIG_HOMEa variável de ambiente deve ser definida como seu .configdiretório no diretório inicial, portanto $HOME/.config.

Você precisará reconstruir a configuração para que ela entre em vigor usando fc-cache. Somente o aplicativo recém-lançado será exibido com a nova configuração. Reinicie o servidor X ou a área de trabalho para que as alterações entrem em vigor globalmente.

Editar: se você comparar com o arcódigo de idioma que simplesmente não funcionará em todos os sites, porque alguns sites usam um encódigo de idioma enquanto exibem caracteres UTF-8 em árabe.

Se você /etc/fonts/conf.dler READMEe ler qualquer arquivo de configuração e começar com, [30-40]saberá que esta é a resposta certa.

Se, digamos, um site pede uma fonte Serif; fontconfig percorre esta lista, primeiro para Noto Serif, quando encontra um caractere árabe, recorre à segunda fonte da lista - Noto Naskh Arabic- e descobre que a fonte suporta o script árabe e, portanto, é usada.

Khaled Emara
fonte
1
Obrigado! Parece para o Deepin, basta adicionar <string>Noto Naskh Arabic</string>ao ~/.config/fontconfig/conf.d/99-deepin.confarquivo o trabalho.
Omar Emara
O nome do arquivo deve estar entre 50 e 69 no Ubuntu, eu acho
Anwar