Fonts (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Fonts翻译。上次翻译日期:2020-11-13。如果英文版本有所更改,则您可以帮助同步翻译。

引自 维基百科:"计算机字体(computer font),简称字体(font),是包含有一套字形与字符的电子数据文件。"

注意:部分字体在许可协议中规定了使用时的法律限制。

字体类型

现今计算机使用的绝大多数字体,都是属于点阵字体或者轮廓字体二者之一。

点阵字体
每种字形的每种形式和每种尺寸的图像都由点或者像素组成的矩阵构成。由于位图的原故,点阵字体很难进行缩放,特定的点阵字体只能清晰地显示在相应的字号下。但对于 12-16 px 的小号汉字来说,点阵字体往往比其它类型的字体在屏幕上有更好的显示效果。
轮廓字体或称矢量字体
使用贝塞尔曲线、绘图指令和数学公式来描述每种字形,使得字体可以适应各种尺寸。

点阵格式

此格式可以通过 gzip 压缩。

轮廓格式

  • PostScript 字体 - 来自,包含打印机 ASCII 字体 (PFA) 和打印机二进制字体 (PFB)
  • TrueType - Apple 和 Microsoft 定义(ttf)
  • OpenType - 基于 TrueType,Microsoft 定义(otf, ttf)

大部分情况下,TrueType 和 OpenType 之间的差异可以忽略.

其它格式

排版程序 TeX 和配套的字体软件 Metafont 用它们自己的方法渲染字体。部分用于这两个程序的字体的文件后缀有 *pk, *gf, mfvf。新的版本现在也支持 TrueType 和 OpenType.

FontForge (fontforge)是字体编辑程序,可以用自己的格式来储存字体,例如 sfdspline font database)。

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

安装

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

Pacman

有效的源中的字体和字体集可以使用 pacman 来安装。 可以使用 pacman 查询 fontttf.

创建字体包

如果要使用 pacman 管理自己的字体,可以创建 Arch 软件包,并在 AUR 中与社区成员分享。字体包的规范请参考 Font packaging guidelines.

fc-query 可以查看字体类型: fc-query -f '%{family[0]}\n' /path/to/file. FcPatternFormat(3) 中列出了字体的类型。

手动安装字体

要安装不在源中的字体,推荐的方法请参考#创建字体包。这样使得 pacman 在以后能够更新或者移除它们。当然字体也可以通过手工方式安装。

要在系统范围内(对所有用户有效)安装字体,请将文件夹移动到 /usr/share/fonts/ 目录。这些文件需要对每个用户而言都是可读的,使用 chmod 来设置合理的权限 (比如,文件至少为 0444 ,而目录至少为 0555)。要为单个用户安装字体,请使用 ~/.local/share/fonts (~/.fonts/ 现在已经过时了)。 要让 Xserver 能直接载入字体(而不使用某些字体服务),就需要将新增字体的目录加入到 FontPath 中。它位于您的 Xorg 设置目录中(例如 /etc/X11/xorg.conf/etc/xorg.conf) 中。更多详细内容请查阅#X.Org 中的字体[损坏的链接:无效的章节]

然后更新 fontconfig 的字体缓存:

$ fc-cache -vf

手动安装:高级模式

如果您有特殊的字体收集需求,例如使用商业字体、使用不同格式的字体、安装/删除字体相当频繁,或只是希望可以更能够控制访问自己的字体资源,那就相当适合用手动的方式来安装维护字体。采用这种方案会获得很多好处:

  • 避免重复安装不同版本、格式的同一种字体集 (经常容易导致渲染问题)。
  • 字体可使用多个非标准的实体来源 (例如额外的硬盘、分区)。
  • 避免依赖隐晦又占体积的本地字体来源(例如 TeX Live & 09-texlive-fonts.conf,或是 AUR 中的某个字体包);使用这些字体来源时,您可能只需要其中的 5 种字体,却必须连带安装其它 55 种不需要的字体。
  • 避免字体渲染问题,在您的 fontconfig 配置文件已被修改成与安装在系统的那份不同的格式。
  • 只要观察主字体目录下的内容,就能够确定系统上有哪种格式的字体集可供应用程序使用。您不需要复杂、占用大量资源的字体管理程序;gtk2fontsel 和基本的指令工具 (如 fontconfig 软件包下的 fc-query) 就可以将这件差事办得又快又好。
  • 当您安装或升级单一字体,所有应用程序都可以使用新版本字体,包括 LaTeX 相关软件。
  • 有必要的话,可以快速启用 / 停用某个字体集,因为您知道它们在哪个目录下(调试时很好用)。
  • 不需担心有任何多余的 /etc/fonts/conf.avail/nn-foo.conf fontconfig 文件会可能与您的渲染设置起冲突 (特别是当您使用自定的字体设置与修补过的函式库时)。
  • 长远来看,可以省下那些因软件包管理器的失误,解决问题和清除冲突所浪费的宝贵时间。

