如何在页面顶部添加“续”部分标题?

如何在页面顶部添加“续”部分标题?

我有一份包含几个小节的文档。如果新节不在该页面上开始,我希望节名称在页面主体顶部(而不是在页眉中)重复。重复的名称应包含类似“(续)”的内容。例如:

Page 1:
----
Section 1

Some text …
----

Page 2:
----
Section 1 (cont.)

More text …

Section 2

Even more text …
----

Page 3:
----
Section 3

The end.
----

我怎样才能在 LaTeX 中做到这一点?

答案1

这是一个基于 的解决方案titleps,它提供了可用的最高分数(参见 Frank 的解释)。每个标题都会全局保存底部的,并在下一个标题中将其与顶部的 进行比较。(抱歉使用了或 之\sectiontitle类的 TeX 宏):def\let

\documentclass{article}

\usepackage{lipsum}
\usepackage[outermarks]{titleps} % let's assume top/bot

\def\presectiontitle{}

\newpagestyle{main}{
  \sethead{}
          {\sectiontitle
           \ifx\sectiontitle\presectiontitle
            \ (cont.)
           \fi
           \bottitlemarks
           \global\let\presectiontitle\sectiontitle}
          {\thepage}}

\pagestyle{main}

\begin{document}

\section{sec1}

\lipsum[1-5]

\section{sec2}

\lipsum[1-3]

\section{sec3}

\lipsum[1-6]

\section{sec4}

\lipsum[1-4]

\end{document}

答案2

对于自动化解决方案,TeX 引擎提供了标记机制(事实上这是唯一正确的方法)。这意味着您必须在文档中放置标记,并且在构建页面时在输出例程中必须评估这些标记并根据结果采取行动。TeX 提供三种类型的标记:(上一页\topmark最后一个标记的值)\firstmark(当前页面上的第一个标记)和\botmark当前页面上的最后一个标记。有了这三种标记,解决方案就有可能实现。

不幸的是,LaTeX 仅在其运行标题支持中使用\firstmark\botmark。这意味着必须增强 LaTeX 命令以支持\topmark

基本思想是这样的:如果我想知道页面顶部的真相,我需要一个像这样的序列来代表我的部分代码:

\mark{<section-title>}                % this is not set by standard LaTeX headings
\penalty <break before section>
\skip <skip before section if no break is taken>
<section-title>
\mark{<section-title>}

现在,如果在 处发生分页符,\penalty\topmark将包含章节标题(因为第一个\mark命令是作为上一页的最后一个标记执行的),并且\firstmark也将包含章节标题,因为\mark标题后面有第二个命令。因此,当它们相同时,您就知道您的章节位于页面顶部。

但是,如果标题不在页面顶部,而是在页面下方的某个位置,那么两个\mark命令将位于同一页面上,因此\topmark将具有来自前一页部分的值,即,将有所不同\firstmark,因此您知道您需要生成“连续”行。

这大致就是需要实现的算法的概要。 包中对此有一些支持extramarks,但是整个 topmark 机制与 LaTeX 的 float/marginpar 机制不太兼容(这就是 LaTeX\topmark首先不使用的原因)。任何浮点数都会破坏,\topmark因此上述方法仅适用于简单文档(例如索引等——例如,如果顶级索引条目跨列或跨页,LaTeX Companion 索引会使用此方法重复它们)。

如果需要更复杂的文档,那么您需要扩展 LaTeX 输出例程以跟踪顶标值并在进行浮点管理时正确地恢复它们(这并非易事)。

很抱歉,据我所知,没有直接可用的软件包。TLC2 中的内容有点太具体了,没有任何用处。

更新

看起来终于有一个包支持这一点了:titleps由 Javier Bezos 编写,它模拟(但不使用)\topmark。所以这很值得一看。上面概述的基本方法将保持不变。

答案3

自动化解决方案超出了我的 LaTeX 知识范围,但起点(至少对于手动设置而言)可能是以下内容:

\documentclass[]{article}
\usepackage{blindtext}
\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\clearscrheadings
\clearscrplain
\lohead{\headmark~(cont.)}

\begin{document}

\section{sec1}

\blindtext[12]

\section{sec2}

\blindtext[2]

\section{sec3}\lohead{\headmark}

\blindtext[2]

\end{document}

自动化可能比较棘手,因为需要跟踪当前文本是否在分页符处分割。

相关内容