“I just chose words carefully”:在等宽字体中用手工排版实现完美右对齐
事件概述
Hacker News 上出现了一篇题为 “I just chose words carefully” 的简短文章,来自网站 unsung.aresluna.org。文章作者以“Unsung”为署名,分享了一个来自上世纪末的奇特排版案例:一位名叫 rs1n 的作者,在 1990 年代末撰写《Super Metroid》游戏攻略时,没有使用任何排版工具,仅靠手工挑选单词,就让全文每一行的右边缘都精确对齐,且全程没有出现双空格。
这篇文章在 Hacker News 上获得了 189 分和 43 条评论(原文未说明更多细节),引发了人们对等宽字体排版、文本编辑与“手工极致”的讨论。
关键技术点
1. 等宽字体中的对齐困境
在等宽字体(Monospace)中,每个字符宽度相同。常规左对齐没有问题;右对齐也可以通过手工计算空格数量实现,但居中对齐就变得困难,因为没有“半空格”来微调两侧间距。更棘手的是两端对齐(Full Justification):等宽字体下,不同长度的单词会导致空格被拉伸得极不均匀,产生令人不适的“河流”般的空白间隙。
2. 连字符(Hyphenation)并不优雅
传统排版中解决两端对齐的常用手段是断词连字符,但在等宽字体中,连字符本身会显得非常突兀,干扰阅读,并且会破坏复制粘贴的完整性。因此,等宽环境下的全文两端对齐很少见。
3. 终极方案:重组文本,让每个单词“恰好”
作者 rs1n 采用了一个极端而优雅的思路:不调整空格,而是调整词句本身。他重写攻略中的每一行文字,只选择那些长度组合起来恰好等于行宽的单词,从而避免任何多余空格。效果令人震撼——整篇长约 17,000 词的攻略,每一行的右边缘都精准地结束在一个字母上,整篇没有任何双空格。
4. 实现工具:没有工具
在攻略底部的 FAQ 中,rs1n 写道:
“你用什么程序来对齐文本?”
“没有。我只是仔细选择单词,使所有内容在右侧对齐。所有工作都是用 ASCII 编辑器完成的。”
这意味着整个过程全部依靠人工计算字符数和单词长度,没有辅助脚本或排版软件。
对数据科学或 AI Agent 落地的意义
虽然这是一篇关于文本排版的小众文章,但它对数据科学和 AI Agent 领域有几点启示:
- “约束满足”思维:rs1n 的工作本质上是将“行尾对齐”转化为一个组合优化问题——在给定行宽下,从词汇表中挑选单词序列,使其总字符数恰好等于目标值。这与自然语言生成中的受控文本生成(Controlled Text Generation)高度相似,例如要求模型生成特定长度、特定韵律或符合格式约束的句子。
- 人工 vs 算法:rs1n 用纯手工完成的任务,现代 AI Agent 可以通过贪心算法、动态规划甚至大语言模型来自动化。这提醒我们:许多看似需要“匠人精神”的文本任务,实际上可以被建模为搜索或优化问题。
- 人机协作的边界:文章作者也提到,许多开发者为让按钮 UI 文本或 tooltip 在指定宽度内显示而不换行,曾花费数小时调整措辞。这种微观文本工程的体验,正是数据科学家在调试 prompt、生成摘要或设计用户界面时常常遇到的挑战。
我的技术点评
这篇文章最打动我的地方,不是排版本身,而是那种“用最朴素的工具对抗硬约束”的执着。在当今以 AI 生成和自动化排版为主流的时代,rs1n 的做法显得古老甚至笨拙,但它恰恰展示了 “理解问题本质”的价值:他意识到在等宽字体下,与其挣扎于空格分配,不如从源头控制单词长度。
从工程角度看,这是一个典型的“改写而不是后处理”的案例。现代 AI Agent 可以轻易生成流畅文本,但若要满足严格的格式约束(例如每行恰好 N 个字符),许多模型仍然会失败,需要后处理修复。rs1n 的方法提示我们:约束应该嵌入到生产过程中,而不是事后打补丁。
如果你对排版、文本生成或“极端人工优化”感兴趣,这篇文章值得一读。它没有高深的理论,但让人重新思考“精确”与“优雅”的含义。
