\lastbox 的用法

\lastbox 的用法

作为我们 LaTeX3 工作的一部分,我们通过 expl3 包为 TeX 编程提供了一致的接口。我们最近一直在讨论 TeX 原语\lastbox,它用于检查或解压排版中刚刚出现的内容。

从对使用 的各种软件包的扫描来看\lastbox,它的使用似乎仅限于(似乎完全)以下结构:

\setbox\foo=\lastbox
... % do something with box \foo

也就是说,不需要提供对只读\lastbox变量本身的访问,而只需要提供一种方法,通过该方法可以将最后一个框分配给 TeX 框以进行进一步处理;类似于

\box_set_to_last:N \foo
... % do something with box \foo
    % no such thing as \lastbox or equivalent

我们建议只向 expl3 程序员提供此方法,并提倡\lastbox使用任何相关功能。这看起来合理吗?相反,您是否知道不涉及 first 的\box_set_to_last:N实际用途?\lastbox\setbox

答案1

调查它的使用情况,\lastbox似乎它总是被用作

\setbox\someboxregister=\lastbox

有一个重要的例外:第 619 行plain.tex包含

\ifus@\unvbox\z@\lastbox\fi

\tabalign作为(又名)的魔术宏的一部分\+

我认为为最常见的用途提供 LaTeX3 接口是一件好事。人们总是可以依赖(重命名的)原语,例如 Knuth 的用途。

答案2

我发现有三个方面\lastbox没有被涵盖\setbox\foo=\lastbox

\shipout\lastbox首先,我将一份文件的所有页面打包成一个大文件\vbox{<firstpage><secondpage>...},然后反复使用从现在开始反向翻页

其次,\lastbox在垂直模式下使用将从当前列表中取出最后一个框,然后将其放回,插入\baselineskip\lineskip\prevdepth与该框上方处于活动状态的一样相关。这也许就是\lastboxKnuth\tabalign宏中的用途。例如,以下\baselineskip在两个框之间放置了几个胶水。

\vbox{\hbox{}\hbox{}\lastbox\lastbox\lastbox\showlists}

在水平模式下,空间因子也会发生类似情况:它会被重置为1000,因为它应该跟随一个框。我看不出这样做有什么用处,但它是一致的。

\vbox{\hbox{}\spacefactor=999\lastbox\showthe\spacefactor}

我认为我们应该远离\lastboxLaTeX3 中那些奇特的 用法,至少在我们找到实际用途之前。在所有情况下,\lastbox都可以替换为{\setbox0\lastbox\box0}

相关内容