Por que o fc-match não respeita minha correspondência e edita a regra para o Courier quando o faz para o Consolas?

1

Estou usando o Debian com o XFCE.

Comportamento padrão: nenhuma correspondência ou alias

Primeiro, deixe-me mostrar o comportamento padrão do meu sistema quando ~ / .config / fontconfig / fonts.conf não tem tags de correspondência ou alias.

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

Neste caso, fc-match produz o seguinte para Courier e Consolas.

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

Comportamento personalizado: quando a correspondência é definida

Agora eu tenho o seguinte em ~ / .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>

Neste caso, fc-match produz o seguinte.

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

Aqui vemos que o sistema respeitou minha regra de substituição para Consolas, mas não respeitou minha regra de substituição para Courier. Por que a saída de fc-match Courier ainda é "Nimbus Mono L" e não "DejaVu Sans Mono"?

    
por Lone Learner 21.06.2015 / 09:31

2 respostas

2

Eu sei que esta questão provavelmente está desatualizada, mas eu a descobri em minha própria busca por uma solução para substituir a substituição de Arial por Liberation Sans, que eu não gostei em um novo desktop Kubuntu Xenial 16.04.

Se substituir as substituições padrão do fontconfig por seu usuário for o que você deseja, talvez você esteja interessado em ler meu post no Askubuntu: link

Resumo breve

Em sistemas modernos, o fontconfig extrai a configuração do usuário de ~/.config/fontconfig/fonts.conf ou (melhor para fins de separação) ~/.config/fontconfig/conf.d .

No meu caso, eu queria que o Firefox processasse texto com um conjunto de fontes de família CSS para preferir o Arial usando o Noto Sans. O Fontconfig é configurado por padrão para usar o Liberation Sans como drop-in métrico para Arial ( /etc/fonts/conf.avail/30-metric-aliases.conf ), que a princípio parecia impossível de ser substituído sem alterar os principais arquivos de configuração do fontconfig.

Após uma longa busca, tentativa e erro, a solução foi simples: As sobrescritas são respeitadas quando nos diretórios de usuários mencionados e nomeadas de acordo com as expectativas do fontconfig na forma [0-9][0-9]*.conf (veja /etc/fonts/conf.avail /50-user.conf e /etc/fonts/conf.d/README ).

Minha configuração de trabalho para substituir 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>

Verifique com fc-match Arial no console como seu usuário, ele deve produzir "Noto Sans" (ou qualquer que seja sua nova configuração) sem esforços adicionais.

Depois de ter passado meio dia pensando em tudo isso, incluindo ler histórias altamente aventureiras sobre lutas corajosas nos domínios do fontconfig, espero que isso ajude os outros.

    
por 01.07.2016 / 02:03
0

Se você não alterou nada na configuração padrão, os arquivos de configuração de fonte em /etc/fonts/conf.d/ não contêm referências a Consolas, então sua configuração é usada para essa.

No entanto, eles já contêm entradas para Courier, aliasing-los para Nimbus Mono L.

Então, quando o seu arquivo fonts.conf for analisado, o Courier já foi processado e não há mais um Courier para trabalhar, apenas um Nimbus Mono L.

Soluções:

Trabalhe na fonte Nimbus Mono L em seu fonts.conf.
Se você escreve

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

então fc-match Courier produzirá DejaVu Sans Mono.

Ou, remova os aliases do Courier de todos os arquivos .conf em /etc/fonts/conf.d.

    
por 22.06.2015 / 11:22