程序员的字体
如今的开发工具基本都是上开箱即用,并能收获不错的开发体验。但是在中文环境下,开发工具默认的字体设置往往不尽人意。连续几天在几个同事的代码界面上发现了 宋体 、 Monospaced 、 微软雅黑 、 楷体 等,五花八门……
作为一个贫穷的常年穿格格杉的程序员😂,折腾不了衣服,就只能折腾自己编辑器的主题和字体。话说新装一个编辑器第一件事就是选一款心怡的主题,配置一个让眼睛舒服的字体。主题撇开不讲,下面说一下字体。
衬线字体和非衬线字体
不太严谨的说,我们可以把字体分为衬线字体和非衬线字体 (sans-serif)。视觉上,衬线字体在字的笔画开始、结束的地方有额外的装饰,而且笔画的粗细会有所不同;无衬线字体没有这些额外的装饰,笔画的粗细差不多,线条统一。我们在生活中,常见的衬线字体的代表有:宋体、Times New Roman,只要使用过 Word,相信大家对这两款字体不会陌生。除此之外,在政府文件中常见到的仿宋字体,在儿童读物上常见到楷体都属于衬线字体。常见的非衬线字体有绝对不会陌生的微软雅黑、黑体等,西方最常见的应该是 Helvetica 系列字体,关于这个字体,有兴趣可以读一下 《字体的故事》中的介绍,非常有意思,网上比较容易找到电子版。
衬线字体多用于传统的正文印刷中,适合在纸质中显示大段文字,它能带来更好的可读性,我们见到的绝大多数书籍的正文基本上都为衬线字体;而非衬线字体多用于简短、突出的文段中,如:文章标题、PPT。随着计算机的兴起,衬线字体因为笔画丰富和计算机的渲染机制,在较小字号的情况下,往往会有很强烈的锯齿感,特别前几年显示器分辨率普遍不高的情况下(在这里吐槽下前些年联想笔记本万年不变的 1366×768🙃),非常影响美观。这时候就轮到非衬线字体登场了,在中国伴随 Windows 而来就是大名鼎鼎的 微软雅黑。
拿办公三件套来说,Word 编辑的文字一般用于办公打印,推荐使用宋体、思源宋体等。PPT 讲究设计感,有各种设计感强的艺术字体、手写体等,根据喜好自己可以发挥。如果是中规中矩的场合,建议还是选用常规的非衬线字体,如果微软雅黑用腻了,可以尝试思源黑体等;在 Excel 中,如果做的表格不用于打印,而仅做电子版查阅,建议更改为微软雅黑等非衬线字体。Chrome 浏览器中,建议标准字体设置为非衬线字体。各项软件的的菜单栏,如果你发现默认的是宋体,而软件又支持更改字体,建议选择微软雅黑。版权类的字体中,有许多优秀美观个性化的选择,可以自行搜索。
等宽字体
上面介绍了字体的基本情况,下面轮到我们程序员的专属 - 等宽字体 (monospaced font) 登场了。早期等宽字体只是因为技术限制,无法进行字母宽度的比例调整,因此将每个字元都制作成一样的宽度,从而形成了等宽字体。现在我们的技术早已脱离了这种限制,但是这类字体又在程序员群体中找到了新生 - 它非常适合显示代码,让代码看着更加整齐清晰。现代的等宽字体往往会针对代码环境做专门的设计,例如:专门设计在传统字体中容易混淆的 0 和 O , 1 和 l 等,增加区分度,避免误读。同时它们一般都为非衬线字体,便于电脑屏幕中显示更多行的代码,我们的代码字号设置往往不太大,这时候非常适合非衬线类字体的发挥。
Windows 环境下,常见的等宽字体有 Consolas,是 Windows 环境下比较常用的编程字体。VSCode 编辑器开箱即用的默认字体就是 Consolas。前几年为了兼顾中文显示,网上流传有 Consolas 和微软雅黑的混合封装体 - Yahei Consolas Hybrid,体验非常好,网上这款字体的版本比较多,不同人技术不同,封装的略有差异,有些版本可能存在缺陷,可自行选择。
现在的代码编辑器多支持设置第二字体,大多数英文等宽字体的字符集不包含中文字符,这时候可以显示为设置的第二字体,可以设置为微软雅黑。比较有代表的是 Jetbrains 家的编辑器都支持这个设置。
VSCode 中可以在字体设置中追加微软雅黑字体,这样对中文字符就可以用微软雅黑字体显示。
比较常用的等宽字体还有 Source Code Pro、DejaVu Sans Mono、Ubuntu Mono 等,还有斜体比较个性花哨的 Operator Mono(非免费):
控制台中的等宽字体
Windows 多年来对控制台的体验并不重视,打开 CMD 或者 Powershell,往往看到的是锯齿感很明显的宋体。因为控制台中对字体限制更加严格,在控制台设置中,可选则的字体并不多,更改代码页才能选择 Consolas 字体,但是这样又总会出现各种字符显示问题。在这里推荐使用 等宽更纱黑体 ,完美适配控制台环境,并能收获很好的中文显示效果。对第三方的控制台,往往能比较灵活的设置字体,不过仍然推荐使用等宽更纱黑体,非常好用。PyCharm、VSCode 等控制台中的字体设置同代码中字体设置,可以随意搭配。
随着微软拥抱开源,对控制台的体验也开始着手改进,推出了 Windows Terminal,默认字体为 Consolas 显示效果比较好。然后又随着 Windows Terminal 发布了适合 Terminal 环境的字体 - Cascadia Code,比较个性,同时支持连字,可尝试体验。
字体连字
上面的 GIF 动画,为我们展示了字符的连字显示,可以将 >= 显示为两个字符宽度的 ≥ ,可以将 === 显示为 3 个字符宽度的 ≡ ,算是比较有意思的一种体验。用在代码中,可以增加我们代码的可读性。比较遗憾的是,Consolas 字体不支持连字。而所有支持连字的代码字体中,集大成的是 Fira Code,连字效果非常丰富。
如果使用的是 JetBrains 家的编辑器,2020 年以后版本的编辑器已经自带了 JetBrains Mono 字体,且支持连子,开箱即用,我们只要根据喜好配置第二字体既可。
因为前端代码中 === 、 >= 等运算符使用的比较多,以及随着 ES6 中箭头函数 => 和扩展运算符 ... 等的普及,支持连字的字体非常适合用于前端代码,目前就是使用 Fira Code 作为自己前端代码的首选字体。在 Python 代码中这种情况相对较少,如果使用 PyCharm 使用 JetBrains Mono 既可。
图标字体
我们对终端进行美化时,可能接触到 Nerd Fonts 字体。它会针对已有的字体打 patch,把一些 icon 字符插入进去。如针对 FiraCode 有对应的补丁字体 FiraCode Nerd Font。
本文中许多地方仅出于自己的直观认知,未查阅资料印证,不严谨和错误的地方欢迎指正!