作为我们 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
与该框上方处于活动状态的一样相关。这也许就是\lastbox
Knuth\tabalign
宏中的用途。例如,以下\baselineskip
在两个框之间放置了几个胶水。
\vbox{\hbox{}\hbox{}\lastbox\lastbox\lastbox\showlists}
在水平模式下,空间因子也会发生类似情况:它会被重置为1000
,因为它应该跟随一个框。我看不出这样做有什么用处,但它是一致的。
\vbox{\hbox{}\spacefactor=999\lastbox\showthe\spacefactor}
我认为我们应该远离\lastbox
LaTeX3 中那些奇特的 用法,至少在我们找到实际用途之前。在所有情况下,\lastbox
都可以替换为{\setbox0\lastbox\box0}
。