我可以获得“当前页面”或“最近贡献”中的内容吗?

我可以获得“当前页面”或“最近贡献”中的内容吗?

当我编译以下内容时,

\documentclass[a4paper]{article}

\usepackage{atbegshi}

\AtBeginShipout{\showlists}
\showboxdepth\maxdimen
\showboxbreadth\maxdimen

\usepackage{lipsum}

\newcommand\fnlipsum[1]
{%
  \begingroup
    \let\par\relax
    \lipsum[#1]\footnote{\lipsum[#1]}
  \endgroup
  \par
}


\begin{document}

\fnlipsum{1}
\fnlipsum{2}
\fnlipsum{3}
\fnlipsum{4}

\end{document}

然后我在日志文件中看到

### current page: (held over for next output)

以及

### recent contributions:

中的一些内容\insert253,在当前页面上,脚注 3 的其余部分是从第 1 页分离出来的,而在最近的贡献中,脚注 4 仍然嵌入在从主垂直列表分离出来的文本中。

现在我的问题是:

  1. “当前页面”和“最近贡献”在哪里?它们是方框吗?我能找到它们吗?也许用 LuaTeX?
  2. 我想过滤掉插入内容,即提取它们包含的内容并将其从各自的位置移除(分别用其他插入内容替换它们)。这可能吗?

答案1

无法回答 luatex 的问题,但经典 tex 中的答案或多或少是你无法获得它们(或者至少你无法在数据存在时获取它们)。那里)。

afterpage包需要掌握这些,以便它可以备份、插入指定的文本输出例程保留的文本,以便指定的文本出现在下一页的顶部。

这里使用的技巧(可能对您有用也可能没用)是\aftergroup在输出例程的隐式组之后插入一个特殊惩罚,这样输出例程就会在材料重新插入到主垂直列表时再次被调用。然后,特殊输出例程以正常方式查看 box255 中保留的材料。在这种afterpage情况下,它会转储指定的标记,然后拆箱该材料,以便由正常输出例程重新收集。如果您闭上眼睛,不要太担心可能出错的地方,它有时会成功一半。

答案2

David 的回答非常好,但只是为了完整起见:在 luatex 中,tex.lists表包含一小组指向保存该数据的节点列表的指针。

  • page_ins_head:等待插入的循环列表
  • contrib_head:最近的贡献
  • page_head:当前页面内容
  • hold_head:用于保留到下一页的项目
  • adjust_head:当前\vadjust列表的头部
  • pre_adjust_head:当前\vadjust预列表的头部

事实上,你可以在 luatex 中修改这些节点列表(它们不是盒子,只是节点列表),但除非你愿意进行实验和测试很多,这样做可能不太明智。首先,这些列表的内部结构有内部要求(例如,它们是垂直模式材料,并且必须page_ins_head是圆形的),而且内部排版引擎的各个部分都维护指向(特别是)前四个列表的指针和预先计算的信息。lua 接口尚未考虑这些。

相关内容