SDB:字体配置

跳转至: 导航, 搜索
Icon-cleanup.png 此頁面需要清理 因為他不遵循我們的 維基規範
如果您想要貢獻,請務必要熟悉這些規範。如果您有任何問題,別猶豫,快 聯絡我們, 我們十分樂意能幫助您! :-)
本文教您如何配置 openSUSE 的字体显示效果。字体显示效果是个众口难调的话题,我们不可能有一个统一的方案。默认方案的目标是「显示得清楚」而不是「显示得好看」。出于眼镜度数和审美的不同,有些人就觉得隐约朦胧是美的,而另一些人就要保留某些字体的「神韵」。诸位看官看我说得这么含蓄,您也一定明白了,想要用我的「手」来贴您的「意」那是不可能的任务。因此我们在此只能提供一些设置技巧和方法,最终效果还要靠各位自己动手才能丰衣足食。

背景知识

字体的分类

说到字体,用户首先想到的会是字体的后缀,也即格式:.ttf/.otf/.ttc。但是这样分类是不科学的,比如上面的三个格式中的ttf和ttc其实都是同一类型的字体:TrueType 字体。而otf格式则是 OpenType 字体。实际上字体可以有三种分类方式:

图形界面字体和终端字体

这里的终端指的是 Ctrl + Alt + F1 切换到的 tty 而不是 konsole/gnome-terminal 这些,因为后两者依然属于图形界面应用程序。

终端字体和图形界面字体可以说代表了两个时代,终端字体多半遵守的是 Adobe 的 PostScript Type 1 标准,而图形界面字体主要有两种,点阵字体和 Truetype 字体,多数为 Truetype 字体。所以可以说如今终端字体和图形界面字体的主要区别就是是否使用了微软与苹果联合开发的 Truetype 技术。

终端字体主要有 .afm/.pfa/.pcf/.spd 等格式,其中最常见的是 .pcf 格式(看你的 /usr/share/fonts 文件夹)。主要目的是用于打印(无论通过打印机打印到纸上还是打印到屏幕上都叫「打印」,这是一种比较古老的认识,显示/打印功能分开是离我们很近的事情了)。

图形界面字体还有两种子分类:点阵字体和 Truetype 字体。它们之间的区别就是是否带有 hinting 辅助渲染信息。没有的就是点阵字体(又叫位图字体,Bitmap 字体),有就是 Truetype/Opentype(两者几乎一回事)字体。hinting 辅助渲染信息可以理解为给字体渲染引擎的帮助文件,使用这些信息可以让你的字体显示的更漂亮,所以这些信息一般是一些渲染引擎参数。而点阵字体和 Truetype 字体理论上通过文件名后缀无法区分(至少在 Linux 上是这样,Windows 下有些点阵字体是用 .fon 后缀的)。

无衬线字体、衬线字体和等宽字体

对应的英文分别是:sans-serif,serif,monospace。

中国大陆习惯叫做:黑体、宋体、等宽字体。中国台湾习惯叫做:黑体、明体、等宽字体。

于是现在你只听名字就知道这是什么类型的字体了,比如「苹果骊黑繁」,就是供繁体中文使用的一种无衬线字体。

无衬线字体就是笔画上下一般粗,衬线字体就是有装饰线(比如宋体的「点、提」等笔画)。等宽字体是无衬线字体的一种,区别在于它的任何一个字的宽度都是固定的,主要用于在终端中显示。

以上参考自:维基百科「无衬线体」词条

需要注意的是:中文没有等宽字体。全部中国字都是等宽的(要不怎么叫「方块字」)。等宽字体是严格对应西文的。

另外:中文同样没有斜体、粗体。这就像西文没有「首段空两格」的书写规则(实际上台湾也没有)一样。我们古代字写得斜叫做「心术不正」; 而毛笔写字叫「细笔」、「粗笔」,用途完全就不同,只有女子才练「细笔」,而「粗笔」是提写匾额才用的。虽然诸如微软雅黑等字体中出现了粗体,但不代表那是正确的。

以上都是台湾同胞对 LaTex 中文排版进行研究时总结出来的,非常有意义,有兴趣的可以参考 cwtex 排版系统

点阵字体、轮廓字体、笔画字体

这是维基百科计算机字体词条的总结。也是字体设计界的共识。分类非常之科学,但对普通用户意义不大。

