字体

来自 Arch Linux 中文维基

引自维基百科:“计算机字体或电脑字体,简称字体,是包含有一套字形与字符的电子数据文件。”

注意: 部分字体许可协议可能会有一些法律限制。

字体格式[编辑 | 编辑源代码]

现在使用的计算机字体绝大多数都属于点阵轮廓数据格式。

点阵字体
用点或者像素组成的矩阵代表每种字形的每种形式和尺寸的图像。
轮廓字体,或称矢量字体
使用贝塞尔曲线、绘图指令和数学公式描述每种字形,使得字符轮廓可以适应各种尺寸。

点阵格式[编辑 | 编辑源代码]

这些格式也可以被 gzip 压缩。可用的点阵字体请参见#点阵

轮廓格式[编辑 | 编辑源代码]

  • Adobe 的 PostScript 字体,有多种格式,如打印机 ASCII 字体(Printer Font ASCII,PFA)和打印机二进制字体(Printer Font Binary,PFB)
  • Apple 和 Microsoft 的 TrueType(扩展名为 ttf
  • Microsoft 的 OpenType,基于 TrueType(扩展名为 otfttf

在大多数情况下都可以忽略 TrueType 和 OpenType 之间的技术差异。

其它格式[编辑 | 编辑源代码]

排版程序 TeX 和配套的字体软件 Metafont 使用它们自己的传统方法渲染字体。部分用于这两个程序的字体文件扩展名有 *pk*gfmfvf。更新的版本也支持 TrueType 和 OpenType 字体。

FontForgefontforge)是一个字体编辑程序,可以以自己基于文本的原生格式 sfdspline font database)储存字体。

SVG 格式也有自己的字体描述方法。

安装[编辑 | 编辑源代码]

可以使用多种方法安装字体。

Pacman[编辑 | 编辑源代码]

可以使用 pacman 安装已启用的软件源中的字体和字体集。

可用的字体可以通过查询包查找(比如以 fontttf 作为关键字查找)。

创建字体包[编辑 | 编辑源代码]

字体应该由 pacman 管理,这可以通过创建 Arch 包完成。这些包也可以在 AUR 中与社区分享。用于安装字体的包都非常相似;请参见字体打包指南

可以用 fc-query 查看字体的字体族,例如:fc-query -f '%{family[0]}\n' /文件/路径FcPatternFormat(3) 中描述了输出的格式。

手动安装[编辑 | 编辑源代码]

要安装不在源中的字体,推荐的方法是#创建字体包。这使得 pacman 在以后能够更新或者移除它们。

或者,也可以手动安装字体:

  • 要为单个用户安装,则安装到 ~/.local/share/fonts/
    • 多数时候这就足够了,除非以其他用户的身份运行图形程序。
    • 之前曾使用过 ~/.fonts/,但现在已被弃用。
  • 要为系统(所有用户)安装,则安装到 /usr/local/share/fonts/
    • 可能需要先创建该目录:mkdir -p /usr/local/share/fonts
    • /usr/share/fonts/ 由包管理器管理,请勿手动修改。

是否要创建子目录由用户决定,各发行版也有不同。为清晰起见,可将每个字体族放在单独的目录里。Fontconfig 将递归搜索默认路径,确保可以发现子目录下的文件。

以下是一个目录结构示例:

 /usr/local/share/fonts/
 ├── otf
 │   └── SourceCodeVariable
 │       ├── SourceCodeVariable-Italic.otf
 │       └── SourceCodeVariable-Roman.otf
 └── ttf
     ├── AnonymousPro
     │   ├── Anonymous-Pro-B.ttf
     │   ├── Anonymous-Pro-I.ttf
     │   └── Anonymous-Pro.ttf
     └── CascadiaCode
         ├── CascadiaCode-Bold.ttf
         ├── CascadiaCode-Light.ttf
         └── CascadiaCode-Regular.ttf

请确保所有用户都有读取字体文件的权限,即至少将文件 chmod444,目录为 555

要让 Xserver 直接载入字体(而不是使用某些字体服务),就需要将新增字体的目录加入到 FontPath 中。它位于 Xorg 配置文件(例如 /etc/X11/xorg.conf/etc/xorg.conf) 中。更多详细内容请参见#较旧的应用程序

最后,更新 Fontconfig 的缓存(通常不需要,因为使用 Fontconfig 库的软件会这样做):

$ fc-cache

较旧的应用程序[编辑 | 编辑源代码]

对于不支持 Fontconfig 的旧应用程序(例如 GTK 1.x 应用程序和 xfontsel),需要在字体目录中创建索引:

