为什么要等宽?
如果让你在纸上写一个单词 Hi
,你肯定不会把两个字母写成一样宽。的确,在正常手写时,字母根据形态、笔画和大小写,自然地会被写成不同宽度。这种字体称为「比例字体」(proportional fonts),我们在数字环境中见到的西文字体也大多如此。
但回想一下机械打字机和早期电脑,它们打出的字母却是个个一样宽的;这主要是因为技术上的限制。
在打字机中,每个按键所连接的字模在按键时敲击浸有墨水的丝带,在纸上留下字迹。由于字模都是一样宽的,纯机械机构又不能动态调整字距,只有将字母也做成等宽,才能维持版式的均匀。

而在早期终端和电脑中,由于屏幕不够精细,芯片也缺少图形显示能力,画面只能被分成数量有限的网格,每个网格固定显示一个字符。这也把文字「框」成了一样尺寸。

来到现代,这些技术限制不复存在,但等宽字体(monospaced fonts)却作为一种风格延续下来,凭借其天然的网格对齐特征,在许多场合继续发挥重要作用。在终端环境中,等宽字体不仅用来显示内容,也承担了「绘制」界面的功能;借助 ncurses 等库的帮助,用纯文本也能做出功能丰富、版式美观的 TUI(文本界面)软件。在代码编辑器中,等宽字体与空格、缩进等格式结合,加强了整洁感和可读性;更扎实的形态也让形近字符容易区分,让输入错误更容易发现。

等宽字体的应用也不限于技术场景。许多 Markdown 写作工具都选择等宽字体作为默认字体,既是对打字机传统的致意,也是因为等宽字体能赋予版式一种特殊的简约肌理,营造出让不少人觉得更平静、专注的写作环境。英文剧本创作中,用 12 号的等宽字体 Courier 是行业惯例,因为经验上这样写出的剧本一页正好需要一分钟来演出,方便估算时间。

好的等宽字体是如何炼成的
等宽并不意味着均一和乏味。在看似粗砺的外观背后,等宽字体的设计是丰富多变、充满细节的;做好一款等宽字体需要的努力,并不亚于任何抓眼的标题字体或优雅的正文字体。
那么,如何辨别和选择出好的等宽字体呢?可以从美观性和实用性两个角度考虑:好的等宽字体应该具有考究的设计细节,以及能满足使用场景的丰富功能。此外,中文用户可能还需关注对中文字符的兼容性。以下分别介绍。
设计细节
等宽字体一个特别重要的品质就是「不容易看岔」。因此,几乎所有等宽字体都会关注易混淆字符的设计,特别是数字 1
/ 小写字母 i
/ 小写字母 l
/ 大写字母 I
,以及小写字母 o
/ 数字 0
这两组。
至于具体如何区分,不同字体的处理方式不同,但一般是在小写字母 i
和 小写字母 l
头部和尾部添加衬线(即笔画是否「出头」、出头的形状如何),以及在数字 0
中间添加圆点或斜线。这些设计没有优劣之分,自己看着顺眼、清楚即可。

x 字高(x-height)是另一项重要的设计决策。这是指英文字母「四线格」中间两条线之间的高度,也就是小写字母 x 的高度,对字体的风格和特征影响极大。许多等宽字体会采用偏大的 x 字高,因为这能让外观更饱满,更容易在小字号下辨认,而这正是等宽字体的主要使用场景。不过,过大的 x 字高也会让字体看起来有点「愣」,具体尺度就是个人偏好问题了。

虽然多数等宽字体都会采用无衬线设计,笔画粗壮并且末端无装饰,但这也不是唯一的风格。例如,经典字体 Courier 就采用了粗衬线(slab serif)设计,笔画终端是向外延伸的圆角;PT Mono、Fira Code 等较晚近的字体也采用了粗衬线。还有一些更具「创意」的字体直接套用了衬线字体的风格(例如 Xanh Mono),或者走复古像素风(例如 VT323),不过实用性就比较有限了。

近年来,还有不少字体会把斜体当作展示个性的空间,为其使用和正体截然不同的风格。这股风潮最初可能是大厂 Hoefler & Co. 出品的 Operator Mono 带起来的,它的斜体模仿了手写体的设计,f
、l
、s
等小写字母俏皮的起笔成为很多后来者(例如免费的 Cascadia Code、Victor Mono 和付费的 MonoLisa 等)的模仿对象。
由于斜体在代码编辑器中经常被用来自动高亮 class
、public
等关键词,不少程序员喜欢用这种字体来给枯燥的代码增添一些活泼感。(当然,正如编程界的任何选择一样,嘲讽这种字体的声音也不少见。)

(作为另一个极端,有的字体根本就没有斜体,用到时只能显示强制拉伸的「假斜体」,保证视觉体验起见,这种字体还是不要选择了。)
此外,既然等宽字体的核心特征就是字符宽度相同,这个宽度到底定多少自然也很重要。与追求宽度适中的正文字体相比,许多等宽字体会选择做得稍微偏窄,以便节省空间,在相同尺寸窗口中放下更多代码。这方面的一个极端莫过于 Iosevka,它将宽度压缩到 1/2 em,也就是每个字母的宽度只有其高度的一半,用在控制台输出等空间有限的地方特别紧凑高效,但拿来码字就看着有点局促了。

还有一类字体试图从根本上挑战「等宽」的概念,其代表是 Input Sans 和 iA Writer Duo/Quattro。这些字体虽然仍具有等宽字体典型的「无机感」,但放松了「每个字一样宽」的约束,不同字符根据其形态特征,可能占据多种不同宽度,例如 W
偏宽而 i
偏窄。

但这样「不伦不类」的字体还能胜任等宽字体的用途吗?Input Sans 的作者提出了一些有趣的主张。在他看来,在编程中,最需要对齐的是行首缩进,而这无论如何不受等宽与否的影响。同时,不等宽的设计反而有助于发现错误,例如你在一连串 <span>
中手滑把其中一个标签打成了 <spam>
,由此产生的不对齐将是非常显眼的。当然,如果你是用来写文章,就更不用在意严格对齐了,可变宽度反而会让排版看起来更和谐舒适。

正是因为字符设计上存在这么多众口难调的因素,许多较新的字体会通过提供字体家族、可变字体等方式来满足多样化需求。例如,Iosevka 在标准版之外还提供了宽度更舒展的 Extended 版本;Recursive 在一个可变字体里包含了从等宽到变宽、从规整到「奔放」等多种风格;等等。

额外功能
合字(ligatures)可能是当代等宽字体最能玩出花样的地方。所谓合字,是指为特定字符的组合制作一个专门造型。传统上,这一般用来为一些存在笔画勾连的字母组合(例如 fi
、ff
、Th
等)做特殊设计,使之看起来更自然和协调。