fontconfig 中的 target="font" 和 target="pattern" 有什么区别?

fontconfig 中的 target="font" 和 target="pattern" 有什么区别?

我试图理解为什么我的一些测试fonts.conf使用<match target="pattern">(默认),其他测试使用<match target="font">,而其他测试则根本不使用。例如:

<match>
    <test name="family"><string>monospace</string></test>        
    <edit name="family"><string>Cousine</string></edit>
</match>

<match>
    <test name="family"><string>Cousine</string></test>
    <test name="pixelsize" compare="more"><double>17.5</double></test>
    <edit name="family" binding="strong"><string>Liberation Mono</string></edit>
</match>

<match target="font">
    <test name="family"><string>Overpass</string></test>        
    <edit name="hintstyle"><const>hintslight</const></edit>
</match>

这是为什么?我读过文档,但上面只说If 'target' is set to "font" instead of the default "pattern", then this element applies to the font name resulting from a match rather than a font pattern to be matched.我不理解措辞,有人能解释一下区别吗?

答案1

从:

https://lists.freedesktop.org/archives/fontconfig/2007-December/002787.html

应用程序通常像这样工作:

  1. 将用户的字体请求转换为字体配置模式;
  2. 使用 target="pattern" 在其上应用 fontconfig 配置;
  3. 从字体配置中获取与该模式匹配的字体的排序列表。该列表作为一组字体配置模式本身返回;
  4. 选择要使用的字体(通常是第一个具有所请求字符的字体);
  5. 使用 target="font" 在字体模式上应用 fontconfig 配置。

因此,这意味着,例如,如果您想关闭 Bitstream Vera Sans 上小于 7.5 尺寸的抗锯齿功能,则应使用 target="font" 执行此操作。如果您使用 target="pattern" 执行此操作,则如果请求是 Bitstream Vera Sans,它将关闭所有字体的 aa,无论您是否安装了该字体。

如果您想编写后备规则,以便用 DejaVu Sans 替代 Bitstream Vera Sans,那么可以使用 target="pattern" 来完成,因为您想修改请求。

还有来自:

https://lists.freedesktop.org/archives/fontconfig/2003-March/000128.html

使用字体目标来改变特定字体的呈现方式,使用图案目标来改变从可用字体中选择字体的方式。

相关内容