那些非 VS Code 的编辑器一般可以做到对齐,是因为它们在将字体渲染到屏幕之前做了一些微调,比如将 0.6 的半宽字符压缩到 0.5,或者给 1.0 的全宽字符左右各加 0.1 的补。VS Code 无法这样做,是因为它是基于 Electron 也就是浏览器的 HTML DOM 做的字符渲染,因此很难做到这一点。
当然,如果你不是强迫症患者,你可以选择直接忽略这个问题,不齐就不齐吧。或者,你可以强迫自己不写中文,但这样的话,你的代码可能会从“你的代码只有你能看懂”变成“你的注释只有你能看懂”
如此一来,唯一能够让 VS Code 对齐的解决办法,就是寻找一种宽度为 0.5 的等宽字体,我之前寻找过好久,终于寻找到了一款符合这个条件,而同时又很漂亮的字体 “Inconsolata”,再搭配上与之契合度很高的中文字体“等线”,就完美得解决了 VS Code 中的字体问题。这个字体组合我用了很多年,直到我发现我们今天的主角为止。
03 JetBrains 用户的痛
我们刚刚说了 VS Code 在字体上的问题,但并不是说 JetBrains 全家桶、Sublime、otepad++
还有 VS Code 他爸 Visual Studio 等,这些非 Electron 编辑器就没有问题。这些编辑器即使能对齐的话,也还有一个另外的问题同样不可忽视,那就是“中文字体显示效果不好”。要么是大小不统一,要么是粗细不均匀,或者是另一个方向,垂直方向上对不齐。
因此,我们亟需一种美观、齐全,关键又免费的中文字体,让我们可以放心地用在任何地方,万众期待之下 Adobe 和谷歌,终于在2014年完成并发布了这个字体,“思源黑体 Source Han Sans”
在公开发布之时,为覆盖字符数量最多的字体,共支持 44666 个字符,至今还在不断增补中 。除了免费,它还是开源的,也就是任何人可以自由修改并发布自己的字体,所以现今的很多字体
都是在思源黑体的基础上产生的。
06 Noto
之前说思源黑体是由 Adobe 和谷歌联合领导开发的,是没错,但更准确的说,思源黑体是 Adobe 发布的版本。因为谷歌把这个字体,换了个名字又发布了一遍,叫做 Noto,取自 No More Tofu。因为他们把不能显示的文字方块,唤作“豆腐”,非常形象。
但这让一般人看来,是无法理解的。就像一本小说,内容一字不差,却有两个署名不同的版本
但这种情况,在开源软件的世界里非常常见。了解 Linux 发行版的朋友会更加明白,这正是开源世界包容精神的体现。
但其实,谷歌并不只是想要个署名权那么简单 ,它有一个更为宏大的目标,那就是像秦始皇统一六国,统一文字,统一度量衡一样,为全世界提供一个统一的字体。思源黑体的主要成果是在
英文字体 Source Sans Pro 的基础上,扩展了汉文化圈,也就是中、日、韩三国的文字。其英文名称 Source Han Sans 中的 Han 就是汉文化圈的意思。除了这种表示,中日韩文字的合称还有一种表示 CJK,也就是中日韩 Chinese, Japanese, Korean 的首字母缩写。这种表示方法对外国人来说,比 Han 更好念,也更容易理解。
在谷歌眼中,思源黑体的英文加中日韩是远远不够的。很多小语种,比如我们国家的藏语、蒙古语等支持并不够好,所以谷歌又针对全世界 800 多种语言文字,雇用熟悉这些字体的设计师,进行补全或重新设计,并找了很多使用那些语言的人进行校对,就是为了让全世界所有语言的文字都能正常显示,并且在同一个字体下,看起来更统一。
除了思源黑体,谷歌还与 Adobe 共同开发了,另一个有衬线版本的字体:思源宋体 Source Han Serif 。谷歌也把它融和了进来,作为 Noto 字体集的有衬线版本 Noto Serif 而存在。
当然,它也关心汉文化圈的程序员群体,提供了一个半宽字符宽度为 0.5 的等宽字体,这就是我们今天的主角 Noto Sans Mono 。
从命名上看,它就是 Noto 字体家族的无衬线的,等宽版本。你可能会觉得这个分支有点多了,但其实不止,因为这个分支还不全,它是只适用于非 CJK 程序员的,不包含中日韩文字的版本
而且中日韩文字本身,按照书写习惯,又分为简中(SC)、繁中(TC)、香港(HK)、日本(JP)、韩国(KR)五个变种。因此真正适合中国程序员使用的等宽字体全名叫做“Noto Sans Mono CJK SC”,是不是让你大开眼界?
07 下载安装
最后就是下载、安装。我们进入谷歌字体的官方 GitHub 仓库 https://github.com/googlefonts/noto-cjk ,点击右边的 Releases,找到带“Monospace”和“简体中文”字样的链接,下载,解压,里面有常规和加粗两个版本,分别对它们点击右键,再点击安装,即可安装完成。
重启你的编辑器,就可以从字体设置中选择,或者在 VS Code 的字体设置中手动输入'Noto Sans Mono CJK SC', monospace 来使用了。