Noto Sans Mono: 最佳编程字体
作者:码农贾维斯
日期:2022-09-05
提示:本文有视频版,位于 B 站同名账号下
00 片头
Hi,大家好,我是大维。今天我要给大家介绍一下,关于编程字体的知识,并推荐一款我个人认为最好的编程字体
01 等宽字体
作为一个程序员,每天的主要工作就是写代码,而代码是由电脑屏幕上文字呈现的。所有,拥有一款美观、清晰的编程字体,可以在提升些许编程效率的同时,带给我们一个美好的心情,进而让我们的代码少出一些 Bug。所以,一个好的编程字体还是挺重要的。
编程字体,有一个更专业的名称,“等宽字体 Monospaced font”顾名思义,就是所有字符宽度相等。
我们在用 Word 设置字体时,经常会看到一些名称相同,只是后缀不同的字体。其中的 Mono 后缀指的就是等宽字体,其他两种,Serif 是指有衬线,Sans(-serif) 是指无衬线。虽然叫等宽,但它其实是有语境限制的,因为中文汉字是方块字,都是正方形的,中英混合时,把英文拉宽或者把中文压扁,都是不可取的。
所以在这种情况下,最好的办法就是将英文字符的宽度,设置为中文字符的一半。为了区分这两种宽度,我们分别称之为半宽(Half width)和全宽(Full width),即我们在输入法中常见的“半角”和“全角”,至于为什么叫这个名字我也不知道。相比之下,港台地区的叫法,“半形”和“全形”则更容易理解。
02 VS Code 用户的痛
优秀编程字体有很多,常见的比如 Windows 自带的 Courier New,Consolas,Mac 自带的 Menlo,Monaco,SF Mono,Adobe 的 Source Code Pro,Mozilla 的 Fira Code,安卓的 Droid Sans Mono 等等
很多 JetBrains 家的用户朋友用的或许正是上面的某种字体,并且对其表示非常满意,但他们却不知道 VS Code 用户的痛,那就是这些字体都无法与中文对齐。其原因就是这些等宽字体均未包括,也未考虑全宽字符。换句话说,如果假设全宽字符的宽度是 1 的话,这些字体的宽度均不是 0.5,它们大多介于 0.55 到 0.65 之间,并以 0.6 居多,如果是 0.6 的话,那还有大约三分之一的概率可以成功对齐。
那些非 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 编辑器就没有问题。这些编辑器即使能对齐的话,也还有一个另外的问题同样不可忽视,那就是“中文字体显示效果不好”。要么是大小不统一,要么是粗细不均匀,或者是另一个方向,垂直方向上对不齐。
这些问题的根源是你只能指定一个字体,不能像 VS Code 一样,用逗号间隔,指定多个字体搭配使用。也就是说,在我们指定了某种英文字体之后,系统在遇到该字体不支持的中文字符时
会自动回退 (Fall back) 到某种系统支持的中文字体。这里,我们是没有选择权的,虽然近期版本的 JetBrains 全家桶增加了 “次要字体” 的功能,但也只能在某种程度上缓解这个问题,并不能完美解决 。
所以,对于这个无法指定中文字体的问题,一般的解决办法就是“缝合”。
就是用字体编辑软件将一种英文字体与一种中文字体合并,产生一种新的混合字体。比如常见的 “Consolas + 雅黑”,这种方法虽然可行,但由于都是民间制作,存在一定的融合质量问题。更重要的是,如果你不喜欢 Consolas或者不喜欢雅黑,那你就很难从网上找到你喜欢的字体组合,而 DIY 的难度又不是一般的大。
04 微软雅黑
对于适合电脑屏幕的中文字体,在多年以前,Win7 还没推出的年代,基本上就只有 SimSun 这一种字体。它没有抗锯齿,既不美观,也不能保护视力,支持的字符数量也比较有限,在遇到某些生僻字时,会显示为方块。
因此,微软花费大概一个字100美元,2万多汉字,共几百万美元的费用,聘请方正为他制作了一个中文字体“微软雅黑”。真可谓是一字千金,而又非寥寥数字,而微软也一点都没有浪费
从最初的 Windows Vista,经过 Win7,Win8,Win10 到最新的 Win11 都一直作为系统的默认字体使用。
但它有一个很大的陷阱,就是版权问题。你可以在你的电脑上使用它,你也可以把它显示在你的网站上,但你一旦把它打印出来,用到书籍、论文、广告宣传页上就构成了侵权,就会有方正公司来找你索赔,虽然这个字体是微软提供给你的。
05 思源黑体
因此,我们亟需一种美观、齐全,关键又免费的中文字体,让我们可以放心地用在任何地方,万众期待之下 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 来使用了。
刚从 0.6 宽度切换到 0.5 宽度,或许会有点不适应,不要担心,这和新鼠标、新鞋子一样,有个适应的过程,坚持用上一两天,就会觉得这个字体真舒服了。
好了,这就是我们今天的全部内容,中间插了许多貌似与主题无关的中文字体的知识。但我还是觉得有必要让大家都了解一下的,非常感谢你能看到这里,我们下期再见!
(完)