我正在阅读 Latex 3 文档,但感到很困惑。标题中提到的实体之间的交互和差异描述得太少,几乎没有实际的例子。
据我所知,TeX 将文本排版为一系列框。框可以以两种方式堆叠:垂直和水平,并且有一种特殊的算法可以采用一系列框并将它们排列成行,即一系列垂直堆叠的框,每个框都包含一系列水平堆叠的框。一旦垂直框的高度达到临界高度,该算法就会将其传递给特殊的输出例程,该例程应该会生成一个页面,但可能会被覆盖以执行其他操作。
LaTeX3 提供了很多很好的函数来处理垂直和水平框。但它也引入了 galley 的概念,它在某种程度上与当前 vlist 相关。据我所知,没有函数可以明确地从 galley 中添加或获取内容,只有影响(当前?)galley 参数的函数。因此,galley 似乎是排版机制和框交互的地方,但我可以使用更清晰的解释。
棺材似乎只是一种在页面上声明性地定位排版框的简单机制,可能是为了在输出例程中使用,对吗?但我不明白它们的尺寸是如何定义的,以及这些尺寸与放入棺材的盒子有何关系。
有人可以解释一下,所有提到的实体(框、vlist、galley 和 coffins)在排版管道中出现的位置(从水平框(即单词)开始),它们之间的关系以及如何计算每个实体的维度?
答案1
首先要记住的是,宏观层面上没有任何东西能够从根本上改变 TeX 的工作方式。这意味着expl3
方法可以为 TeX 概念提供有用的接口,但在底层我们仍然在处理相同的机制。
正如您所说,TeX 使用框来构建页面,这些框会被添加到垂直列表中。构建页面或类似页面的结构时,此类列表是一个样板。代码在l3galley
和xgalley
是实验并探讨了如何控制主垂直列表 (MVL) 的添加:与其他垂直列表不同,我们在“备份” MVL 方面受到很大限制,因此在添加点的控制非常重要。目前,大多数想法l3galley
可能与许多现有的 LaTeX 包代码不兼容。但是,其中一些已被纳入内核:具体了解段落钩子是如何实现的。
模块和两者都处理一般的盒状结构:它们不仅仅是对 MVL 的贡献。模块expl3
提供了较低级别的接口,这些接口是 TeX 盒构造的薄包装:代码添加了一致的接口以及一些细微的调整。例如,所有盒构造都包含一个额外的组,以使它们“颜色安全”。l3box
l3coffins
box
expl3
expl3
棺材是“带把手的盒子”。这意味着棺材有额外的(宏观层面)数据,以便于放置。这与“装饰”或互动无关本身使用 MVL。相反,这意味着您可以通过描述手柄关系来将棺材彼此相对放置:“将棺材 A 的右上角放置在棺材 B 的基线水平中心左侧 200pt 处”。标准手柄是通过检查棺材构造下方的排版框的大小来自动计算的。
这些都不会影响根本TeX 如何为 shipout 构建段落或垂直列表。这些概念在TeXbook和其他类似的参考文献,应查阅更多详细信息:这是一个需要在书中用一章长度进行讨论的话题!