将间距 = 100 的每个字体设置为“等宽”

将间距 = 100 的每个字体设置为“等宽”

许多字体,包括来自包管理器(当前运行 Arch 系统)的字体,不包含通用系列“衬线“,”等宽字体“ 和 ”草书“。所以我必须手动指示正确的家庭(另请参阅https://eev.ee/blog/2015/05/20/i-stared-into-the-fontconfig-and-the-fontconfig-stared-back-at-me/)。

但对于 ”等宽字体" 字体,有一个解决方法:它们的间距属性均为 100。您可以通过运行来检查这一点fc-list :spacing=100(另请参阅https://unix.stackexchange.com/a/363368/473666)。因此,我们的想法是自动将具有此属性值的每种字体设置为“等宽字体” 字体。

例如,在默认配置文件和文档中,他们设置了每种没有“衬线“ 和 ”等宽字体“ 作为 ”无衬线字体“ 这边走:

  <match target="pattern">
    <test qual="all" name="family" compare="not_eq">
            <string>sans-serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
            <string>serif</string>
    </test>
    <test qual="all" name="family" compare="not_eq">
            <string>monospace</string>
    </test>
    <edit name="family" mode="append_last">
            <string>sans-serif</string>
    </edit>
  </match>

所以,我尝试了这个:

  <match target="pattern">
    <test qual="all" name="spacing" compare="eq"> 
      <int>100</int>
    </test>
    <test qual="all" name="family"  compare="not_eq"> 
      <string>monospace</string>
    </test>
    <edit name="family" mode="append_last"> 
      <string>monospace</string>
    </edit>
  </match>

结果:每一个系统上的字体现在是等宽字体。更改<int>100</int>为 时也会发生这种情况<const>mono</const>。我已经阅读了man fonts.conf和 中列出的许多默认配置文件,fc-conflist但我无法使其工作。我尝试了属性及其值的多种组合,但结果始终是没有任何或者每一个字体被视为等宽字体。

现在,我使用此命令生成源列表并手动添加它们:fc-list :spacing=100 | awk -F: '{print $2}' | sort -u。这是我第一次在 Stack Exchange 上问问题,我希望我能说清楚。

答案1

qual="all"删除间距测试中的参数。这用于指定测试列表(即family字符串列表)时的行为。标量测试qual="all"总是成功的。这是 fontconfig 中的一个错误。

答案2

我需要将匹配目标更改为 ,<match target=font>以测试间距;我认为 fontconfig 不知道模式匹配时的间距。

我还没有尝试设置字体系列,因为我不需要它,但是修改后的配置让我可以在 GNOME 终端中仅针对控制台文本关闭抗锯齿功能:

<match target="font">
  <test name="spacing" compare="eq">
    <int>100</int>
  </test>
  <test name="prgname" compare="contains">
    <string>gnome-terminal</string>
  </test>
  <edit name="antialias" mode="assign">
    <bool>false</bool>
  </edit>
</match>

在 fontconfig 版本 2.13.1 上测试。

相关内容