字体配置/示例

出自 ArchWiki

参阅 字体配置 以获取主文章。

配置可能在一定程度上有所不同。请发布 Fontconfig 配置并解释其完成原因。

微调字体

~/.config/fontconfig/fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit mode="assign" name="antialias">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="embeddedbitmap">
      <bool>false</bool>
    </edit>
    <edit mode="assign" name="hinting">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
    <edit mode="assign" name="rgba">
      <const>rgb</const>
    </edit>
  </match>
</fontconfig>

斜体或粗体禁用微调

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit mode="assign" name="autohint">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="hinting">
      <bool>false</bool>
    </edit>
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
    <edit mode="assign" name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit mode="assign" name="antialias">
      <bool>true</bool>
    </edit>
    <edit mode="assign" name="rgba">
      <const>rgb</const>
    </edit>
  </match>
  <match target="font">
    <test name="pixelsize" qual="any" compare="more">
      <double>15</double>
    </test>
    <edit mode="assign" name="lcdfilter">
      <const>lcdlight</const>
    </edit>
    <edit mode="assign" name="hintstyle">
      <const>hintnone</const>
    </edit>
  </match>
  <match target="font">
    <test name="weight" compare="more">
      <const>medium</const>
    </test>
    <edit mode="assign" name="hintstyle">
      <const>hintnone</const>
    </edit>
    <edit mode="assign" name="lcdfilter">
      <const>lcdlight</const>
    </edit>
  </match>
  <match target="font">
    <test name="slant" compare="not_eq">
      <double>0</double>
    </test>
    <edit mode="assign" name="hintstyle">
      <const>hintnone</const>
    </edit>
    <edit mode="assign" name="lcdfilter">
      <const>lcdlight</const>
    </edit>
  </match>
</fontconfig>

仅为较大字体或特定字体启用抗锯齿

一些用户喜欢抗锯齿不提供的更锐利的渲染效果

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="antialias" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <match target="font">
    <test name="size" qual="any" compare="more">
      <double>12</double>
    </test>
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
  </match>
  <match target="font">
    <test name="pixelsize" qual="any" compare="more">
      <double>16</double>
    </test>
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
  </match>
</fontconfig>

您可能还想仅对在没有抗锯齿的情况下看起来不错的字体禁用抗锯齿。参见 字体配置/示例/禁用抗锯齿

禁用粗体字体

适用于字体在粗体下显示不佳,并且您无法在应用程序中禁用粗体字体时(例如 st)。

...
<match target="pattern">
  <test qual="any" name="family">
    <string>Envy Code R</string>
  </test>
  <test name="weight" compare="more">
    <const>medium</const>
  </test>
  <edit name="weight" mode="assign" binding="same">
    <const>medium</const>
  </edit>
</match>

...

为等宽字体禁用连字

这可以防止在某些等宽字体中,诸如 “ffi” 之类的字母组合被压缩成单字符宽度。整个 <match> 代码块需要重复以包含额外的字体。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <description>Disable ligatures for monospaced fonts to avoid ff, fi, ffi, etc. becoming only one character wide</description>
  <match target="font">
    <test name="family" compare="eq" ignore-blanks="true">
      <string>Nimbus Mono PS</string>
    </test>
    <edit name="fontfeatures" mode="append">
      <string>liga off</string>
      <string>dlig off</string>
    </edit>
  </match>
</fontconfig>

一些其他字体可能还需要禁用诸如 calt 和/或 clig 之类的 特性

您可以使用以下命令测试此功能的有效性

$ echo -e "| worksheet |\n| buffering |\n| difficult |\n| finishing |\n| different |\n| efficient |" | pango-view --font="Nimbus Mono PS" /dev/stdin

某些程序不支持 fontfeatures 标签,因此对于这些程序,替换字体是唯一的选择。有关详细信息,请参阅 字体配置#设置默认字体或后备字体

启用排版特性

某些字体(如 inter-font)支持许多有用的 排版特性,这些特性默认未启用。

这些功能可以系统范围(针对所有用户)或每个用户使用 fontconfig 进行管理,或者每个应用程序使用应用程序内部设置进行管理。(对于那些支持在内部配置它们的程序,例如 LibreOffice。)