实际操作上有几种方式,有必要的话可任由软件包管理员采用。以下所举出的操作方式相当有效率,即使字体数目众多也相当安全。

  • 我们要将字体来源位置 (例如 /usr/share/fonts.avail:这是我们要存放字体的位置) 和包含字体集软链接的目录 (/usr/share/fonts) 给分隔开来。
  • 将每个字体集分别放在一个明确命名的子目录下。命名规则必须一致且明确,例如这样:
<ttf|otf|t1>-<字体作者或组织(选用)>-<字体集名称>

字体来源目录的内容会长得像这样:

$ ls /usr/share/fonts.avail

/usr/share/fonts.avail/otf-heuristica
/usr/share/fonts.avail/ttf-liberation
/usr/share/fonts.avail/ttf-ms-arial
...
  • 我们不会涉及到 TeX Live 的字体目录,以避免 LaTeX 软件发生任何问题。既然我们可以使用多个位置,我们将在 /usr/share/fonts 创建软链接,让应用程序可以访问特定的字体集:
# cd /usr/share/fonts
# ln -s ../fonts.avail/otf-heuristica .
# ln -s /opt/texlive/texmf-dist/fonts/truetype/public/opensans ttf-texlive-open.sans

结果如下:

$ ls /usr/share/fonts

ttf-liberation        -> ..fonts.avail/ttf-liberation
ttf-ms-arial          -> ..fonts.avail/ttf-ms-arial
otf-heuristica        -> ..fonts.avail/otf-heuristica
otf-texlive-tex.gyre  -> /opt/texlive/texmf-dist/fonts/opentype/public/tex-gyre
ttf-texlive-open.sans -> /opt/texlive/texmf-dist/fonts/truetype/public/opensans
...

最后,依照惯例执行:

# fc-cache && mkfontscale && mkfontdir

TeX Live Wiki 文章内也有一个类似做法,比较简单,但更适用于单一用户的情形,而非全局设置。

过老的应用程序

过老而不支持 fontconfig 的应用程序(例如 GTK+ 1.x 应用,及 xfontsel),需要在字体目录创建索引:

$ mkfontscale
$ mkfontdir

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

$ for dir in /font/dir1/ /font/dir2/; 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 server 可能会不能成功加载字体目录,这时你需要重新扫描 fonts.dir 文件:

# xset +fp /usr/share/fonts/misc # Inform the X server of new directories
# xset fp rehash                # Forces a new rescan

查询字体是否已经生效,可以使用:

$ xlsfonts | grep fontname
注意: 许多软件包会自动配置 Xorg 安装时需要的字体。若这样,便可跳过此步。

为了让 Xorg 找到并使用你新安装的字体,你必须把字体路径加入到 /etc/X11/xorg.conf(另一个 X.Org 配置文件或许也可以)。

这个例子演示了必须加入到 /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/local"
    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 权限运行如下命令可以使字体在系统范围内生效。

# pacman -S ttf-liberation
  -- output abbreviated, assumes installation succeeded -- 

# fc-cache -vfs
/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”字样。欲知详情请查看具体项目或维基百科。

Github用户Ternstor编写了一段python脚本,可以通过在 AUR 和官方源中所有字体的 PNG 图像产生 HTML 文件: [1].

盲文点字

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

数学和符号字体

非英文使用者

应用程序与浏览器会根据 fontconfig 设置和 Unicode 文字可用的字体来选择其显示字体。用指令 fc-list :lang="双字母的语言代码" 枚举系统安装了哪些可对应该语言的字体。例如,枚举已经安装的阿拉伯文字体,以及支持阿拉伯字的字体:

$ fc-list :lang=ar | cut -d: -f1
/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

若要在多国语言的网站(如Wikipedia、Arch Linux Wiki)中正确显示字形,需要安装下列一项软件包:

中日韩越文字

Pan-CJK
  • 思源字体:Adobe与Google合资开发的,囊括简体中文、繁体中文、日文、韩文字形和来自 Source Sans 字体家族的拉丁文、希腊文和西里尔文字形的 OpenType 字体。
提示: 中文用户在安装思源cjk全集或者noto-cjk全集后,部分文字显示为日文异形字体,可参看Arch Linux Localization (简体中文)#修正简体中文显示为异体(日文)字形 进行解决。
  • ttf-i.bmingAUR - 旧字体风格的中日韩衬线字体
中文字
  • 文泉驿字体
    • wqy-zenhei - 文泉驿正黑体,黑体 (无衬线) 的中文轮廓字体,附带文泉驿点阵宋体 (也支持部分日韩字符)。
    • wqy-bitmapfont - 文泉驿点阵宋体 (衬线) 中文字体。
  • 中文可免费商用字体
    • fonts-cjkAUR - Linux 下的免费商用字体包。
    • fonts-cjk-sc-yrdzstAUR - 杨润东竹石体:本套字体授权全社会免费商用,意味着您可以将其无限制地捆入您的商业产品中,如海报、包装、logo、网页、APP 等。
