Font configuration (简体中文) - ArchWiki

Jump to content

Related articles

- Font configuration/Examples
- 字体
- Metric-compatible fonts
- Microsoft fonts (简体中文)
- Java Runtime Environment fonts (简体中文)
- X Logical Font Description

Fontconfig 是一个库，用于为应用程序提供可用的字体列表，及配置字体如何渲染。FreeType 库依此配置渲染字体。Arch 上的 freetype2 渲染库使用了为 LCD 屏幕上渲染优化过的字节码解释器（bytecode interpreter，BCI）。可参见#预置和示例。

大多数 Unix 类系统现在使用 Fontconfig，但部分程序仍使用原始的字体选择、显示方法，X Logical Font Description。

## 字体路径

Fontconfig 的默认路径包含`/usr/share/fonts`、`/usr/local/share/fonts/`、`~/.local/share/fonts`。fontconfig 将在这些路径下递归查找。在安装字体时，建议放在这些路径下。

以下命令列出 fontconfig 已知的字体文件：

    $ fc-list : file

fc-list(1) 有更多的输出格式。

Xorg 已知的字体路径可通过其日志了解：

    $ grep /fonts ~/.local/share/xorg/Xorg.0.log

提示：

- 也可使用`xset q`命令。
- 若 Xorg 以根用户权限运行，可查看`/var/log/Xorg.0.log`。

注意，Xorg 不像 Fontconfig 一样递归查找 `/usr/local/share/fonts`，要添加路径必须添加完整的路径。

更多细节请阅读 Xorg 配置。如果要为用户单独配置字体路径，可以修改对应的`~/.xinitrc`：

    xset +fp /想要/添加的/字体/路径
    xset -fp /想要/排除的/字体/路径

## Fontconfig 配置

fonts-conf(5) 有 Fontconfig 的文档。