$ mkfontscale
$ mkfontdir

或在一条命令中包含多个目录:

$ for dir in /字体/目录1/ /字体/目录2/; do xset +fp $dir; done && xset fp rehash

或者,如果字体被安装在不同的子文件夹中,比如在 /usr/share/fonts 下:

$ for dir in * ; do if [  -d  "$dir"  ]; then cd "$dir";xset +fp "$PWD" ;mkfontscale; mkfontdir;cd .. ;fi; done && xset fp rehash

有时 X 服务器可能无法加载字体目录,这时需要重新扫描所有 fonts.dir 文件:

# xset +fp /usr/share/fonts/misc # 将新目录告诉 X 服务器
# xset fp rehash                 # 强制重新扫描

要查询字体是否已经生效:

$ xlsfonts | grep fontname
注意: 许多软件包在安装时会自动配置 Xorg。这种情况下无需执行此步骤。

这也可以在 /etc/X11/xorg.conf/etc/X11/xorg.conf.d 中全局设置。

这个例子演示了必须加入到 /etc/X11/xorg.conf 中的一节内容。请根据实际需要添加或删除路径。

 # 让 X.Org 知道自定义字体目录
 Section "Files"
     FontPath    "/usr/share/fonts/100dpi"
     FontPath    "/usr/share/fonts/75dpi"
     FontPath    "/usr/share/fonts/cantarell"
     FontPath    "/usr/share/fonts/cyrillic"
     FontPath    "/usr/share/fonts/encodings"
     FontPath    "/usr/share/fonts/misc"
     FontPath    "/usr/share/fonts/truetype"
     FontPath    "/usr/share/fonts/TTF"
     FontPath    "/usr/share/fonts/util"
 EndSection

Pango 警告[编辑 | 编辑源代码]

如果系统使用 Pango,那它就会从 Fontconfig 读取字体来源。

