当我在CSS中指定’Liberation Mono’时,为什么选择’DejaVu Serif’?

我在Debian系统上使用Iceweasel浏览器(Firefox衍生版)和XFCE4桌面.

我没有在〜/ .config / fontconfig / fonts.conf中定义任何自定义字体替换.

这就是fc-match目前告诉我的.

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

所以我希望当我有一个HTML时,使用’Liberation Mono’字体应该提供与使用’Courier’相同的结果.但是从下面的屏幕截图中可以看出,情况并非如此(JSFiddle:http://jsfiddle.net/8L3rmyxn/).

我点击了’Inspect Element’并找到了使用的实际字体.

对于在CSS中使用“Liberation Mono”的文本,浏览器使用’DejaVu Serif’而不是与fc-math的输出一致.

对于CSS中使用’Courier’的文本,浏览器使用’Nimbus Mono L’,它与fc-match的输出一致.

对于在CSS中使用“monospace”的文本,浏览器使用“DejaVu Sans Mono”,它再次与fc-match的输出一致.

为什么在’Liberation Mono’字体的情况下,浏览器不使用’Nimbus Mono L’而是使用’DejaVu Serif’字体?

已知决议

请注意,我知道解决此问题的方法.如果我在〜/ .config / fontconfig / fonts.conf中明确定义了’Liberation Mono’的别名,那么我得到了所需的结果,即’Liberation Mono’字体中的文字和’Courier’字体中的文字看似相似.

lone@debian:~$cat ~/.config/fontconfig/fonts.conf 
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <alias>
        <family>Liberation Mono</family>
        <prefer><family>Nimbus Mono L</family></prefer>
    </alias>
</fontconfig>
lone@debian:~$fc-match "Liberation Mono"
n022003l.pfb: "Nimbus Mono L" "Regular

问题,再次

但我的问题仍然存在.为什么在fonts.conf中没有这个明确的别名,当我在CSS中指定’Liberation Mono’字体时,浏览器不使用’Nimbus Mono L’而是使用’DejaVu Serif’字体,即使fc-match也是如此无论我是否在fonts.conf中定义了别名,“Liberation Mono”输出相同的内容?

最佳答案 默认情况下,Firefox仅允许通过fontconfig最多替换3次.

您可以在about:config中设置gfx.font_rendering.fontconfig.max_generic_substitutions以增加此限制.允许的最高值是127.

点赞