以下是为 Inter 字体启用 dligtnumccmpss01ss02 特性的示例。您可以将它们替换为任何其他字体支持的任何其他特性。所有可能的排版特性的完整列表可以在 Wikipedia:排版特性列表 中找到,但在尝试启用某项特性之前,请检查您选择的字体是否支持该特性。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:font.dtd">
<fontconfig>
        <description>Enable some typographic features of Inter font, for all applications.</description>
        <match target="font">
                <test name="family" compare="eq" ignore-blanks="true">
                        <string>Inter</string>
                </test>
                <edit name="fontfeatures" mode="append">
                        <string>dlig on</string>
                        <string>tnum on</string>
                        <string>ccmp on</string>
                        <string>ss01 on</string>
                        <string>ss02 on</string>
                </edit>
        </match>
</fontconfig>

可以通过视觉方式或使用 fc-match -v 字体族名称 命令来验证这些特性是否已启用。

默认字体

为了字体一致性,所有应用程序都应设置为使用衬线字体、无衬线字体和等宽字体别名,这些别名通过 fontconfig 映射到特定字体。有关选项和示例,请参阅 度量兼容字体

标准名称

标准名称是别名 serifsans-serifmonospace。为这些别名设置自定义值将更改几乎所有应用程序的默认值,包括 swayalacrittyfirefox。此示例首选 gnu-free-fonts 用于除等宽字体之外的所有内容,对于等宽字体,首选 Source Code Pro

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <alias>
    <family>serif</family>
    <prefer><family>FreeSerif</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>FreeSans</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Source Code Pro</family></prefer>
  </alias>
</fontconfig>

阿拉伯语

示例 fonts.conf,它为阿拉伯语指定了默认字体,并为拉丁字母保留了西式字体。您将需要 ttf-arabeyes-fontsAURnoto-fonts 才能使以下内容生效。您也可以选择安装任何其他阿拉伯字体,并根据您的偏好相应地更改下面的字体名称

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <!-- Default font for the Arabic language (no fc-match pattern) -->
  <match>
    <test compare="contains" name="lang">
      <string>ar</string>
    </test>
    <edit mode="prepend" name="family">
      <string>Tholoth</string>
    </edit>
  </match>
</fontconfig>

以上方法应该适用于大多数应用程序,但某些应用程序(如 Chromium)不适用于语言匹配测试。如果您发现某些应用程序没有使用您选择的字体,则可以使用以下别名和首选标签,这似乎有效。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <!-- Fallback fonts preference order -->
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans</family>
      <family>Open Sans</family>
      <family>Droid Sans</family>
      <family>Roboto</family>
      <family>Tholoth</family>
      <family>Noto Sans Arabic</family>
    </prefer>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif</family>
      <family>Droid Serif</family>
      <family>Roboto Slab</family>
      <family>Tholoth</family>
      <family>Noto Sans Arabic</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono</family>
      <family>Inconsolata</family>
      <family>Droid Sans Mono</family>
      <family>Roboto Mono</family>
    </prefer>
  </alias>
</fontconfig>

从其他语言中排除阿拉伯文字

可以使用阿拉伯文字但属于其他语言的字体可以被排除。例如,Nastaliq Urdu 字体可能会被默认选择为阿拉伯语。使用以下配置将其列入黑名单,确保系统使用正确的阿拉伯字体。

/etc/fonts/conf.d/66-noto-reject-nastaliq.conf
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <selectfont>
    <rejectfont>
      <glob>/usr/share/fonts/noto/NotoNastaliq*</glob>
    </rejectfont>
  </selectfont>
</fontconfig>

日语

