跳转至内容

字体配置

来自 ArchWiki
(重定向自 Font Configuration)

Fontconfig 是一个库,旨在为应用程序提供可用 字体 的列表,以及字体渲染方式的配置。

FreeType 库根据此配置渲染字体。 freetype2 字体渲染包包含已启用的字节码解释器 (BCI),以获得更好的字体渲染效果,尤其是在 LCD 显示器上。请参阅 #Fontconfig 配置字体配置/示例

虽然 Fontconfig 在现代 Unix 和类 Unix 操作系统中经常使用,但有些应用程序依赖于原始的字体选择和显示方法,即 X Logical Font Description (XLFD)。

字体路径

要让应用程序知道字体,它们必须被目录化以便快速访问。

Fontconfig 默认已知的字体路径为:/usr/share/fonts/~/.local/share/fonts(以及现已弃用的 ~/.fonts/)。Fontconfig 会递归扫描这些目录。为便于组织和安装,建议在添加字体时使用这些字体路径。

要查看已知 Fontconfig 字体列表

$ fc-list ':' file

有关更多输出格式,请参阅 fc-list(1)

通过查看其日志来检查 Xorg 已知的字体路径

$ grep /fonts ~/.local/share/xorg/Xorg.0.log
提示
  • 您还可以使用命令 xset q 来检查 Xorg 已知的字体路径列表。
  • 如果 Xorg 以 root 权限运行,请使用 /var/log/Xorg.0.log

请注意,Xorg 不像 Fontconfig 那样递归搜索 /usr/share/fonts/ 目录。要添加一个路径,必须使用完整路径

Section "Files"
    FontPath     "/usr/share/fonts/local/"
EndSection

有关 Xorg 配置的更多详细信息,请阅读 Xorg#配置。如果您希望按用户设置字体路径,可以通过将以下行添加到 ~/.xinitrc 来添加和删除默认字体路径

xset +fp /usr/share/fonts/local/           # Prepend a custom font path to Xorg list of known font paths
xset -fp /usr/share/fonts/sucky_fonts/     # Remove the specified font path from Xorg list of known font paths

要查看 Xorg 已知字体列表,请使用 xlsfonts 命令,该命令来自 xorg-xlsfonts 包。

Fontconfig 配置

Fontconfig 配置记录在 fonts-conf(5) 手册页中。