(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'

如果看到类似上面的错误,或在应用程序中看到方块而不是文字,就需要添加字体并更新字体缓存。以下示例以 ttf-liberation 字体为例讲解(成功安装软件包后)如何解决这个问题,并以 root 权限运行使字体在系统范围内生效。

# fc-cache
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs
/var/cache/fontconfig: cleaning cache directory
fc-cache: succeeded

可以这样测试设置的默认字体:

$ fc-match
LiberationMono-Regular.ttf: "Liberation Mono" "Regular"

字体包[编辑 | 编辑源代码]

以下是一个有选择的列表,其中包括 AUR 以及官方存储库中的许多字体包。标记为“Unicode”的字体具有广泛的 Unicode 支持。

提示:Archfonts 是一个可用于生成官方存储库和 AUR 中所有 TTF 字体的概述的 Python 脚本。

点阵[编辑 | 编辑源代码]

注意: pango 1.44 放弃支持 FreeType,转而支持 HarfBuzz,所以不再支持传统 BDF/PCF 点阵字体,因此一些应用程序(例如 gnome-terminal)将不再能够使用此类字体,结果显示方块而不是字形。参见 FS#63297Pango issue #386HarfBuzz issue #1897

拉丁文字[编辑 | 编辑源代码]

字体族[编辑 | 编辑源代码]

提供基本字体集的包:

Packages not providing a base font set:

旧版 Microsoft 字体包:

  • Microsoft 字体 (ttf-ms-fontsAUR) – Andalé Mono, Courier New, Arial, Arial Black, Comic Sans, Impact, Lucida Sans, Microsoft Sans Serif, Trebuchet, Verdana, Georgia, Times New Roman
  • Vista 字体 (ttf-vista-fontsAUR) – Consolas, Calibri, Candara, Corbel, Cambria, Constantia

等宽[编辑 | 编辑源代码]

支持 编程连字的字体标有 ⟶ 符号。更多等宽字体参见#点阵#字体族

相关网站:

无衬线[编辑 | 编辑源代码]

衬线[编辑 | 编辑源代码]

非拉丁文字[编辑 | 编辑源代码]

古代文字[编辑 | 编辑源代码]

  • ttf-ancient-fontsAUR —— 包含 Aegean、Egyptian、Cuneiform、Anatolian、Maya 和 Analecta 文字的 Unicode 符号的字体

阿拉伯文[编辑 | 编辑源代码]

  • ttf-amiriAUR —— 一个典型的阿拉伯文誊抄体 (Naskh) 字体,一开始由 Amiria Press 采用。其拉丁字符基于 Crimson (otf-crimson) [1] [2]
  • ttf-arabeyes-fontsAUR —— 自由的阿拉伯文字体集合
  • ttf-qurancomplex-fontsAUR —— 位于麦地那的 King Fahd Glorious Quran Printing Complex 制作的字体
  • ttf-sil-lateefAUR —— 来自 SIL 的 Unicode 阿拉伯文字体
  • ttf-sil-scheherazadeAUR —— 来自 SIL 的 Unicode 阿拉伯文字体(传统阿拉伯文字体的替代品)

孟加拉文[编辑 | 编辑源代码]

详见 Localization/Bengali#Fonts

盲文[编辑 | 编辑源代码]

  • ttf-ubrailleAUR —— 包含 Unicode 盲文符号的字体。

中日韩越文字[编辑 | 编辑源代码]

泛 CJK[编辑 | 编辑源代码]
提示:中文用户在安装思源cjk全集或者noto-cjk全集后,部分文字显示为日文异形字体,可参看Arch Linux Localization#修正简体中文显示为异体(日文)字形 进行解决。
中文[编辑 | 编辑源代码]

参见 Localization/Chinese#Fonts

日文[编辑 | 编辑源代码]

参见 Localization/Japanese#Fonts

韩文[编辑 | 编辑源代码]

参见 Localization/Korean#Fonts

越南语[编辑 | 编辑源代码]
  • ttf-hannom – 用于喃字的越南语 TrueType 字体

西里尔文字[编辑 | 编辑源代码]

另请参阅#拉丁文字

  • ttf-paratypeAUR – Font family by ParaType: sans, serif, mono, extended cyrillic and latin, OFL 许可证
  • otf-russkopisAUR – A free OpenType cursive font for Cyrillic script

希腊文字[编辑 | 编辑源代码]

几乎所有 Unicode 字体都包含希腊代码集 (也包含多调变音符号)。某些额外字体包虽然不包含完整的 Unicode 集,但拥有高质量的希腊字字形 (也包含拉丁字):

  • otf-gfsAUR - 由 Greek Font Society 选用的 OpenType 字体
  • ttf-mgopenAUR - 来自 Magenta 的专业 TrueType 字体

希伯来文字[编辑 | 编辑源代码]

  • opensiddur-hebrew-fontsAUR – Large collection of Open-source licensed Hebrew fonts. There are also few Latin, Greek, Cyrillic, Arabic, and Amharic.
  • culmusAUR —— 不错的自由的希伯来文字体集合。
  • alefbetAUR – 2 Hebrew fonts (at the moment): the commonly used "David Libre", and the handwriting font "Gveret Levin".
  • ttf-ms-fontsAUR —— 包含 Arial 和其他字体。

印地文字[编辑 | 编辑源代码]

另请参阅 Localization/Indic#Fonts

高棉文字[编辑 | 编辑源代码]

蒙古语和通古斯语[编辑 | 编辑源代码]

  • ttf-abkaiAUR – Fonts for Sibe, Manchu and Daur scripts (incomplete, currently in development)

波斯文字[编辑 | 编辑源代码]

壮侗语系[编辑 | 编辑源代码]

  • fonts-tlwgAUR – Collection of scalable Thai fonts
  • ttf-laoAUR – Lao TTF font (Phetsarath_OT)

藏缅语族[编辑 | 编辑源代码]

Emoji 和符号[编辑 | 编辑源代码]

Unicode 标准的一部分用于称为“emoji”的象形字符。

Emoji 字体有不同的格式:CBDT/CBLC(Google)、SBIX(Apple)、COLR/CPAL(Microsoft)和 SVG(Mozilla/Adobe)。

只要安装了一种支持 Emoji 的字体,它就应当开箱即用。根据标准,Emoji 字体的回退需要额外的代码来处理。

有关 Emoji 的发现和输入,参见 应用程序列表/工具#文字输入

软件 CBDT/CBLC SBIX COLR/CPAL SVG Emoji font fallback
Freetype
Pango Freetype
WebKitGTK Freetype
Qt Freetype [3] [4] [5]
Chromium Freetype
Firefox Freetype ,参阅 Firefox#字体问题以获得解决方案。
注意: Qt 只能同时使用字体列表中的前 255 个[6]。请确保你的首选后备字体中有 Emoji 字体。

CBDT/CBLC:

SVG:

仅轮廓字体:

  • ttf-symbolaAUR —— 提供许多 Unicode 符号,包括 Emoji。

颜文字,有时被称为“日式表情符号”,由来自各种字符集的字符组成,包括 CJK 和印度字符。下面的一组包涵盖了大部分现有颜文字中所使用的字符:gnu-free-fontsttf-arphic-umingttf-indic-otf

数学[编辑 | 编辑源代码]

此外,texlive-coretexlive-fontsextra 中包含许多数学字体,例如 Latin Modern Math 和 STIX 字体。有关配置参见 TeX Live#Making fonts available to Fontconfig

其他操作系统字体[编辑 | 编辑源代码]

后备字体顺序[编辑 | 编辑源代码]

Fontconfig 会自动选择一个满足当前显示需求的字体。例如,如果浏览一个既有英文又有中文的窗口,而默认的字体不支持中文,它会自动用另外的字体显示中文。

Fontconfig 允许每个用户通过 $XDG_CONFIG_HOME/fontconfig/fonts.conf 调整字体的选择顺序。 如果要优先使用衬线字体,遇到中文再使用某个特定的中文字体,配置文件会是这样:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
   <family>serif</family>
   <prefer>
     <family>喜欢的拉丁衬线字体名称</family>
     <family>中文字体名称</family>
   </prefer>
 </alias>
</fontconfig>
提示:
  • 如果系统的 locale 是中文,请将 LC_LANG 设置为 und,否则中英文都会使用中文字体渲染。
  • 修改配置后可以用 fc-match -a monospace | head 检查后备字体设置是否正确。

无衬线和等宽字体也可以增加一样的设置,更多信息请参考 fontconfig 手册。

另请参阅 Font configuration#Set default or fallback fonts

字体别名[编辑 | 编辑源代码]

有几种字体别名实际上代表着别的字体,以让应用程序可以使用类似的字体。最常见的别名是:serif 代表衬线字体(如 DejaVu Serif);sans-serif 代表无衬线字体(如 DejaVu Sans);以及 monospace 代表等宽字体(如 DejaVu Sans Mono)。然而,这些别名所代表的字体有可能会变化,但 KDE 和其他桌面环境的字体管理工具通常不会显示对应关系。

如果想通过别名反向查找是展现了哪种字体,请运行:

$ fc-match monospace
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

在这种情况下 monospace 别名展现的是 DejaVuSansMono.ttf 字体。

提示与技巧[编辑 | 编辑源代码]

列出所有已安装的字体[编辑 | 编辑源代码]

可以使用以下命令列出系统上所有已安装且可用的 Fontconfig 字体。

$ fc-list

列出特定语言的已安装字体[编辑 | 编辑源代码]

应用程序和浏览器根据 fontconfig 首选项和 Unicode 文本的可用字体字形选择和显示字体。要列出特定语言的已安装字体,请使用命令 fc-list :lang="双字母语言代码"。例如,要列出已安装的阿拉伯字体或支持阿拉伯字形的字体:

$ fc-list -f '%{file}\n' :lang=ar
/usr/share/fonts/TTF/FreeMono.ttf
/usr/share/fonts/TTF/DejaVuSansCondensed.ttf
/usr/share/fonts/truetype/custom/DroidKufi-Bold.ttf
/usr/share/fonts/TTF/DejaVuSansMono.ttf
/usr/share/fonts/TTF/FreeSerif.ttf

列出特定 Unicode 字符的已安装字体[编辑 | 编辑源代码]

要搜索支持特定 Unicode 码点的等宽字体:

$ fc-match -s monospace:charset=1F4A9

Set terminal font on-the-fly[编辑 | 编辑源代码]

For terminal emulators that use X resources, e.g. xterm or rxvt-unicode, fonts can be set by using escape sequences. Specifically, echo -e "\033]710;$font\007" to change the normal font (*font in ~/.Xresources), and replace 710 with 711, 712, and 713 to change the *boldFont, *italicFont, and *boldItalicFont, respectively.

$font uses the same syntax as in ~/.Xresources and can be anything the terminal emulator will support. (Example: xft:dejavu sans mono:size=9)

应用程序专用的字体缓存[编辑 | 编辑源代码]

Matplotlib (python-matplotlib) 使用自己的字体缓存,因此更新字体后记得删除 $HOME/.matplotlib/fontList.cache$HOME/.cache/matplotlib/fontList.cache, $HOME/.sage/matplotlib-1.2.1/fontList.cache 等文件,这样它才会重新生成缓存并找到新字体 [8]

终端中的双向文本[编辑 | 编辑源代码]

要在终端中正确的显示阿拉伯语和希伯来语,请运行 BiCon(bicon-gitAUR)。

参见[编辑 | 编辑源代码]