不使用 fancyhdr 自定义标题

不使用 fancyhdr 自定义标题

我要用 LaTeX 重写一个奇怪的旧书章节。最烦人的是页眉。在奇数页上,页眉应由章节名称等组成。但问题是,如果页面开始新的章节,则此章节名称应出现在页眉中(标准),如果没有(页面是上一章节的延续),并且下一章节在此页面的较低位置开始,则页眉应显示此延续章节的名称(当前页面第一行文本所属章节的名称)。

我搜索了很多次,但仍然一无所获。那么简单 - 如何在标题中插入当前页面第一行文本所属的部分名称,而不是标准的 - 从当前页面较低位置开始的部分名称?

答案1

标题安全软件包提供的\toptitlemarks功能来实现所需的结果;您可以查看文件ttlps.def以了解如何实现此功能。举个小例子:

\documentclass{book}
\usepackage[pagestyles]{titlesec}
\usepackage{lipsum}

\newpagestyle{mystyle}{
  \sethead{\toptitlemarks\thesection\ \sectiontitle}{}{}}

\begin{document}
\pagestyle{mystyle}

\chapter{Here is a title that needs to wrap over several lines and has short words}
\lipsum[1]
\section{Test section one}
\lipsum[1]
\section{Test section two}
\lipsum[1]
\section{Test section three}
\lipsum[1]
\section{Test section four}
\lipsum[1]
\section{Test section five}

\end{document}

答案2

事实上,这是一个复杂的问题,正如 TeXbook (p260) 中解释的那样,因为您需要发出两个标记,一个在标题之前,另一个在标题之后——换句话说,必须以某种方式修改分段命令,这就是 titlesec 所做的。据我所知,没有其他软件包(包括 fancyhdr,它不会修改分段中的标记机制)可以自动完成此布局。作为 titlesec 的作者,我可以向您保证,这绝非易事!

答案3

也许序言中的这段代码可以满足您的需要

\makeatletter
\def\rightmark{\expandafter\@rightmark\botmark\@empty\@empty}
\makeatother

编辑。重新阅读问题后,我似乎误解了,因为代码将页面的最后一个部分标题放在了页眉中。

需要的是本地黑客攻击:

\stepcounter{section}{1}
\sectionmark{Title}
\addtocounter{section}{-1}
\section{Title}

也许可以检查某个部分标题是否从页面的最顶部开始,在这种情况下发出命令。

相关内容