点阵字体,其实就是用像素点拼字,保存为一张图片。字体就是茫茫多的图片合集。因此缺点就非常明显了,只能用于特定大小,不能缩放。比如 10px 和 12px 的字体实际上使用的是不同的图片。好处是它不用渲染,因此在极小字号的情况下会避免渲染引擎失真,一般用于 8-10px 的字体显示。

轮廓字体(描边字体、矢量字体)使用贝兹曲线、渲染指令和数学表达式来描述字形。因此可以缩放。但问题在于它必须使用渲染引擎。而渲染引擎是不可能在 10px 字号下清晰的显示出「醪」这样的字的。

笔画字体使用一系列笔画和辅助信息来表示方案,配合大小、某一变种(普通、粗体、斜体、粗斜体)下的线型来描述字形。

之所以说这种分类科学,因为厂家就是这么设计字体的,它也不会把点阵字体同时划分到终端字体和图形界面字体中去。说它意义不大是因为:轮廓字体包括 PostScript 字体、Truetype 字体和 OpenType 字体。所以相当于没分类:点阵字体单列不说; 笔画字体基本上就是个蓝图,只有 BitStream 和文鼎出过,BitStream 的字体在 Linux 显示丑到爆,文鼎的笔画字体不是免费的,引擎也是自有的。于是其实只有一类:轮廓字体。比起第一种分类还难以理解。而且它把最难的 PostScript 字体没有区分用途,实际上 PostScript 是一种打印机方案格式,所以这些字体都是用于打印的,中文完全没有这种字体(原因后面讲)。而如今 Truetype/OpenType 字体的差别小到忽略不计(最初 Truetype 不支持打印,OpenType 就捆绑了 PostScript 指令集来使之可打印,但后来打印机厂商支持打印 Truetype 了,于是如今两者也就剩下在各种标准中出现的位置不同这一个文字游戏上的差别了)。所以剖析后发现显得很科学的分类其实什么都没有讲。

不是全部字体都能够被配置

我们主要依照第一类、第二类分类方法来讲为什么不是全部字体都能够配置,第三类分类只起到参照作用(怕写了没用)。

  • 没有中文终端字体可以来给你配置。

前面说了终端字体主要遵循 Adobe PostScript Type 1 标准,最常见的格式是 .pcf。那么我们现在来讲一下这个 .pcf 格式为什么无法被中文所使用:因为它的最大容量是 256 字节。即使从中文点阵字体中提取「部分」(比如 grub 引导菜单的中文化,用哪个字号的哪个字,就去提取它在点阵字体中的图片),也放不了几张。

而实现中文 tty 其实需要在内核中使用 Framebuffer,并调用用户空间中的 freetype 函数库来渲染 Truetype 字体。难度不亚于维护自己的内核。这种补丁茫茫多,但真正能够质量达标进入内核的还没有,可能是设计似乎违反了内核的思路吧(不是很懂)。有兴趣的可以参考 openSUSE-M17N 邮件列表 po 文

  • 点阵字体无需配置。

它就不使用渲染引擎。图片都是死的,你怎么配置都没用。

  • 你没有笔画字体可以拿来在 Linux 下配置。

引擎是私有的,只支持 Windows。在 Linux 下耳熟能详的 BitStreams 字体其实是这个厂家出的一款点阵字体。

综上,你在 Linux 下可以配置的只有 Truetype/Opentype 两类字体。它们使用 freetype 渲染,fontconfig 配置。

字体配置很难

之所以字体配置被称为「黑魔法」,因为它需要关照的地方太多了。

  • freetype 有好几种不同的渲染引擎,哪个好看呢?你要有编程知识,不然就爬遍 google 去搜索去理解吧。
  • fontconfig 提供了茫茫多的选项,跟用来压片的 ffmpeg/x264 差不多,光把选项搞懂就够你少年白头了。
  • 每种字体的 hinting 辅助渲染信息,也就是渲染参数均不同,你需要想办法弄到并搞清楚这些参数,才有能在 fontconfig 中设对。弄不到?继续 google 爬文吧...几乎情况是这样的:真正明白的少数人都在开发,自己基本全默认; 少数自以为明白的到处发文,但有对有错; 你们完全不懂也认为自己不懂的对的错的都要看,根本无法分辨。
  • 点阵和轮廓字体的配置方法不同。以上均针对轮廓字体。你若使用点阵,还要为它强制固定字号并在 fontconfig 中抹去 freetype 给它加的全部渲染参数,因为它根本就不用渲染。好,问题来了,什么字号对于某个特定点阵字体是最好的呢?不知道。继续爬...
  • 无衬线字体和有衬线字体所需的渲染参数不同。无衬线体的渲染参数可以给很重,有衬线体的参数给重了会破坏衬线。好,我就要使用微软宋体做出「厚重」的感觉?祝您好运...
  • 中文没有等宽字体一说,有些图形界面配置软件里等宽字体一栏就显示不出任何中文字体。所以你指定了英文等宽字体后,如果没有经过 fontconfig 配置,你的中文字都是「口口口」。
  • 中文没有粗体,所以除了少数字体比如微软雅黑,你拿到方正、文鼎这些字体需要使用 fontconfig 去伪造粗体。斜体同理。

