一个开发者找不到「完美」的编程字体,干脆用 Python 自己设计了一个。这是 Nordwand-Mono 的故事——紧凑的 neo-grotesk 等宽字体,专为编码设计,在 GitHub 上已经 684 stars。
作者是终端和 Neovim 重度用户,对现有字体始终不满意,于是从零开始用 Python 画字形。设计取了个巧妙的组合:把经典 Univers 字体(Adrian Frutiger 1957 年的设计,现代主义排版的代表)的元素,带进 JetBrains Mono 的比例里。「Nordwand」这个名字指瑞士和它的标志性排版——瑞士北面那种冷峻、严谨、近乎苛刻的氛围,正好契合作者要的「紧凑、冷淡」的代码字体气质。灵感清单里还有 Apple 的 SF Pro & SF Mono、Sharp Type 的 Alpes Mono、Dalton Maag 的 Ubuntu Mono。

最有意思的是它的技术路线。字体不是用 FontForge 或 Glyphs 这类传统工具画的,而是用 Python 生成——每个字形是一个 Python 类,往里注入绘制上下文对象。这意味着你可以改 x-height、capital height 等度量,然后跑 python -m generate_font --config config.yml 重新生成整个字体,输出到 custom-fonts 目录。对喜欢折腾的开发者来说,「把自己的字体配置化」这个思路本身就很有吸引力——虽然 README 里也诚实警告了:改了度量不保证好看,有些字形需要额外调整。
功能上走的是克制路线。替代字符(alternative characters)通过 OpenType feature 提供,可以调字体的气质;连字只给了两个极简的 -> 和 =>——作者说「我本人不会用一整套连字」,这种「少即是多」的态度在连字泛滥的编程字体圈里算是一股清流。

对一个 684 stars 的个人字体项目来说,它已经证明了需求的真实性——总有人想在终端里用「长得像 Univers 又像 JetBrains Mono」的东西。而它最值得关注的点,可能是「用代码生成字体」这条路:当字体设计变成可配置的 Python 工程,改一个度量重新编译,社区就能像 fork 代码一样 fork 一种字体风格。
参考来源: