看似无辜的排版页背后:算法拆解

A page looks innocent: the algorithms behind a typeset page

当你浏览一本排版精美的书籍时,往往只看到文字和图片,却忽略了每一行背后复杂的决策。这篇文章深入剖析了从页面布局到 PDF 字节生成的全过程。作者对比了 speedata Publisher(基于 LuaTeX)和 boxes and glue(基于 Go)两套引擎的架构差异,详细讲解了如何处理孤行、表格跨页和脚注等难题。文章还揭示了 Donald Knuth 和 Michael Plass 提出的段落断行算法如何通过图论寻找最优路径,以及 Frank Liang 的连字符模式如何在不依赖字典的情况下处理单词断行。最后,通过 HarfBuzz 字体 shaping 过程,展示了 Unicode 字符如何转化为最终的字形。

当你看着排版精美的书籍或目录的一页时,通常不会注意到任何特别之处,但页面上的每一行都是许多微小决策的结果。

同日更多故事

2026-10-21