字体配置规则优先级

字体配置规则优先级

如果我有两个文件/etc/fonts/conf.d/

其中之一就是:

<fontconfig>
<alias>
 <family>sans-serif</family>
 <prefer>
   <family>Noto Color Emoji</family>
 </prefer>
</alias>
</fontconfig>

另一个是:

<fontconfig>
<alias>
 <family>sans-serif</family>
 <prefer>
   <family>Noto Emoji</family>
 </prefer>
</alias>
</fontconfig>

将它们都读进去之后结果会怎样?

问题背后的原因——
我有一个巨大的、混乱的字体选择文件。如果我能以某种方式一步一步地从文件中构建字体选择,那将极大地整理我混乱的字体选择文件。所以,

以 Noto Emoji 为例,我如何逐步构建字体选择,以便它Noto Color Emoji成为默认字体并Noto Emoji作为后备字体?

答案1

这取决于文件名前面的数字。例如:

10-my-color.conf
20-my-other.conf

这应该赋予颜色变量更高的优先级。

PS 您是否考虑过将~/.config/fontconfig/conf.d目录用于此目的?这样您就不会将自己的文件与各种软件包安装的文件混在一起。

答案2

alias支持具有默认选择的后备/优先级列表的元素fontconfig。无需多个文件或别名规则。一个别名规则对于单个家族匹配来说就足够了。

来自 fontconfig 手册页:

<alias>

Alias elements provide a shorthand notation for the set of common
match operations needed to substitute one font family for another.

They contain a <family> element followed by optional <prefer>,
<accept> and <default> elements. Fonts matching the <family>
element are edited to prepend the list of <prefer>ed families
before the matching <family>, append the <accept>able families
after the matching <family> and append the <default> families to
the end of the family list.

<family>

Holds a single font family name

<prefer>,,<accept><default>

These hold a list of <family> elements to be used by the <alias>
element.

这是具有扩展设置的示例:

<fontconfig>
 <alias>
  <family>sans-serif</family>
  <!-- <accept> list if needed -->
  <prefer>
   <family>Noto Color Emoji</family>
   <family>Noto Emoji</family>
   <!-- you may add more font families here -->
  </prefer>
  <!-- <default> list if needed -->
 </alias>
</fontconfig>

如果您想强制字体绕过匹配,请改用accept

顺便说一句,您可以将优先级视为/认为<prefer>是中等/首选、<accept>强/覆盖、<default>弱/后备。

以下是很好的例子:Beyond Linux® From Scratch(System V 版本)- Fontconfig 概述

相关内容