日文字
  • adobe-source-han-sans-jp-fonts - 思源黑体日文部分
  • otf-ipafont - 正式的日文哥特体(无衬线)与明朝体 (衬线)字形集,高质量的开源字体之一,openSUSE-ja 的默认字形。
  • ttf-hanazono - 一款免费的日文汉字字体,Mincho(衬线)风格。
  • ttf-sazanami - 自由的日文 TrueType 字体。已经过期无人维护,但在某些环境下可当作备用字体使用。
  • ttf-vlgothicAUR - 日文哥特体字形。Debian/Fedora/Vine Linux 的默认字体
  • ttf-mplusAUR - 现代哥特体的日文轮廓字体。包含所有日文平假名/片假名、Basic Latin、Latin-1 Supplement、Latin Extended-A、IPA Extensions。另外还有大部分日文汉字、希腊字母、西里尔字与越南文字,可以 7 磅 (等比例) 或 5 磅 (等宽) 字重显示。
  • ttf-monapoAUR - 日文字体,可正确显示 2ch 的 Shift JIS 艺术创作
韩文字

阿拉伯和乌尔都文字

波斯文字

  • ttf-irfontsAUR[损坏的链接:package not found] - 伊朗信息与通信技术高级理事会(SCICT)的官方标准波斯字体集
  • ttf-bornaAUR[损坏的链接:package not found] - Borna Rayaneh 波斯 B 字体系列
  • ttf-x2AUR - X 系列 2 字体是建立在开源可使用的字体基础上并扩展支持波斯语,阿拉伯语,乌尔都语,普什图语,达里语,乌兹别克语,库尔德语,维吾尔语,老土耳其(奥斯曼)和现代土耳其(罗马).
  • ttf-iran-nastaliqAUR[损坏的链接:package not found] - 由伊朗信息高级理事会公布的一款 Unicode 书法字体

缅甸文字

西里尔文字

另请参阅#等宽字体#无衬线字体#衬线字体

  • ttf-paratypeAUR - ParaType类别的字体: sans, serif, mono, 扩展的西里尔和拉丁文字, OFL 认证

希腊文字

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

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

希伯来文字

  • culmusAUR - 自由的希伯来文字体集合

印地文字

(This one contains a "look of disapproval" that might be more to your liking than the bdf-unifont one mentioned elsewhere in this document)

高棉文字

僧伽罗文字

  • ttf-lklugAUR - 僧伽罗文 (Sinhala) Unicode 字体

塔米尔文字

  • ttf-tamilAUR - 塔米尔文 (Tamil) Unicode 字体

藏文字

Microsoft 字体

参阅微软字体

Apple OS X 字体

  • ttf-mac-fontsAUR - Mac OS X TrueType 字体
  • ttf-macAUR[损坏的链接:package not found] - Mac OS X TrueType 字体。这个软件包没有内含 ttf 字体 (只有 otf 字体),用户必须自备这些字体。

等宽字体

建议:每位用户偏爱的字体不尽不同,如想找到您心目中的理想字体,还请多加尝试。 如果您没有太多时间,可以阅读 Dan Benjamin 博客的文章:十大最适合编程的字体(英文)。

这里内还有 Trevor Lowing 整理的一长串字体清单:http://www.lowing.org/fonts/ (英文)。

Slant 上的字体图片比较: 最好的编程字体是什么?[失效链接 2021-11-10 ⓘ](英文)

还有 Stack Overflow 上的带一些图片的回答: 推荐编程字体(英文)。

TrueType 字体

点阵字体

无衬线字体

手写体

衬线字体

未分类字体

X11中的字体选择顺序

Fontconfig 会自动选择一个满足当前显示需求的字体。如果浏览一个既有英文又有中文的窗口,而默认的字体不支持中文,它会自动用另外的字体显示中文。通过$XDG_CONFIG_HOME/fontconfig/fonts.conf 可以调整字体的选择顺序。

如果要优先使用 Serif 字体,遇到显示不了的字再使用某个特定的中文字体,配置文件会是这样:

<?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 检查字体选择设置是否正确.

Sans-serif 和 monospace 字体也可以增加一样的设置,更多信息请参考 fontconfig 说明和 Font configuration#Replace or set default fonts

字体别名

在 Linux 系统中有几种字体别名,它们实际代表着别的字体,这样以达到让应用程序的字体看起来类似。最常见的别名有:serif 代表一种衬线体(关于衬线体与非衬线体概念请参考UbuntuCN:字体#基础知识——译注)(例如 DejaVu Serif、宋体);sans-serif代表一种无衬线体(例如 DejaVu Sans 和各种黑体);而monospace 则代表等宽字体(例如 DejaVu Sans Mono)。 然而,这些别名所代表的字体有可能会变化,而且通常 KDE 和其他桌面环境中的字体管理工具不会显示其内在联系。

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

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

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

小提示

列出已安装字体

你可以使用以下命令来列出当前系统中所有已安装字体的字体:

$ fc-list

应用程序专用的字体高速缓冲

Matplotlib (python-matplotlibpython2-matplotlibAUR) 使用自己的字体高速缓冲,因此更新字体后记得删除 $HOME/.matplotlib/fontList.cache$HOME/.cache/matplotlib/fontList.cache, $HOME/.sage/matplotlib-1.2.1/fontList.cache 等文件。这样它才会再一次产生高速缓冲并找到新字体 [2][失效链接 2021-11-10 ⓘ]

终端中的双向字体

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

参见