示例 fonts.conf,它还为日语区域设置 (ja_JP) 指定了默认字体,并为拉丁字母保留了西式字体。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <!-- Default font (no fc-match pattern) -->
  <match>
    <edit mode="prepend" name="family">
      <string>Noto Sans</string>
    </edit>
  </match>
  <!-- Default font for the ja_JP locale (no fc-match pattern) -->
  <match>
    <test compare="contains" name="lang">
      <string>ja</string>
    </test>
    <edit mode="prepend" name="family">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>
  <!-- Default sans-serif font -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>sans-serif</string>
    </test>
    <!--<test qual="any" name="lang"><string>ja</string></test>-->
    <edit name="family" mode="prepend" binding="same">
      <string>Noto Sans</string>
    </edit>
  </match>
  <!-- Default serif fonts -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend" binding="same">
      <string>Noto Serif</string>
    </edit>
    <edit name="family" mode="append" binding="same">
      <string>IPAPMincho</string>
    </edit>
    <edit name="family" mode="append" binding="same">
      <string>HanaMinA</string>
    </edit>
  </match>
  <!-- Default monospace fonts -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend" binding="same">
      <string>Noto Sans Mono</string>
    </edit>
    <edit name="family" mode="append" binding="same">
      <string>Inconsolatazi4</string>
    </edit>
    <edit name="family" mode="append" binding="same">
      <string>IPAGothic</string>
    </edit>
  </match>
  <!-- Fallback fonts preference order -->
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans</family>
      <family>Open Sans</family>
      <family>Droid Sans</family>
      <family>Ubuntu</family>
      <family>Roboto</family>
      <family>NotoSansCJK</family>
      <family>Source Han Sans JP</family>
      <family>IPAPGothic</family>
      <family>VL PGothic</family>
      <family>Koruri</family>
    </prefer>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif</family>
      <family>Droid Serif</family>
      <family>Roboto Slab</family>
      <family>IPAPMincho</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono</family>
      <family>Inconsolatazi4</family>
      <family>Ubuntu Mono</family>
      <family>Droid Sans Mono</family>
      <family>Roboto Mono</family>
      <family>IPAGothic</family>
    </prefer>
  </alias>
</fontconfig>

中文

~/.config/fontconfig/fonts.conf
or
/etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <match>
    <test qual="any" name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Serif</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Roboto</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>DejaVu Sans Mono</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Source Han Serif CN</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>
  <!--Windows & Linux Chinese fonts. -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Zen Hei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Micro Hei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Micro Hei Light</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>Microsoft YaHei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimHei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Sans CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimSun</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Serif CN</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimSun-18030</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Source Han Serif CN</string>
    </edit>
  </match>
</fontconfig>

Noto 字体中的中文

应用 Noto 字体,同时用文泉驿微米黑替换 Microsoft 字体

~/.config/fontconfig/fonts.conf
or
/etc/fonts/local.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <match>
    <test qual="any" name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Serif</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Sans</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Sans Mono</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Serif CJK SC</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <match>
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>
  <!--WenQuanYi Zen Hei -> WenQuanYi Micro Hei -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Zen Hei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Zen Hei Lite</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei Lite</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>WenQuanYi Zen Hei Mono</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei Mono</string>
    </edit>
  </match>
  <!--Microsoft YaHei, SimHei, SimSun -> WenQuanYi Micro Hei -->
  <match target="pattern">
    <test qual="any" name="family">
      <string>Microsoft YaHei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimHei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimSun</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei</string>
    </edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family">
      <string>SimSun-18030</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>WenQuanYi Micro Hei</string>
    </edit>
  </match>
</fontconfig>

CJK,但首选其他拉丁字体

需要 noto-fonts-cjk

您可以将 PT Serif/Roboto/Cascadia Code PL 替换为您喜欢的 serif/sans-serif/monospace 字体。