这只是我所了解的...再加上个人品味和眼光不同,它甚至比压片还要麻烦,可以说是 Linux 中文圈第一大坑:谁都以为自己能说出个子丑寅卯,鲜有说的对的,但彼此都「感觉」对。压片至少还有标准:高清不高清,宽高比,音质等等,只是多了点嘛。大部分用户去配字体都是「给别人看的」,所以辛辛苦苦大半年被人说了句「好丑」是太经常的事情了。总之配置有风险,入坑请谨慎

参与字体渲染工作的 Linux 函数库和程序

  • tty 字体是通过内核 framebuffer 直接输出的。没有渲染,没有反锯齿。
  • 老式 Xorg 字体显示是这样配置的:
-misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1

由 Xorg 服务器直接管理。没有渲染,没有反锯齿。

参考:Why Fonts on Linux Aren't Straight Forward ?

  • 新式 Xorg 字体显示是这样的(中文显示基本用的全是这个,因为中文字体大部分都是 Truetype 字体):

使用 fontconfig 配置字体显示效果,使用 libxft 库处理字体。(所以不要以为 fontconfig 不可以配置点阵字体。它是一个通用机制,不但可以配置比如点阵宋体这种字体,甚至连 .pcf 格式的终端字体的显示效果也能配置,只不过配置的是在 Xorg 图形窗口环境下的 KDE/GNOME 等桌面环境中使用 .pcf 终端字体时的显示效果,真正在 tty 终端中使用 .pcf 字体的效果它管不了,因为它依赖 libxft 也就是依赖 Xorg,而 tty 可以在不跑 Xorg 的情况下运行。比如你的 grub2 操作系统选择界面和它相应的终端就不依赖 Xorg。)

而涉及到了 Truetype/Opentype 等轮廓字体时,前面已经说了,它们存储的是贝兹曲线、渲染指令和数学表达式,就需要一个函数库来解析它们,这时会使用到 freetype2 函数库。

而极少数情况下,有些发行版会去 dirty hack 比如 libcairo2 libpango 这样的库来实现「更好的字体显示效果」,但请注意这些函数库是管「怎么把图画到你的图形环境的」,也就是说 hack 这里可能会有效果(比如针对某些硬件的原理进行显示优化,但注意没有绝对完美的优化,你不可能对每一种硬件都进行优化; 另外此处的优化也不涉及诸如特定字号下的显示,因为那是属于 libxft 的),但它影响的是你整个图形环境,就连 fcitx 输入法皮肤绘制都会受到影响,这已经超出了字体配置的范畴了。我们无从评价好坏。只能说为了美国人民生活幸福就去做世界警察这种精神是我们认为不可取的。

基本上对于中文字体配置,你需要掌握的程序有 fontconfig 和 freetype2。

没有一个名为 sans-serif 的黑体

同理:没有一个名为 serif 的衬线体(宋体/明体),也没有一个名为 monospace 的等宽字体。

这三个名称是「种类」的名称,而不是「个体」的名称。就好比有名为「爱马仕」的手包,也有名为「普拉达」的手包,但绝对没有名为「手包」的手包。虽然目前这种把用户当蠢货的命名方式似乎非常「流行」(比如 GNOME 把它的「鹦鹉螺」文件管理器改名叫「文件」文件管理器),但它还没有蔓延到字体方面。

但有心的用户可能会发现,在网页开发和系统设置里面确实是有 sans-serif 这个写法的。它的意思其实是说:使用你系统默认的黑体。比如你的系统上可能安装了十个黑体(在 Linux 上这是很自然的),但必然有一种是优先级排在第一位的,那么你指定使用 sans-serif 就会使用这个字体。具体原理请看下面的「调试」章节。

openSUSE 默认中文字体

12.2 起是文泉驿微米黑

曾用中文字体:

如何修改 openSUSE 默认中文字体

