代码一定要用等宽字体么?

至少Niklaus WirthAlan KayRob PikeBjarne StroustrupDon Knuth都没有把这当成理所当然的事1

Niklaus Wirth的Oberon Niklaus Wirth的Oberon

Alan Kay的Smalltalk Alan Kay的Smalltalk

Rob Pike的Acme,Dennis Ritchie和Russ Cox也是Acme的使用者 Rob Pike的Acme,Dennis Ritchie和Russ Cox也是Acme的使用者

Stroustrup《The C++ Programming Language 3rd》 《The C++ Programming Language 3rd》

Knuth《Computers & Typesetting, Volume A: The TeXbook》2《Computers & Typesetting, Volume A: The TeXbook》

「等宽字体(Monospaced Font)」最初为打字机设计,因为在敲击按键后它只能移动固定的距离。早期的计算机显示设备也使用等宽文字,数码管仅能显示单个字符,以等宽字符显示的早期显示器结构也更简单。在纯文本文档中展示表格数据,使用等宽字体更容易做到对齐——这也是我们在排版代码时看重的,因为相同等级的代码需要保持一致的缩近距离。

但拉丁字母的宽度原本就不相同,「比例字体(Proportional Font)」更符合人们长久以来形成的阅读习惯。相对于等宽字体,它的可读性(Readability)更强。

有没有可能既享受到比例字体易于阅读的优点,同时又保持代码拥有一致的缩进?

Nick Gravgaard 2006年提出了一种名为「Elastic Tabstops」的方案,目前已能应用在一些编辑器中。它重新定义了tab的行为——每个tab代表一条垂直线,将代码分隔成不同逻辑列单元,其宽度由单元中最宽行决定。下面的动态图片显示了它的效果。

假如解决了对齐问题,是否我们就可以在代码中放心地使用等宽字体呢?

也没有这么简单。据说过去的出版行业中,作者提交比例字体文稿曾被认为是「失礼的」,因为等宽字体的可辨识性(Legibility)更胜一筹,更易于编辑和估计字数。这一点上,与需要反复编辑的代码非常类似。

或许一种合适的方案是:在编辑器中使用等宽字体,而在印刷品中不妨考虑试试比例字体3


  1. 除了《The TeXbook》和《The C++ Progromming Language》其他截图有些古老。 另外因为文章涉及了较多自己不熟悉的领域,希望对字体排印熟悉的朋友能指出文章存在的问题。 

  2. 第一次对这个问题的答案产生疑惑,就是因为看到Knuth《Computers & Typesetting》这一套书的代码都使用了比例字体。 

  3. 对于汇编语言,可能需要总是使用等宽字体。