~/.config/fontconfig/fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <!-- Default serif font -->
  <alias binding="strong">
    <family>serif</family>
    <prefer>
      <family>PT Serif</family>
    </prefer>
  </alias>

  <!-- Default sans-serif font -->
  <alias binding="strong">
    <family>sans-serif</family>
    <prefer>
      <family>Roboto</family>
    </prefer>
  </alias>

  <!-- Default monospace font -->
  <alias binding="strong">
    <family>monospace</family>
    <prefer>
      <family>Cascadia Code PL</family>
    </prefer>
  </alias>

  <!-- Default system-ui font -->
  <alias binding="strong">
    <family>system-ui</family>
    <prefer>
      <family>Roboto</family>
    </prefer>
  </alias>

  <!-- Serif CJK -->

  <!-- Default serif when the "lang" attribute is not given -->
  <!-- You can change this font to the language variant you want -->
  <match target="pattern">
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK SC</string>
    </edit>
  </match>

  <!-- Japanese -->
  <!-- "lang=ja" or "lang=ja-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ja</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK JP</string>
    </edit>
  </match>

  <!-- Korean -->
  <!-- "lang=ko" or "lang=ko-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ko</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK KR</string>
    </edit>
  </match>

  <!-- Chinese -->
  <!-- "lang=zh" or "lang=zh-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hans" or "lang=zh-hans-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hans</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant" or "lang=zh-hant-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK TC</string>
    </edit>
  </match>
  <!-- Compatible -->
  <!-- "lang=zh-cn" or "lang=zh-cn-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-tw" or "lang=zh-tw-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Serif CJK TC</string>
    </edit>
  </match>

  <!-- Sans CJK -->

  <!-- Default sans-serif when the "lang" attribute is not given -->
  <!-- You can change this font to the language variant you want -->
  <match target="pattern">
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>

  <!-- Japanese -->
  <!-- "lang=ja" or "lang=ja-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ja</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>

  <!-- Korean -->
  <!-- "lang=ko" or "lang=ko-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ko</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK KR</string>
    </edit>
  </match>

  <!-- Chinese -->
  <!-- "lang=zh" or "lang=zh-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hans" or "lang=zh-hans-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hans</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant" or "lang=zh-hant-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant-hk" or "lang=zh-hant-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant-hk</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK HK</string>
    </edit>
  </match>
  <!-- Compatible -->
  <!-- "lang=zh-cn" or "lang=zh-cn-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-tw" or "lang=zh-tw-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hk" or "lang=zh-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hk</string>
    </test>
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK HK</string>
    </edit>
  </match>

  <!-- Mono CJK -->

  <!-- Default monospace when the "lang" attribute is not given -->
  <!-- You can change this font to the language variant you want -->
  <match target="pattern">
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>

  <!-- Japanese -->
  <!-- "lang=ja" or "lang=ja-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ja</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK JP</string>
    </edit>
  </match>

  <!-- Korean -->
  <!-- "lang=ko" or "lang=ko-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ko</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK KR</string>
    </edit>
  </match>

  <!-- Chinese -->
  <!-- "lang=zh" or "lang=zh-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hans" or "lang=zh-hans-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hans</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant" or "lang=zh-hant-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant-hk" or "lang=zh-hant-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant-hk</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK HK</string>
    </edit>
  </match>
  <!-- Compatible -->
  <!-- "lang=zh-cn" or "lang=zh-cn-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-tw" or "lang=zh-tw-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hk" or "lang=zh-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hk</string>
    </test>
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans Mono CJK HK</string>
    </edit>
  </match>

  <!-- System UI CJK -->

  <!-- Default system-ui when the "lang" attribute is not given -->
  <!-- You can change this font to the language variant you want -->
  <match target="pattern">
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>

  <!-- Japanese -->
  <!-- "lang=ja" or "lang=ja-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ja</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>

  <!-- Korean -->
  <!-- "lang=ko" or "lang=ko-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>ko</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK KR</string>
    </edit>
  </match>

  <!-- Chinese -->
  <!-- "lang=zh" or "lang=zh-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hans" or "lang=zh-hans-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hans</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant" or "lang=zh-hant-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hant-hk" or "lang=zh-hant-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hant-hk</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK HK</string>
    </edit>
  </match>
  <!-- Compatible -->
  <!-- "lang=zh-cn" or "lang=zh-cn-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-cn</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- "lang=zh-tw" or "lang=zh-tw-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-tw</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>
  <!-- "lang=zh-hk" or "lang=zh-hk-*" -->
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>zh-hk</string>
    </test>
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="append" binding="strong">
      <string>Noto Sans CJK HK</string>
    </edit>
  </match>
</fontconfig>

字体的备用风格集

某些字体通过 OpenType 功能附带字符的备用风格集。通常,这些风格集被命名为 ss0x,并包含对单个字符的细微更改。这展示了如何将 ttf-ibm-plex 的等宽版本的默认点状零更改为斜线零。

~/.config/fontconfig/fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
  <match target="font">
    <test name="fontformat" compare="not_eq">
      <string />
    </test>
    <test name="family">
      <string>IBM Plex Mono</string>
    </test>
    <edit name="fontfeatures" mode="assign_replace">
      <string>ss03</string>
    </edit>
  </match>
</fontconfig>

有关此内容的更多信息,请参阅 什么是“风格集?”

参见