打包者

这分为两种情况:

如果你是一名光荣的开发者,你想要把某个中文字体设置为 openSUSE 操作系统的默认中文字体,那么你需要在这个中文字体的 specfile 里面加入这样一行:

Provides: locale(zh_CN;zh_SG);

这是一种特殊的写法,意思是说,该字体提供了 zh_CN 这个语系。同时把原来的默认中文字体里面的这个 Provides 去掉。

原理是你一旦使用了这个 Provides,那么在制作 DVD 的时候(CD 里是没有中文这个语言的),就会把这个软件包放进去,于是默认只安装了这一个中文字体,那么自然用它来显示。

而英文的情况就相对复杂一些了,请参考 fontconfig 法的章节。

用户

如果你不想要使用现在的默认中文字体,而是想要自己去指定一个。有两种方法:

  • 自己学习 fontconfig 法,通过添加用户配置的方式来修改。
注意 修改系统文件会在每次 fontconfig 这个软件包升级后被覆盖掉。
  • 直接修改系统文件:
    • 打开 /etc/fonts/conf.d/58-suse-post-user.conf 文件(其实它是一个指向 /usr/share 的符号链接,你可以使用 ls -l 查看真实文件)
    • 找到 <family>WenQuanYi Micro Hei</family> 这样的行(一共有三个)
    • 在这行的前面,插入一行 <family>你的中文字体</family>。(如何查看「你的中文字体」到底英文叫什么,请看下面的调试章节)
    • #刷新字体缓存

安装字体

从 openSUSE 中安装字体包

openSUSE 中提供了许多打包好的字体,但多数是西文的。中文比较流行的字体有 Droid Sans,WenQuanyi,Source Han Sans 等。

openSUSE 的字体全部位于 M17N:fonts 源中。openSUSE 中字体包的命名规则是:<出品人>-<字体名>-font(s),比如 adobe-sourcehansans-fonts/kde-oxygen-fonts。记不住的也可以使用 http://software.opensuse.org/search 来进行查询。

直接安装字体

从网络取得的字体可以安装到用户主文件夹也可以安装到系统文件夹。

用户主文件夹:

~/.fonts(该文件夹与系统文件夹不同,没有那么详细的按用途区分,而是按照字体名称的首字母来划分的,比如你下载的字体叫做「字幕黑体」,你就可以放到 ~/.fonts/字/ 文件夹下)

系统文件夹:

/usr/share/fonts/truetype (/usr/share/fonts 下也有许多不同用途的字体文件夹,除非是用于特殊应用程序比如 wps,否则请不要使用 /usr/share/fonts/kingsoft-office 这样的结构)

刷新字体缓存

把字体复制过去后,运行

sudo fc-cache -f

刷新字体缓存。只对新打开的应用程序生效。要让全局全部应用新字体,请注销重新登入。

懒人配置

对于那些不是很有心力钻研的用户,有三个选择:

使用默认配置

openSUSE 的默认字体显示效果不丑。

我们默认是开启次像素渲染的(所以不用听信人云亦云去找所谓的「开启次像素渲染」的教学),字体选择也是经过多种权衡的最优结果(您若懂得如何配置,那么 Windows/Mac 字体拿来会和原系统肉眼显示得没差。注意不是实际没差。如果不懂又懒,还觉得最终效果「好看」,那我只能说是您「习惯」了)。尤其是在 openSUSE 13.1 后我们默认使用了由 Adobe 贡献的 freetype 渲染引擎,至少在清晰锐利上面已经达到了自由软件所能做到的极致(当然如果您的追求是「厚重」那您肯定不满意)。

关于次像素渲染

之所以开源操作系统的字体显示要弱于闭源操作系统,很大程度上是由于闭源操作系统使用了一些专利保护技术。比如微软和苹果共同开发的 Truetype 标准(这也是现代操作系统事实上的字体显示标准,因为之前只有 Windows 和 Mac OS X)中就隐藏了一个由苹果持有的字体渲染专利。这个专利就是次像素渲染(Subpixel Rendering)(具体技术指标请看链接,这里不做过多解释)。而开源操作系统无法使用这一专利,所以在早先我们比起闭源操作系统在字体显示上实际是落后了一代的,05 - 07 赛季当时普遍使用的是不内置 hinting 信息的位图字体(Bitmap),比如方正上海宋(版权字体,但 SUSE 为我们支付了授权费用,所以当时 SUSE Linux 才那么漂亮)。

然而随着时间的推移,开源世界对次像素渲染原理以及该专利的研究越来越深入,加上专利本身也会过期,开源操作系统现在已经能够以不同的方式实现闭源操作系统的字体显示效果了。

原帖在此 Infinality Fonts,吸引了不少 Freetype2 大神们的围观,也解释了很多问题,其中就包括此像素渲染的版权问题。

其中大神 Werner LEMBERG 说的是,涉及版权的主要有三块:

  • 在 TrueType 引擎阶段实现 ClearType。
  • auto-hinter
  • ClearType 色彩滤镜

前两个已经在 2010 年 10 月过期,因此 Freetype2 2.4.10 已经引入。而最后一个似乎可以用非专利色彩滤镜来实现(专利的不是色彩滤镜这项技术,而是滤镜的数值)。因此我们有了 Erik 大神的 Infinality,这是一个旨在改善 Linux 字体显示效果的项目,作为蝴蝶效应,让中文显示异常清晰(注意,Erik 大神的主要目的仍然不是中文字体显示效果)。

安装 Infinality

sudo zypper ar -f http://download.opensuse.org/repositories/home:/opensuse_zh/openSUSE_13.1/ opensuse_zh
sudo zypper ref
sudo zypper update libfreetype6 -r opensuse_zh

或者用 YaST 操作。

有时 `sudo zypper update libfreetype6 -r opensuse_zh` 也不一定管用,因为人力有时尽,Infinality 跟进 freetype2 开发的能力有限,有时会落后 freetype2 最新版几个版本,而 openSUSE 基本上总是最新版的,所以就会产生一个降级问题。降级命令在上一个命令运行不成功时会提示您,一般是 `sudo zypper in --old-packages libfreetype6-<版本号>.<释出号>.架构` 这样的命令。用 YaST 则不会有这样的烦恼,跟换源升级的方法始终是一样的。

设置字体显示效果模拟对象

分别运行下面命令来设置:

sudo infctl infinality //默认
sudo infctl linux
sudo infctl osx //设置模拟老式苹果字体显示效果
sudo infctl osx2 //设置新苹果字体显示效果
sudo infctl win7 //设置微软字体显示效果

更多设置选项见 /etc/fonts/infinality/styles.conf.avail 下,文件夹名就是设置选项名。

自行下载相关字体

  • 设置了模拟微软字体显示效果的请自行取得:微软雅黑(Microsoft YaHei)或微软正黑(Microsoft Jhenghei)
  • 设置了模拟老式苹果字体显示效果的请自行取得:信黑(即 STHeiti)简体,或信黑繁体/俪黑繁体
  • 设置了模拟从雪豹开始出现的苹果字体显示效果的请自行取得:柊野黑体/冬青黑体简

(注意,中文字体一般都很大的,不要下载 10MB 以下的小包,字体残缺怪没配置好的事我当初也干过)

解压出 .ttf/.otf 放到 /usr/share/fonts/truetype 文件夹下后运行:

sudo fc-cache --force

加载之。

使用 Ubuntu 相关字体配置

首先我们声明补充这段的目的是因为萝卜白菜各有所爱,而不是 Ubuntu 的字体配置有什么优越、甚至神秘的地方。

Ubuntu 的字体配置不同的地方主要是加上了一个针对 LCD 显示器优化的补丁系。但是你要明白LCD 与 LED 的区别,LCD 实际上是指 04 - 08 赛季家用台式机上的那个大脑袋显示器,笔记本电脑没有用的,所以这个唯一的不同其实并没有「惠及」你,甚至在使用超高清显示器(比如 Retina Display)时,这个补丁还可能会拖你后腿。换句话说,Ubuntu 下字体显示效果的「厚重」其实是 Ubuntu 字体本身配合壁纸和洗脑宣传给你带来的错觉,就跟当初无数人哭着喊着要模拟 openSUSE 的字体显示效果,但其实我们什么都没做只不过用了一个版权字体。。。

这个补丁系主要打在了四个软件包上面:

  • libxft-ubuntu(这个包与全部其它发行版上的 libxft 软件包没有任何代码层面的区别,是个废包)
  • freetype2-ubuntu(同上,这不过是一个启用了次像素渲染的 freetype2 软件包,跟 openSUSE 下的没区别)
  • fontconfig-ubuntu(还没研究完)
  • cairo2-ubuntu(还没研究完)

但不管怎么说,有人要找心理安慰,那就让你们用上。像上面那样添加 home:opensuse_zh 源安装相应软件包即可。

