Font and Font Rendering

9th July 2018 at 4:24pm
Arch Linux Productivity Windows

字体

中文字体

字体渲染效果WindowsLinux (with Infinality)
Microsoft Yahei一般
Source Han Sans / Noto Sans CJK SC一般
WenQuanYi

[1] : Noto Sans CJK SC 的中文部分用的是 Source Han Sans

在 Windows 平台上:

  • 低字号时雅黑比 Noto Sans 锐利,Noto Sans 有点糊
  • 高字号时 Noto Sans 更美观

在 Linux 平台上:未对比。

英文字体

Sans

Open Sans 首选,全平台上都不错。Noto Sans (derived from Droid Sans) 与 Open Sans 很相近,字型更可辨(比如 I vs l)。

Sans Serif

没有特别的喜好,感觉 PT Serif 不错。

Monospace

Windows 平台上首选 Consolas。Linux 下,Noto Sans Mono (derived from Droid Sans Mono) 在 Konsole 下渲染很不错,字型相较 Consolas 更简洁。

IntelliJ 系列 IDE 因为用了 Settings Sync 在全平台同步,使用 Noto Sans Mono 作为统一字体,它在不同平台上都有不错的渲染。

字体渲染

要改善字体渲染效果,最简单的办法是买个 27 寸 4K 屏幕,不管什么系统都好看。

Chrome

CSS 设置 -webkit-font-smoothing 对字体渲染很有帮助,但是这个选项已经被 CSS 标准废弃:

body {
  -webkit-font-smoothing: subpixel-antialiased !important;
  font-family: 'Open Sans', 'Noto Sans CJK SC';
}

Windows

Windows 下现阶段没有除系统自带的 ClearType 之外的字体渲染调整方法。MacType 现在不被积极维护。不过 Win 10 的字体渲染已经相当不错。

Linux

在 Arch Linux 上,可以用 AUR 中的 ttf-opensans 来安装 Open Sans 字体。同时在 Dropbox/Fonts/MicrosoftYahei 中有微软雅黑的字体,手动装上去就 OK 了。

以前 Linux 的字体渲染是个相当折腾人的活,需要用 Infinality 的补丁来优化字体渲染 。但是 Freetype 2.7 开始,显示效果已经非常赞了。 Freetype 2.7.0 在 2016 年 7 月发布,宣称支持类似 Windows 下的 DirectWrite / ClearType 的渲染效果。所以没有必要再去折腾 Infinality 了。

使用 Infinality 优化字体渲染(过时

自己去调 fonts.conf (Arch Wiki | Man Page) 是非常不理智的行为。直接用 Infinality 就好了。参考它的 Arch Wiki 条目 进行安装和配置。

同时注意,Infinality 的配置可能存在一些问题,会导致一些汉字渲染出来偏瘦,比如「的」字。参考这个 GitHub Issue ,你需要在 /etc/profile.d/infinality-settings.sh 加入:

export INFINALITY_FT_STEM_ALIGNMENT_STRENGTH=0
export INFINALITY_FT_STEM_FITTING_STRENGTH=0
# export INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE=0
# export INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT=0
# export INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH=0
export INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS=false

Java 相关

Java 程序(如 PyCharm, CLion)的字体渲染又有不一样的机制,跟系统的字体渲染效果差很多。但是也有解决办法,主要参见 Arch Wiki 中的 Java Runtime Environment 条目。其中比较好的办法是从 AUR 中 安装 jre8-openjdk-infinality 以及 jre8-openjdk-headless-infinality

安装完后,Java 程序(如 PyCharm)的字体渲染就跟原生的程序一样了。