Monaspace

一种新的开源等宽字体家族 Monaspace 正在引发关注,它通过所谓的“texture healing”——一种 OpenType 技巧——在上下文中细微地重塑诸如“m”之类的字形,以在保持严格字符网格的同时提高可读性。许多开发者对在同一代码库中混用多种兼容的等宽字体以及高级连字功能感到兴奋,但也有人担心输入时文本会“跳动”、在低 DPI 屏幕上缺少 hinting,以及这些特性在不同编辑器和终端中的支持不一致。讨论也再次引发了关于连字的更广泛争论,以及编程是否应该超越等宽字体,转向比例字体或可变宽度字体。

总体反响

  • 许多评论者认为 Monaspace 在视觉上很吸引人、很有创新性,而且设计精良;网站/演示体验也广受称赞。
  • 也有人觉得它并没有特别惊艳,或者更偏爱现有的常用字体(JetBrains Mono、Fira Code、Iosevka、PragmataPro、Berkeley Mono、Ubuntu Mono、Monaco 等)。
  • 有些人对某些具体设计选择不太买账(花括号、Radon 的小写“l”、较宽的字符、某些比较连字)。

Texture healing

  • 被视为对 OpenType(calt)的一种巧妙运用:在保持等宽网格的同时调整字形形状,以改善文本的“纹理”。
  • 与 Commit Mono 的“smart kerning”相比;Monaspace 的做法被认为更为细腻,因为它是在词与词之间重新分配间距。
  • 支持者称它是“你不知道自己需要的功能”;怀疑者则认为重复字母的宽度不一致(例如不同宽度的“m”)在视觉上很刺眼,或者只是相对于真正的比例字体而言的一种折中。
  • 担忧点:输入时文本会“跳动”,因为宽度取决于后续字符。有些人觉得这只是小问题;另一些人则说它不适合写作,但用于阅读还可以。

连字与符号化

  • 编程连字引发两极分化:有人喜欢它们,觉得可读性很高;也有人“讨厌”它们,尤其是当多个字符的运算符变成单个符号时(例如 != → ≠)。
  • 一个特别的顾虑是教学材料和共享截图/视频,因为连字可能会掩盖实际输入的字符是什么。
  • 几位评论者指出,连字是可选且可通过 OpenType 功能标志进行配置的;原则上,Monaspace 允许在不启用更广泛连字的情况下开启 texture healing(反之亦然),不过某些工具会把它们绑定在一起。

Mix & Match / 多字体工作流

  • 这个超级字体家族的概念(多种兼容的等宽字体,共享度量)被广泛认为新颖且对代码很有前景:例如,注释、文档字符串、字符串或“手写”笔记分别使用不同字体。
  • 一些演示被认为过于含蓄,不太实用;Radon 的手写风格则很突出,并且在注释中很受欢迎。
  • 现实中的使用受限于编辑器/终端对同时使用多种字体的支持。少数方案会用斜体/粗体作为代理来切换字体。

编辑器/终端支持与配置

  • VS Code 被定位为主要目标;已有一个用于多字体使用的 hacky 扩展。
  • Emacs、Vim/Neovim、Kitty 和一些终端可以通过 faces/attributes 混用字体,但需要手动配置。
  • 若干终端因为标志位的原因没有将 Monaspace 识别为等宽字体,这使得选择和连字支持都更复杂。

渲染、宽度与 hinting

  • 缺少手动 hinting 对一些人来说是致命问题,尤其是在低 DPI 显示器上;另一些人则认为自动 hinting 已经足够。
  • 不少用户觉得 Monaspace 即使在最窄宽度下也太宽;偏爱紧凑字体的人更喜欢 PragmataPro/Iosevka 那种密度。
  • 在某些终端里,行高被认为偏紧,但有时可以在终端配置中调整。