单用户配置文件在`$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是从00到99的两位数字。

Fontconfig 把所有配置集中到一个单独的中心文件（`/etc/fonts/fonts.conf`）中。Fontconfig 自身升级的时候会改动这个文件，不建议直接修改它。对接 Fontconfig 的程序查看这个文件就知道可用的字体及如何渲染之。重启这类程序即可载入新的配置。该文件是全局配置（`/etc/fonts/local.conf`）、配置预置（`/etc/fonts/conf.d/`）、用户配置（`$XDG_CONFIG_HOME/fontconfig/fonts.conf`）的合成。使用`fc-cache`命令重建 Fontconfig 的配置，但只有新运行的程序会使用新的配置。

注意： 某些桌面环境（如 GNOME 和 KDE）的字体设置界面会自动创建、覆盖用户的配置文件。对于此类桌面环境，最好让设置界面中的选项和配置文件相符合。同时请确定桌面的区域设置或 locale 受配置好的字体支持，否则字体配置可能被覆盖。

Fontconfig 配置文件使用 XML 格式，其需要的头部如下：

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

     <!-- 这里是设置 -->

    </fontconfig>

本文将忽略这个部分。

### 预置

预置存放在 `/usr/share/fontconfig/conf.avail`。可以用创建符号链接到此处的形式来启用。这些预置会覆盖对应的配置。

以下命令启用全局的次像素 RGB 渲染：

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

以下命令启用用户的次像素 RGB 渲染：

    $ 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

### 抗锯齿（antialias）

字体光栅化将文字从一个向量表示（比如一个TrueType字体）转化到光栅或者位图表示。因为混叠现象，结果可能会有锯齿状边缘。抗锯齿技术可以使边缘看起来更平滑。

Fontconfig 默认启用抗锯齿，如想禁用：

      <match target="font">
        <edit name="antialias" mode="assign">
          <bool>false</bool>
        </edit>
      </match>

注意： 某些程序可能会忽略这项设置。

### 字体微调（hinting）

字体微调使用数学指令来调整轮廓字体的显示，使其与光栅化网格对齐。在低屏幕分辨率下，微调对于生成清晰易读的文本至关重要。在高分辨率屏幕下，字体微调的必要性降低。

#### 字节码解释器（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
- 36 - 经典 Windows ClearType 模式，Windows XP 以前
- 38 - “Infinality”模式，定制性高，性能较低，已不再开发
- 40 - 最小模式（精简版 Infinality，默认值）

次像素渲染应该使用次像素 BCI。 详见https://freetype.org/freetype2/docs/reference/ft2-properties.html#tt_interpreter_version_xxx]。

#### 自动微调（autohint）

自动微调依自己的算法尝试微调，无视所有的微调指令。以前这曾是默认启用的选项，因为 TrueType2 字体受专利保护，但现在专利已过期，基本不需要使用它。如果字体的微调指令很少或没有，效果尚可，否则效果是不如 BCI 的。常见字体都有完备的微调指令，因此自动微调用处不大，现在是默认关闭的。要启用：

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

#### 微调风格（hintstyle）

微调风格是对字体调整显示、使其与光栅化网格对齐的调整量。支持的值有`hintnone`、`hintslight`、`hintmedium`、`hintfull`，微调程度依次加深，即字形更扭曲、更清晰。`hintslight`对于非 CFF（.otf）字体在竖直方向上隐式使用自动微调而非字体本身的微调指令。

默认选项是`hintslight`，要更改的话：

      <match target="font">
        <edit name="hintstyle" mode="assign">
          <const>hintnone</const>
        </edit>
      </match>

注意： 有些程序会无视默认微调设置。

### 像素排布（RGBA）

大多数显示器使用 RGB 排列像素，但也有例外。Fontconfig 需要知道显示器类型才能正确显示字体。这个选项的值有四个：RGB、BGR、V-RGB、V-BGR。如果你的显示器旋转使用，可修改这个值。如果找不到相应的资料，这个网站可协助测试。

      <match target="font">
        <edit name="rgba" mode="assign">
          <const>rgb</const>
        </edit>
      </match>

注意，如果不开启次像素渲染（见下），freetype 只关心是水平还是竖直，不关心像素排布。

### 次像素渲染

次像素渲染（英文维基百科页面）通过单独控制一个像素的三个分色，在一个方向上可获得三倍分辨率。

FreeType2 提供两种次像素渲染方式（`FT_CONFIG_OPTION_SUBPIXEL_RENDERING`），Harmony 和 ClearType。参见[1]。

若使用 ClearType 次像素渲染，建议启用 LCD 滤镜（见下）。Harmony 次像素渲染不需要。

从 FreeType 2.10.3 起，Arch 默认启用 ClearType 次像素渲染。[2]

### LCD 滤镜（lcdfilter）

LCD 滤镜是用来减轻 ClearType 次像素渲染的色边现象的。这是 FreeType 2 API 文档的描述，其中 FT_LcdFilter 一节解释了选项。这个网页展示了不同 LCD 滤镜的测试效果。

大多数用户可使用`lcddefault`。其他滤镜包括：太粗或模糊的字体可使用`lcdlight`；`lcdlegacy`是原始的 Cairo 滤镜；`lcdnone`完全关闭。

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

#### 高级 LCD 滤镜选项

### 为某些字体/字重单独设置

### 设置/替换默认字体

### 字体白名单/黑名单

### 禁用位图字体

### 禁用位图字体缩放

### 自动生成粗体和斜体

### 优先级规则

#### 查看现有设置

## 无视 Fontconfig 设置的程序

## 疑难问题

### 某些字体（Calibri, Cambria, Monaco 等）不正常显示

### 程序无视微调或抗锯齿设置

### 程序不遵循GNOME的微调设置

### GTK 程序中微调不正确

### 生成 PDF 中 Helvetica 不正常显示

### FreeType 不正确显示位图字体

### Dejavu Monospace 不渲染下划线

### 调试 FreeType 字体

## 参见

- Wikipedia:Fontconfig
- Fonts in X11R6.8.2 - Official Xorg font information
- FreeType 2 overview
- Gentoo font-rendering thread
- On slight hinting
- FreeType 2 API Reference: Controlling FreeType Modules

Category:

- Fonts (简体中文)