配置可以按用户通过 $XDG_CONFIG_HOME/fontconfig/fonts.conf (通常是 $HOME/.config/fontconfig/fonts.conf) 进行,也可以全局通过 /etc/fonts/local.conf 进行。用户配置中的设置优先于全局配置。这两个文件都使用相同的语法。

  • 需要启用 50-user.conf 预设才能使用户配置生效,而 51-local.conf 预设用于全局配置。请参阅 #预设 部分了解如何启用这些预设。
  • 配置文​​件和目录:~/.fonts.conf/~/.fonts.conf.d/~/.fontconfig/*.cache-* 已被弃用,在未来版本中默认不会被读取。新路径分别为 $XDG_CONFIG_HOME/fontconfig/fonts.conf$XDG_CONFIG_HOME/fontconfig/conf.d/NN-name.conf$XDG_CACHE_HOME/fontconfig/*.cache-*。如果使用第二个位置,请确保命名有效(其中 NN 是一个两位数,例如 001099)。

Fontconfig 将所有配置收集到一个中心文件(/etc/fonts/fonts.conf)中。此文件在 Fontconfig 更新时会被替换,不应进行编辑。Fontconfig 感知的应用程序会加载此文件以了解可用字体及其渲染方式;只需重启此类应用程序即可加载新配置。此文件是全局配置(/etc/fonts/local.conf)、/etc/fonts/conf.d/ 中配置的预设以及用户配置文件($XDG_CONFIG_HOME/fontconfig/fonts.conf)的规则集合。fc-cache 可用于重建 Fontconfig 配置,但更改仅在新启动的应用程序中可见。

注意 对于使用 字体控制面板 的某些桌面环境(如 GNOMEKDE Plasma),将自动创建或覆盖用户字体配置文件。对于这些桌面环境,最好匹配您已定义的字体配置以获得预期行为。同时还要确保桌面 语言环境 设置或 区域设置 被配置的字体支持,否则字体配置可能会被覆盖。

Fontconfig 配置文​​件使用 XML 格式,需要以下头部

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>

  <!-- settings go here -->

</fontconfig>

本文档中的配置示例省略了这些标签。

预设

/usr/share/fontconfig/conf.avail 目录中安装了预设。可以通过创建指向它们的符号链接来启用它们,包括按用户和全局的,如 /etc/fonts/conf.d/README 中所述。这些预设将覆盖其各自配置文件中匹配的设置。

例如,全局启用子像素 RGB 渲染

# ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d/

要实现相同的功能,但改为按用户配置

$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d
$ ln -s /usr/share/fontconfig/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d

抗锯齿

字体栅格化 将矢量字体数据转换为位图数据以便显示。结果可能由于锯齿而显得参差不齐。抗锯齿可用于提高字体边缘的视觉分辨率。抗锯齿默认情况下是启用的。要禁用它

  <match target="font">
    <edit name="antialias" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
注意 某些应用程序可能会覆盖默认的抗锯齿设置

微调

字体微调(也称为指令)是使用数学指令来调整轮廓字体的显示,使其与栅格化网格(即显示器的像素网格)对齐。其目的是使字体看起来更清晰,从而更容易阅读。没有微调时,当显示器的 DPI 约为 300 时,字体会正确对齐。

字节码解释器 (BCI)

使用 BCI 微调时,TrueType 字体中的指令会根据 FreeType 的解释器进行渲染。BCI 微调对具有良好微调指令的字体效果很好。微调默认情况下是启用的。要禁用它

  <match target="font">
    <edit name="hinting" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
注意 BCI 实现可以在脚本 /etc/profile.d/freetype2.sh 中切换。通过将参数 truetype:interpreter-version=NN(其中 NN 是所选版本)传递给脚本中的 FREETYPE_PROPERTIES 变量来设置解释器。最常用的值是
  • 35 表示经典模式(模拟 Windows 98),
  • 40 表示最小模式(精简版 Infinality,这是默认设置)。
子像素渲染应使用子像素 BCI。有关详细信息,请参阅 [1]

自动微调器

自动微调器尝试进行自动微调,忽略字体中嵌入的任何微调信息。最初,它是默认设置,因为 TrueType2 字体受到专利保护,但现在这些专利已过期,使用它的理由非常少。它对具有损坏或无微调信息的字体效果更好,但对于具有良好微调信息的字体,其效果将大大不理想。通常,常见字体属于后者,因此自动微调器将无用。自动微调器默认情况下是禁用的。要启用它

  <match target="font">
    <edit name="autohint" mode="assign">
      <bool>true</bool>
    </edit>
  </match>

微调样式

微调样式是为与网格对齐而进行的字体重塑量。微调值为:hintnonehintslighthintmediumhintfullhintslight 会使字体与网格对齐时更模糊,但能更好地保留字体形状(请参阅 [2]),而 hintfull 将是与像素网格良好对齐的清晰字体,但会丢失更多的字体形状。hintslight 会隐式地以仅垂直模式使用自动微调器,以有利于非 CFF(.otf)字体的原生字体信息。

hintslight 是默认设置。要更改它

  <match target="font">
    <edit name="hintstyle" mode="assign">
      <const>hintnone</const>
    </edit>
  </match>
注意 某些应用程序可能会覆盖默认的微调设置

子像素布局

Fontconfig 需要了解您的 子像素布局 才能正确显示您的字体。使用 子像素布局 监视器测试(来自 The Lagom LCD monitor test pages)来找出您的子像素排列。

子像素几何形状通过 rgba 属性进行配置,该属性可以是

  • rgb绿 — 最常见,是当今大多数显示器使用的
  • bgr
  • vrgb — 垂直
  • vbgr
  • none — 无子像素渲染
  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
  </match>
注意 在没有 #子像素渲染 的情况下,freetype 只关心子像素的对齐(垂直或水平)。例如,RGBBGR 之间没有区别。

不支持不寻常的子像素布局,例如“Pentile”和“RGBY”,这些有时会在电视、OLED 和移动屏幕上找到。对于这些设备,最好放弃子像素渲染,并通过使用 none 选项依赖于灰度。

子像素渲染

子像素渲染 是一种通过利用子像素来有效将水平(或垂直)分辨率提高三倍的字体渲染清晰度技术。在 Windows 机器上,此技术称为 ClearType

FreeType2 提供两种不同类型的子像素渲染,称为 Harmony 和 ClearType(FT_CONFIG_OPTION_SUBPIXEL_RENDERING[3]。从 FreeType 2.10.3 开始,Arch Linux 默认启用 ClearType 子像素渲染[4]

启用 ClearType 子像素渲染时,建议使用 LCD 滤镜。Harmony 子像素渲染需要设置 LCD 滤镜,并且在默认 LCD 几何形状下,它等同于带有 lcdlight 滤镜的 ClearType[5]。有关如何启用 LCD 滤镜及其优点,请参阅下一节。

LCD 滤镜

使用 ClearType 子像素渲染时,应启用 LCD 滤镜,该滤镜旨在减少颜色边缘。这在 FreeType 2 API 参考的LCD 过滤部分有所描述。不同的选项在 FT_LcdFilter 下进行了描述,并在此 LCD 滤镜测试页面进行了说明。

lcddefault 滤镜对大多数用户都适用。其他滤镜可用于特殊情况:lcdlight;一种较轻的滤镜,非常适合看起来太粗或模糊的字体;lcdlegacy,原始的 Cairo 滤镜;以及 lcdnone 来完全禁用它。

  <match target="font">
    <edit name="lcdfilter" mode="assign">
      <const>lcddefault</const>
    </edit>
  </match>

高级 LCD 滤镜规范

如果内置的 LCD 滤镜不令人满意,可以通过构建自定义 freetype2 包并修改硬编码的滤镜来非常具体地调整字体渲染。可以使用 Arch 构建系统从源代码构建和安装包。

签出 freetype2 PKGBUILD 并下载/解压构建文件。Arch 构建系统#检索 PKGBUILD 源列出了一些方法。

通过编辑文件 src/freetype-VERSION/include/freetype/config/ftoption.h 并取消注释 FT_CONFIG_OPTION_SUBPIXEL_RENDERING 宏来启用 ClearType 子像素渲染。

然后,编辑文件 src/freetype-VERSION/src/base/ftlcdfil.c 并查找常量 default_weights 的定义

 static const FT_LcdFiveTapFilter  default_weights =
    { 0x10, 0x40, 0x70, 0x40, 0x10 };

此常量定义了一个应用于渲染字形的低通滤镜。根据需要进行修改。(参考:freetype 列表讨论)保存文件,构建并安装自定义包

$ makepkg --noextract
# pacman --remove --nodeps freetype2
# pacman --upgrade freetype2-VERSION-ARCH.pkg.tar.zstd

重新启动 X。lcddefault 滤镜现在应该以不同的方式渲染字体。

特定字体或字体样式的自定义设置

某些字体可能不适合 BCI 微调。可以仅为这些字体禁用它

...
<match target="font">
    <test name="family" qual="any">
        <string>My Font</string>
    </test>
    <edit name="hinting" mode="assign">
        <bool>false</bool>
    </edit>
</match>
...

设置默认或回退字体

匹配测试

设置默认或回退字体的可靠方法是添加一个 XML 片段以执行匹配测试。例如,使用“binding”属性,以下设置将在 Georgia 的位置回退到 Gentium

...
<match target="pattern">
  <test qual="any" name="family" compare="eq"><string>Georgia</string></test>
  <edit name="family" mode="assign" binding="same"><string>Gentium Book Plus</string></edit>
</match>
...

在上面,“compare”属性可以是“eq”(即,完全等于 Georgia)、“contains”(例如,匹配 GeorgiaGeorgia Pro)或其他值。请参阅 fonts-conf(5)

别名

另一种方法是使用 <alias> 来设置“首选”字体。匹配 <family> 元素的字体将被编辑,在匹配的 <family> 之前添加 <prefer> 元素的列表。以下示例在调用 Helvetica 时将回退到 Bitstream Vera Sans

...
<alias>
    <family>Helvetica</family>
    <prefer>
        <family>Bitstream Vera Sans</family>
    </prefer>
</alias>
...

<alias> 也可用于在某些字形丢失时指定回退字体。例如,许多版本的 Helvetica Neue 不包含希腊字符。用户可能安装了 Helvetica Neue 并希望将其用于拉丁字符,并且由于 FreeSansHelvetica 相似而将其作为希腊字符的回退。但是,同一用户可能已将另一种字体 Noto Sans 设置为默认的无衬线字体。以下将实现这一点

...
<alias>
    <family>Helvetica Neue LT Pro</family>
    <prefer>
        <family>Helvetica Neue LT Pro</family>
        <family>FreeSans</family>
    </prefer>
</alias>
...

如果用户只是想在字形丢失时回退到默认字体,则不需要上述内容。

字体白名单和黑名单

<selectfont> 元素与 <acceptfont><rejectfont> 元素结合使用,以选择性地将字体添加到解析列表和匹配请求的白名单或黑名单。最简单和最常见的用例是拒绝用户需要安装但因匹配通用字体查询而导致用户界面出现问题的字体。

首先,获取字体本身列出的 Family 名称

$ fc-scan .fonts/lklug.ttf --format='%{family}\n'
LKLUG

然后,在 <rejectfont> 块中使用该 Family 名称

<selectfont>
    <rejectfont>
        <pattern>
            <patelt name="family" >
                <string>LKLUG</string>
            </patelt>
        </pattern>
    </rejectfont>
</selectfont>

通常,当两个元素结合使用时,<rejectfont> 首先应用于更通用的匹配模式以拒绝一个大组(例如整个目录),然后在其之后使用 <acceptfont> 将较大黑名单组中的单个字体列入白名单。

<selectfont>
    <rejectfont>
        <glob>/usr/share/fonts/OTF/*</glob>
    </rejectfont>
    <acceptfont>
        <pattern>
            <patelt name="family" >
                <string>Monaco</string>
            </patelt>
        </pattern>
    </acceptfont>
</selectfont>

禁用位图字体

位图字体有时用作缺失字体的回退,这可能导致文本显示为像素化或过大。使用 #预设 中的 70-no-bitmaps-except-emoji.conf 预设来禁用此行为。

禁用所有字体的嵌入位图

~/.config/fontconfig/conf.d/20-no-embedded.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>
</fontconfig>

为特定字体禁用嵌入位图

<match target="font">
  <test qual="any" name="family">
    <string>Monaco</string>
  </test>
  <edit name="embeddedbitmap">
    <bool>false</bool>
  </edit>
</match>

如果为所有字体禁用了嵌入位图,则仍然可以为特定字体启用它们,以防其不嵌入位图而无法工作。例如,对于 Noto Color Emoji

<?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 target="font">
    <test name="family" qual="any">
      <string>Noto Color Emoji</string>
    </test>
    <edit name="embeddedbitmap">
      <bool>true</bool>
    </edit>
  </match>
</fontconfig>

禁用位图字体缩放

要禁用位图字体缩放(这通常会使它们模糊),请删除 /etc/fonts/conf.d/10-scale-bitmap-fonts.conf。请注意,这可能会破坏 emoji 字体的缩放,例如 Segoe UI Emoji,使其变得巨大。

要重新启用位图字体缩放,请重新创建符号链接

# ln -s /usr/share/fontconfig/conf.avail/10-scale-bitmap-fonts.conf /etc/fonts/conf.d/

为不完整的字体创建粗体和斜体样式

FreeType 能够为没有 italicbold 样式的字体自动创建这些样式,但前提是应用程序明确要求。由于程序很少发送这些请求,因此本节涵盖了手动强制生成缺失样式。

首先,按如下方式编辑 /usr/share/fonts/fonts.cache-1。将修改副本保存在另一个文件中,因为使用 fc-cache 进行字体更新将覆盖 /usr/share/fonts/fonts.cache-1

假设安装了 Dupree 字体

"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:etc...

复制该行,将 style=Regular 更改为 style=Bold 或任何其他样式。对于斜体,将 slant=0 更改为 slant=100;对于粗体,将 weight=80 更改为 weight=200;或将它们组合起来以实现 粗斜体

"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:etc...

现在将必要的修改添加到 $XDG_CONFIG_HOME/fontconfig/fonts.conf

...
<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
         <!-- other fonts here .... -->
     </test>
     <test name="weight" compare="more_eq"><int>140</int></test>
     <edit name="embolden" mode="assign"><bool>true</bool></edit>
</match>

<match target="font">
    <test name="family" qual="any">
        <string>Dupree</string>
        <!-- other fonts here .... -->
    </test>
    <test name="slant" compare="more_eq"><int>80</int></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
                <matrix>
                    <double>1</double><double>0.2</double>
                    <double>0</double><double>1</double>
                </matrix>
        </times>
    </edit>
</match>
...
提示 使用现有粗体字体的 embolden 值可以使其更粗。

规则优先级

Fontconfig 按数字顺序处理 /etc/fonts/conf.d 中的文件。因此,01-aaa.conf02-bbb.conf 的规则将与单个 01-aaabbb.conf 文件具有相同效果,该文件首先包含 01-aaa 的规则,然后是 02-bbb 的规则。

通常,这意味着前缀较小的文件具有更高的优先级。但是,Fontconfig 语法是灵活的,允许新规则覆盖现有规则。因此,建议#查询当前设置来测试规则交互的结果。

本文或本章节的准确性存在争议。

原因: 实际行为似乎与以下描述不同。(在 Talk:Font configuration#Rule priority 中讨论)

请注意,用户在 $XDG_CONFIG_HOME/fontconfig/fonts.conf 和目录 $XDG_CONFIG_HOME/fontconfig/conf.d 中定义的规则通过文件 /etc/fonts/conf.d/50-user.conf 加载,并且通常优先于以更高数字开头的文件中定义的规则。

查询当前设置

要找出哪些设置正在生效,请使用 fc-match --verbose。例如

$ fc-match --verbose Sans
family: "DejaVu Sans"(s)
hintstyle: 3(i)(s)
hinting: True(s)
...

fonts-conf(5) 中查找数字的含义。例如,“hintstyle: 3”表示“hintfull”。

不支持 Fontconfig 的应用程序

注意 Qt 6.8 至少在 xcb 后端已开始将 X11 资源置于 Fontconfig 之上,因此这些设置对于 Qt 6 客户端将具有权威性,尽管它们完全支持 Fontconfig。

URxvt 这样的某些应用程序会忽略 Fontconfig 设置。您可以通过使用 ~/.Xresources 来解决此问题,但这不像 Fontconfig 那样灵活。示例(有关选项的说明,请参阅 #Fontconfig 配置

~/.Xresources
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintslight
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb

确保在 X 启动时通过 xrdb -q 正确加载设置(有关更多信息,请参阅 X 资源)。

故障排除

字体变形

请参阅 HiDPI 以获取有关处理高 DPI 或混合 DPI 显示器的说明:使用与物理硬件不匹配的 DPI 设置可能导致字体显示模糊。

Calibri、Cambria、Monaco 等字体渲染不正确

一些可缩放字体具有嵌入的位图版本,这些版本会被渲染,主要是在较小的尺寸下。在这种情况下,使用度量兼容字体作为替代可以改善渲染效果。

您也可以通过禁用嵌入位图来强制所有尺寸都使用可缩放字体,但会牺牲一些渲染质量。

应用程序覆盖微调设置

某些应用程序或桌面环境可能会覆盖默认的 Fontconfig 微调和抗锯齿设置。例如,在使用 Qt 应用程序(如 vlcsmplayer)的 GNOME 3 中,可能会发生这种情况。在这种情况下,您需要使用该应用程序的特定配置程序。对于 GNOME,请尝试 gnome-tweaks

应用程序未采用 GNOME 设置的微调

例如,在 GNOME 下,有时 Firefox 会应用完全微调,即使在 GNOME 设置中将其设置为“无”,这会导致字体清晰且加宽。在这种情况下,您需要在 fonts.conf 文件中添加微调设置

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
 <match target="font">
  <edit mode="assign" name="hinting">
   <bool>false</bool>
  </edit>
 </match>
</fontconfig>

在此示例中,微调设置为 grayscale

GTK 应用程序中的微调不正确

在某些桌面环境中,尤其是在 GNOMEPlasma 之外,某些 GTK 应用程序无法正确读取字体配置。为解决此问题,请安装 xsettingsdxsettingsd-gitAUR 并在每次系统启动时执行它。另请参阅 Xsettingsdxsettingsd wiki 以获取更多信息。可以使用以下常见配置对其进行配置

~/.xsettingsd
Xft/Hinting 1
Xft/HintStyle "hintslight"
Xft/Antialias 1
Xft/RGBA "rgb"

如果这在其他应用程序中不起作用,您可以安装 xorg-xrdb 并提供以下配置

~/.Xresources
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.antialias: 1
Xft.rgba: rgb 

然后,您可以在每次系统启动时执行脚本 xrdb -merge ~/.Xresources 来应用选项。另请参阅 X 资源#不支持 Fontconfig 的应用程序

GTK4 程序中的微调

GTK4 和 libadwaita 程序会忽略字体微调设置。为解决此问题,请创建或修改以下配置

~/.config/gtk-4.0/settings.ini
[Settings]
gtk-hint-font-metrics=true
gtk-font-rendering=manual

另请参阅 GTK 文档GTK issue 3787此相关注释

生成的 PDF 中 Helvetica 字体问题

如果以下命令

fc-match helvetica

产生

helvR12-ISO8859-1.pcf.gz: "Helvetica" "Regular"

那么由 xorg-fonts-75dpi 提供的点阵字体很可能被嵌入到各种应用程序中“打印到文件”或“导出”生成的 PDF 中。这个点阵字体可能是因为安装了通常**不推荐**的整个 xorg 组而安装的。要解决像素化字体问题,您可以卸载该软件包。安装 gsfonts(Type 1)或 tex-gyre-fonts(OpenType)以获得 Helvetica(以及其他 PostScript/PDF 基本字体)的相应免费替代品。

当您打开需要 Helvetica 但未嵌入 Helvetica 以供查看的 PDF 时,也可能会遇到类似问题。

FreeType 破坏位图字体

一些用户报告了问题(FS#52502),在将 freetype2 升级到 2.7.1 版本后,点阵字体的名称发生了变化,导致终端模拟器和 dwmdmenu 等其他程序出现混乱,回退到另一种(不同的)字体。这是由 PCF 字体族格式的更改引起的,其描述在他们的*发布说明* [6] 中。从旧格式过渡的用户可能需要创建一个*字体别名*来解决问题,正如 [7] 中描述的解决方案,这里也提供了该解决方案:

假设我们要为 terminus-font 创建一个别名,它在之前描述的 freetype2 更新中从 Terminus 重命名为 xos4 Terminus

本文或本章节已过时。

原因: /etc/fonts/conf.avail 已被 /usr/share/fontconfig/conf.avail 替换,但它用于预装文件。(在 Talk:Font configuration 中讨论)
  • /etc/fonts/conf.avail/ 中为字体别名创建一个配置文件
/etc/fonts/conf.avail/33-TerminusPCFFont.conf
<?xml version="1.0"?>
 <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
 <fontconfig>
     <alias>
         <family>Terminus</family>
         <prefer><family>xos4 Terminus</family></prefer>
         <default><family>fixed</family></default>
     </alias>
 </fontconfig>
  • /etc/fonts/conf.d 目录中创建一个指向它的符号链接。在我们的例子中,我们会像这样链接:ln -s /etc/fonts/conf.avail/33-TerminusPCFFont.conf /etc/fonts/conf.d 来永久更改。

现在一切都应该像更新前一样工作,字体别名不应生效,但请确保重新加载 .Xresources 或先重启显示服务器,以便受影响的程序可以使用别名。

下划线在 DejaVu Monospace 字体下不渲染

自 Pango 1.44 起,在使用 DejaVu Sans Mono 字体时,下划线字符在某些字体尺寸下会消失。解决方法是使用 Liberation Mono 作为等宽字体,请参阅 #设置默认或回退字体

调试 FreeType 字体

freetype2-demos 提供了用于调试 FreeType 字体配置的工具。ftview 是一个 GUI,您可以在其中实时预览并调整字体渲染设置。例如

$ ftview -e unic -d 1024x768x24 -r 96 10 /usr/share/fonts/noto/NotoSans-Regular.ttf

文本模糊

一些应用程序(例如 Chromium/Electron)没有正确应用伽马校正,有些应用程序在某些情况下(灰度)禁用了它,这会导致深色背景上的小文本模糊,并且在 <=1080p 屏幕上文本无法阅读。这是一个Chromium/Electron 的长期问题,解决方法是通过环境变量 FREETYPE_PROPERTIES="cff:no-stem-darkening=0 autofitter:no-stem-darkening=0"启用笔画加深

font-config-info

您可以使用 font-config-info-gitAUR 来收集您有效的字体配置。它从多个 GTK 源、X 资源XSETTINGS 协议和 fontconfig 查询信息。

参见