据我所知,网格排版的问题在于 TeX 用于页面构建的机制。有一些软件包试图解决这个问题,并且可能(希望)使用 LaTeX3 来实现。
我的问题是为什么 ConTeXt 中使用的机制不能在 LaTeX 中使用,以及是什么使得 ConTeXt 中的网格排版成为可能。
答案1
网格排版的关键因素是确保每行最终位于页面上固定的垂直位置,与之前或之后的内容无关。
在 LaTeX 中,这一点无法实现,因为在方程式或图形后插入的垂直间距始终相同,并且不会根据方程式或图形的高度进行调整。这样做的问题是,基本上所有东西都可能破坏网格。例如,如果您为方程式和图形实现了自适应间距,但忘记了表格的自适应间距,那么这些间距又会弄乱您的垂直间距。有些 LaTeX 软件包试图执行此任务,但它们只能在高度异构的文档类和软件包的非常有限的范围内工作。
另一方面,除了极少数第三方模块外,ConTeXt 非常单一。这允许完全一致地实现自适应垂直粘合,并且只要一致使用高级 ConTeXt 宏,用户就很难破坏此机制。
上面已经部分阐述了为什么 LaTeX 无法使用此功能的原因(异构环境、模块化方法)。另一点是,在 ConTeXt MKIV 中,网格捕捉是在 Lua 中实现的,即使可以将其移植到 LaTeX,最终的功能也仅限于 LuaTeX 用户。
最后是 ConTeXt 中网格排版的一个小例子:
\setuplayout[grid=yes]
\showgrid
\starttext
\input knuth
\startformula
E = m c^2
\stopformula
\startplacefigure[title={The Dutch cow}]
\externalfigure[cow]
\stopplacefigure
\input ward
\stoptext