为什么浮点数会改变 \mark?

为什么浮点数会改变 \mark?

浮点数的存在似乎会破坏 s 的设置\mark,因此\topmark最终会得到错误的值。

例如,考虑以下情况:

\documentclass{article}
\textheight 50mm
\textwidth 50mm

\makeatletter \def\@oddhead{[\topmark/\firstmark/\botmark]} \makeatother

\def\block#1{\textbf{#1}\mark{#1}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
Foo bar baz.\par}

\begin{document}

\block a
\block b
\block c
\block d
%\begin{figure}\hrule width 1pt height 20mm depth 0pt \end{figure}
\block e

\end{document}

一切按预期运行:分页符出现在块“c”的中间,块“d”和“e”从第 2 页开始,因此页眉显示“[c/d/e]”。没错。

但是,如果我取消注释该{figure}行,则“图”会出现在第 3 页,而第 2 页保持不变(分页符在块“c”和“e”内),但标题现在显示“[d/d/e]”。

\@float我很困惑为什么会发生这种情况。我在或中找不到任何\@caption与标记相关的内容,而且通常 中也没有latex.ltx使用\markboth或 的内容\markright(它们是唯一latex.ltx调用 的内容\mark)。 article.cls有一些调用 的内容,但它们与 以及图表列表和索引\@mkboth相关联。\@part

我遗漏了什么?

答案1

回答我自己的问题...

这里的问题是,坦率地说,LaTeX 搞乱了 TeX\mark系统:\firstmark虽然\botmark仍然可以工作,但\topmark实际上却不行。这是因为 LaTeX 的浮点算法(它处理\marginpar图形和表格)可以在页面之间以外的时间调用输出例程。这必然会以某种方式进入,\botmark\topmark意味着\topmark不再是\botmark上一页末尾的值。

LaTeX 的\markboth系统使用 TeX\mark系统,但专门用于运行章节标题的情况,并且似乎无法重新利用。

multicol 和 fixltx2e 包(以及它们都引用的 fixmarks 包)解决了多列页面的情况的这个问题,但是其解决方法与\topmark这里所示情况不同。

我的具体情况是这样的:我正在布置试卷,想在从问题 x 中间开始的页面顶部放置一个 [Qx cont'd]。我曾经\mark{x}在每个问题的开头放置:测试\topmark工作正常,直到试卷中包含数字。我让它工作得有点笨拙。我\mark{1x}在每个问题的开头和\mark{0x}结尾放置:然后我可以通过查看开头的数字来判断\firstmark我是否仍在问题中。

编辑:虽然这是个好主意,但事实证明更有效的解决方案是\botmark手动保存,\xdef\my@topmark{\botmark}在页脚中使用。这可以在以下页眉中进行检查,它具有与相同的语义(完全相同?)\topmark。可能有一些病态的情况,这种方法不起作用,但我还没有遇到过。

答案2

如果问题是如何使用最高分,请参阅我的包titleps。另请参阅如何在页面顶部添加“续”部分标题?

相关内容