如何捕捉段落被某些东西打破的情况

如何捕捉段落被某些东西打破的情况

也许有一种方法可以捕捉段落何时因某些原因中断,例如,在段落中断后插入一些代码的公式。该命令\everypar允许我们捕捉段落的开始时间,但它也可以是一种捕捉段落何时因某些原因中断的方法,例如,[]在段落中断后插入一些代码的公式。

是的,lua 中存在一个回调 post_linebreak_filter 可以解决这个问题,但我需要对 LaTeX/lualatex 进行同样的操作来插入一些 LaTeX 命令。

这是可能的吗?如果可以,那么它是如何工作的?

答案1

并非每个触发 TeX 换行算法的上下文都有一个合理的钩子。

最常见的情况是段落的结束,因此\par,以及数学显示段落中间(你可以用检测到\everydisplay),但棘手的情况是 vbox 的结束,如果你有\vbox(或包装器,如\parbox或表格p列),那么在像这样的上下文中

\vbox{
\hsize = 1cm
one two three four five}

线路断路器直接由框的末端触发(与说的不一样)

one two three four\vskip 2cm

其中\vskip插入一个\par标记(希望)来结束段落,因此如果您已定义\par插入代码,它将捕获这种情况。

即使在 e-TeX 中也没有用户可控制的钩子可以捕获 vbox 的末尾,除非你重新定义\vbox\vtop等)以在末尾插入代码,但\vbox在不破坏现有代码的情况下重新定义是很难的。

相关内容