哪些原语可以扩展地告诉我们有关当前水平列表的信息?

哪些原语可以扩展地告诉我们有关当前水平列表的信息?

我一直在编写一些代码来扩展宏并捕获字符和不可扩展的基元,因为它们到达 TeX 的胃里,我遇到了一个问题:由于我逐个收集字母,使用不可扩展的代码(至少\futurelet),字母之间的字距和连字被破坏了。因此,最好是抓取字母,直到遇到非字母排版命令。但是,我的代码必须处理类似的事情

a b\ifdim\lastskip>0pt hi!\fi c

如果我在继续扩展之前排版,那么和b之间的字距就会被破坏。但如果我先继续扩展,那么就会看到之前的空格,而不是应该有的样子。我的解决方案是在开始单词时插入一个,然后收集字母,执行扩展,然后删除给定的跳过并排版字母。这也确保了和其他都是零,这是应该的。bc\lastskip0pt\hskip 0pt\relax\lastpenalty

为了确保我的解决方案正确,我需要知道哪些基元可以访问有关正在排版的内容的信息。在 TeX 中,至少有\lastkern\lastpenalty\lastskip(没有 \lastbox,因为它不可扩展)。pdfTeX 基元呢?XeTeX 基元(特别是,可以获取有关最后一个字符的信息)?LuaTeX 可能又是另一个麻烦,因为一切都可以通过 扩展来完成\directlua:我无法控制。

答案1

对于 etex,有\lastnodetype例如在这些例子中扩展为 0 和 1

aaa\the\lastnodetype bbb


aa\hbox{a}\the\lastnodetype bbb

\bye

不确定您在问题范围内考虑了哪些信息,例如\parshapeetex\parshapelength等告诉您“有关当前段落的一些信息”,但也许您并不打算包括这一点(或者如果您这样做那么然后\leftskip\rightskip)也许您的意思是当前水平列表而不是当前段落?

相关内容