我感觉我迷失了:几天甚至几周的时间,我都在寻找错误的原因......
我有一份超过 1000 页的文档,大量使用了我自己的宏。一切都运行良好,直到我到达第 596 页。在那里,在第二行,您可以找到 \footnotemark 349。相关的 \footnotetext 正好从页面底部开始。随着第一段的结束,它到达页面末尾,第二段位于前一页的页脚!
我以前在结合环境 multicols 时遇到过类似的错误。而且我遇到了另一个(可能相关的)错误:在一页上有一个 \footnotemark,在页面底部有一个单独的 \footnoterule ——但没有 \footnotetext,因为它只出现在下一页的底部。Frank Mittelbach 好心地试图提供帮助,将我的完整资料转交给了他。
他认为,问题在某种程度上是由 LaTeX 的页面生成算法引起的:对于前页上的 \footnotetext 段落,LaTeX 首先尝试将带有 \footnotemark 和 \footnotetext 的文本放在页面底部,但意识到页面因此变得太长。因此,它收回了最后两行带有普通文本和 \footnotemark 的文本,并将它们放在下一页。当然,现在它还必须将 \footnotetext 带到下一页,否则,\footnotetext 会出现在 \footnotemark 之前——但这个过程出了问题,因为它只迁移了脚注的第一段,第二段仍然留在现在错误的页面上。
同样,对于“忘记”的 \footnoterule:LaTeX 尝试将 \footnotetext 设置在页面底部,但由于太长而失败。因此它将 \footnotetext 放在下一页的底部,但忘记删除 \footnoterule。
在我看来,这种解释仍然适用于第 596 页的错误,尽管这次与 multicols 不结合。由于错误似乎不太稳定,它同时在与 multicols 相关的地方消失了,现在可以在很多页之外的第 596 页找到——距离任何 multicol 环境都很远(老实说:脚注本身在第二段中包含一个 multicols 环境,但如果我在那里注释掉 multicols,错误(幸运的是?)保持不变)。所以可能 multicols 不是罪魁祸首。
我已经编写了一些有关 \footnotes 的宏(我不得不放弃使用 footmisc 包,因为几年前它与 hyperref 不兼容,现在看来兼容了,请参阅 Ulrike 的评论),但与此同时我注释掉了其中的每一个——而没有改变第 596 页上的行为。
但是由于错误出现的频率很低,而且对文本的变化反应敏感,甚至在我尝试以常见方式生成 MWE 的数百页之前,它都完全失败了。
我正在寻找一种方法来构建 MWE 或自己解决错误——但与此同时,我觉得我迫切需要帮助。但与此同时,我不知道在这种情况下是否有人能帮助我。
编辑:缩短文本。