调试字体显示效果的一些知识/标准

一般而言,我们在配置字体显示效果的时候有以下几条简单的标准:

我们看到的字体应该是我们配置要使用的字体

比如我们配置了思源黑体,但是实际上电脑显示时使用的却是文泉驿,那怎么无论怎么调整配置,显示的都不会变。而两种字体十分接近,用户在调整的过程中也只是一种主观的心理感受,很可能产生这样无厘头的效果:实际上显示效果根本没有变(没有给你任何反馈),但是你通过不断的折腾达到了极大的心理满足感,最后觉得「就是它了!」,而实际上你配置的东西根本不是显示在屏幕上的东西,你只是巧妙地说服自己去接受了默认。

这时我们就需要使用 fontconfig 的自带工具:fc-match。

我们已经知道了在 Linux 下面并没有一种名为 sans-serif 的黑体,它只是黑体这一字体种类的统称,实际使用中还是会去使用默认的黑体。那么默认的黑体是怎么产生的呢?

fontconfig 的默认配置,或者说你的发行版的默认配置中,有一个映射列表,它会把你全部可能有的黑体全部依次排列,而在实际使用过程中就会按照这个顺序从上往下查找,比如「我能吞下玻璃而不伤身体哦」这几个字,它会先尝试使用默认黑体,也就是英文的 Libration Sans 来显示,自然是没有中文字符的,于是一个一个试过来,最后发现了「在所有中文黑体中在列表中写在最上面的那个黑体」,就用它显示了,这个黑体也就成为了「默认中文黑体」。而在实际配置过程中,fontcofig 也提供了一系列的操作这个列表的方式,比如「追加」、「置顶」等,以及相应的针对国别(locale)的设置。

于是为了解决上面的那个问题,我们需要查看这个列表:

fc-match -s sans-serif

显示在最上面的就是你用来显示的字体。如果这个列表太长,也可以使用:

fc-match -s sans-serif | head -n 5

高级配置:fontconfig

原理

匹配字体

应用修改

辅助工具

  • 文泉驿项目的 fontconfig designer,可以辅助调整 sans-serif/serif/monospace 字体的优先级。它可以帮助我们理解 fontconfig 内部的字体匹配列表的概念,但是在实际应用中,由于诸多发行版都使用了我们 openSUSE 这种 /etc/fonts/conf.d 的配置方法,即根据 fontconfig 选项而不是字体名来拆分配置(具体了解请看 /etc/fonts/conf.d/README),在简化了每个字体所需的配置(对打包者要求变低了)的同时,使得在系统中找到 fc-match -s sans-serif 输出的这种顺序变得不可能(因为这种顺序是分散在多个 .conf 文件中的配置共同作用的结果),于是这种直接使用用户配置去覆盖系统配置的方法变得可靠性极低,不建议使用。
  • Lagom 的 LCD Test。主要是用来测试你的显示器对次像素渲染的支持情况的,也可以辅助您找到一些 fontconfig 参数的值。比如 rgba 的值,在这个网页上可以比较直观地看到 rgb/bgr/vrgb/vbgr 等选项的字体显示效果。

杂项

某些 fontconfig 选项的存在性问题

常见问题

Fontconfig warning: “/etc/fonts/conf.d/56-user.conf”, line 9: reading configurations from ~/.fonts.conf is deprecated.

解决办法:把 $HOME/.fonts.conf 移动到 $HOME/.config/fontconfig/fonts.conf。

有没有办法通过软件看到我下载的某个 .ttf/.otf 有没有内嵌点阵、渲染信息(hinting)、轮廓信息(kerning)等?

这也是我困惑良久的问题,如果存在这样一款软件,那么我们就可以把字体配置傻瓜化了,或者说至少不用去在 fontconfig 配置里写一些无意义的选项(比如某个字体根本没有内嵌点阵,你还去告诉 fontconfig 不要用它的内嵌点阵;或者该轮廓字体根本不支持渲染,你去告诉它用轻微渲染 hintslight)。

很可惜,答案是没有。任何操作系统下都没有一款直观的软件可以读取字体并检查它们是否有这样的信息。如果你非常熟悉 fontforge 这样的造字软件,你可以使用它打开字体,看到它的 hinting/kerning 信息,但这样做未免太小题大作了。而且这些信息本身只能告诉你「有/无」的问题,依然无法告诉你怎么配置是最佳的。

扩展阅读

参考链接

字体调试

fontconfig 相关

作者