Fonts (简体中文)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.
翻译状态: 本文是英文页面 Fonts翻译,最后翻译时间:2014-05-24,点击这里可以查看翻译后英文页面的改动。

引自 维基百科:

计算机字体(computer font),简称字体(font),是包含有一套字形与字符的电子数据文件。」

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

字体类型

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

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

常见格式

  • bdfbdf.gz – 点阵字体,bitmap distribution format(位图布局格式)的缩写,后者表示以 gzip 压缩的 bdf
  • pcfpcf.gz – 点阵字体, portable compiled font(可移植编译字体)的缩写,后者表示以 gzip 压缩的 pcf
  • psfpsfupsf.gzpsfu.gz – 点阵字体,前两者分别是 PC screen font(电脑屏幕字体)与 PC screen font Unicode(Unicode 电脑屏幕字体)的缩写。两者分别表示用 gzip 压缩的 psf 与 {{ic|psfu}(不适用于 X.Org)。
  • pfapfb – 矢量字体,分别是 PostScript font ASCII 与 PostScript font binary 的缩写。PostScript 字体内带有打印指令。
  • ttf – outline,TrueType 字体。作为 PostScript 字体的替代。
  • otf – outline,OpenType 字体。带有 PostScript 打印指令的 TrueType 字体。

在多数情况下,TrueType 和 OpenType 的技术差异可以忽略,一些带有 ttf 扩展的字体实际上是 OpenType 字体。

其它格式

排版程序 TeX 和配套的字体软件 Metafont 用它们自己的方法渲染字体。部分用于这两个程序的字体的文件后缀有 *pk, *gf, mfvf

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

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

安装

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

Pacman

有效的源中的字体和字体集可以使用 pacman 来安装。 可以使用以下方式查找字体:

$ pacman -Ss font

或者也可以只查找 ttf 字体:

$ pacman -Ss ttf

创建字体包

如果您想用 pacman 来管理你自己的字体,可以创建一个 Arch 软件包。这些包也可以在 AUR 中与社区成员分享。下面是一个创建软件包的基本样例。您还可以参考 PKGBUILD 来获取更多有关创建软件包的资料。

pkgname=ttf-fontname
pkgver=1.0
pkgrel=1
pkgdesc="custom fonts"
arch=(any)
depends=(fontconfig xorg-font-utils)
source=("http://someurl.org/$pkgname.tar.bz2")
install=$pkgname.install

package() {
  install -d "$pkgdir/usr/share/fonts/TTF"
  install -m644 "$srcdir/$pkgname/"*.ttf "$pkgdir/usr/share/fonts/TTF/"
}

PKGBUILD 推断这些字体是 TrueType 字体。需要创建一个安装文件 (ttf-fontname.install) 以便更新字体缓存:

post_install() {
  echo -n "Updating font cache... "
  fc-cache >/dev/null -f
  mkfontscale /usr/share/fonts/TTF
  mkfontdir   /usr/share/fonts/TTF
  echo done
}

post_upgrade() {
  post_install
}

post_remove() {
  post_install
}

如果想更方便地从TTFs创建自己的包,可以使用 AUR 中的 makefontpkgAUR

手动安装字体

要安装不在源中的字体,推荐的方法请参考#创建字体包。这样使得 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"

终端字体

注意: 这部分是关于 Linux console。如果您想获取其它的更加丰富的关于终端的解决方案 (完备的 Unicode 字体, 现代的图形化配适器,等等。), 请参照 fbterm, KMSCON 或者类似的项目.

默认情况下, virtual console 使用内核的内置字体,其包含 CP437 字体集,[1] 但是这个设置可以非常容易改变.

Linux console 默认使用 UTF-8 编码, 但是由于使用的是标准的兼容 VGA 的帧缓存, 终端字体限定为 256 或 512 个字形。如果字体超出了256个字形, 那么颜色的数量就会从 16 减少到 8。为了针对给定的 Unicode z值分配正确的可显示符号,一种特殊的翻译映射,通常叫做 unimap,是必须的。 就目前来看大多数终端字体都具有内置的 unimap, 但是历史上它是需要被单独载入的。

kbd 包提供了改变虚拟终端字体和字体映射的工具。可以使用的字体存储在 /usr/share/kbd/consolefonts/ 目录下, 那些以 .psfu 或者 .psfu.gz 结尾的具有一个内嵌的 Unicode 翻译映射。

键盘映射 (Keymap) 是按键和计算机使用字符的对应关系表,可以在 /usr/share/kbd/keymaps/ 的子目录下找到,详情请查看 Keyboard configuration in console

注意: Replacing the font can cause issues with programs that expect a standard VGA-style font, such as those using line drawing graphics.

预览和测试

提示: 这里有一个整理过的预览影像数据库:Linux 终端字体截图

showconsolefont 指令会以表格形式显示可用字与字符:

$ showconsolefont

setfont 工具可以暂时改变字体,让用户可以决定是否要设为永久性设置。只要指定字体名称即可 (这些字体位于 /usr/share/kbd/consolefonts/),比如:

$ setfont lat2-16

如果对新换的字体不满意,可以用以下指令撤消至默认字体 (就算终端显示乱码,这个指令依然可以执行,将指令「盲打」进去即可):

$ setfont
注意: setfont 只作用于当前正在使用的终端。其它终端无论活跃与否都不受影响。

持久性配置

/etc/vconsole.confFONT 变量可以用来在启动时设置字体, 对于所有的终端都具有持久性作用。详情请查看 man 5 vconsole.conf

若要显示 Č, ž, đ, šŁ, ę, ą, ś 之类的字符,请使用 lat2-16.psfu.gz 这个字体:

/etc/vconsole.conf
...
FONT=lat2-16

这代表使用 ISO/IEC 8859 字符的第二部分,尺寸设置为 16。您可以使用其它值更改字体尺寸 (如 lat2-08)。您可以在Wikipedia的这张表查询 8859 规范定义的本地。

若要为早期的用户空间套用指定字体,请在 /etc/mkinitcpio.conf 使用 consolefont 勾子。更多信息请参阅 Mkinitcpio (简体中文)#钩子(HOOKS)

如果开机时字体没有任何变化,或只变化一下就恢复原样,则有可能是因为显卡驱动引导时字体被复位,然后终端被切至帧缓冲 (framebuffer)。提早装入图形驱动可以避免这个问题。若要在套用 /etc/vconsole.conf 之前将帧缓冲准备好,请参阅核心模式设置#提早引导 KMS[2] 或其它方式。

字体包

以下是官方源和 AUR 中提供的安装包列表以供参考。支持 Unicode 的字体都标注上了“Unicode”字样。欲知详情请查看具体项目或维基百科。

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

盲文点字

  • ttf-ubraille - 包含 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

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

阿拉伯和乌尔都文字

波斯文字

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

缅甸文字

中日韩越文字

Pan-CJK
  • adobe-source-han-sans-otc-fonts - 思源黑体 是由 Adobe 与 Google 合资开发的,囊括简体中文、繁体中文、日文、韩文字形和来自 Source Sans 字体家族的拉丁文、希腊文和西里尔文字形的高质量无衬线 OpenType 字体
中文字
日文字
  • adobe-source-han-sans-jp-fonts - 思源黑体日文部分
  • otf-ipafont - 正规的日文哥特体 (无衬线) 与明朝体 (衬线) 字形集;其中一项高质量的开放原始码字形。openSUSE-ja 的缺省字形。
  • 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-sazanami - 自由的日文 TrueType 字体。已经过期无人维护,但在某些环境下可当作备案字体使用。
  • ttf-hanazono - 一款免费的日文汉字字体,Mincho (serif)风格。
韩文字

西里尔文字

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

  • 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[broken link: archived in aur-mirror] - Mac OS X TrueType 字体。这个软件包没有内含 ttf 字体 (只有 otf 字体),用户必须自备这些字体。

等宽字体

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

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

Slant 上的字体图片比较: 最好的编程字体是什么?(英文)

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

TrueType 字体

点阵字体

无衬线字体

手写体

衬线字体

未分类字体

X11中的字体回滚顺序

Fontconfig 会自动选择一个符合当前场景的字体。也就是说,如果有人正在浏览一个既有英文又有中文的窗口,而默认的字体不支持中文,它会自动切换到另一种字体以便显示中文。

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>

当然你也可以为 Sans-serif和 monospace 字体像上面一样添加一段。更多信息请参考 fontconfig 说明。

字体别名

在 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-matplotlib) 使用自己的字体高速缓冲,因此更新字体后记得删除 $HOME/.matplotlib/fontList.cache$HOME/.cache/matplotlib/fontList.cache, $HOME/.sage/matplotlib-1.2.1/fontList.cache 等文件。这样它才会再一次产生高速缓冲并找到新字体 [4]