如何确保 \sectionmark 命令从第一节页开始起作用而不影响章节开头的页眉?

如何确保 \sectionmark 命令从第一节页开始起作用而不影响章节开头的页眉?

我的问题本质上是第一节页面的页眉中忽略了节标记命令。解决方案是在 的定义中将 的\sectionmark高级命令替换\markright为 的低级命令\rightmark。对于该问题的 MWE 来说,它非常有效。但是,它对我不起作用,因为在我的书中,有些章节以很长的序言开始,然后才出现任何章节命令。结果是运行头打印上一章最后一节的编号和标题(而使用 的标准定义\sectionmark,这些无章节的页面上不会出现任何标题)。请注意,发出\sectionmarkafter\chapter命令并不能解决问题,因为运行头仍然包含错误的章节编号。以下是从上述问题中采用的 MWE:

\documentclass[10pt]{book}
\usepackage{kantlipsum}
\usepackage{fancyhdr}

\pagestyle{fancy}

\renewcommand{\chaptermark}[1]{\markboth{\chaptername\  \thechapter.\  #1}{}}
\renewcommand{\sectionmark}[1]{\gdef\rightmark{\thesection.\  #1}} % 
\fancyhead[LO]{\rightmark}
\fancyhead[RE]{\leftmark}
\fancyhead[RO]{\thepage}
\fancyhead[LE]{\thepage}
\renewcommand{\headrulewidth}{0pt}

\begin{document}

\chapter{One}
\section{First section of chapter one}
\kant[1-3]
\section{Second section of chapter one}
\kant[8-15]

\chapter{Two}
\kant[1-10]
\section{First section of chapter two: Too much text for a running head}
\sectionmark{First section of chapter two}
\kant[11-15]
\end{document}

此外,参考书目中的页眉biblatex也因 的定义而扭曲\sectionmark,但这些在 MWE 中很难重现。在此先感谢您的帮助。

这里是进一步的 MWE 演示问题:如果命令\section落在奇数页,则该页的运行头将显示完整标题,而不是给出的缩短标题\sectionmark

\documentclass[10pt]{book}
\usepackage{kantlipsum}
\usepackage{fancyhdr,etoolbox}

\pagestyle{fancy}

\renewcommand{\chaptermark}[1]
{\markboth{\chaptername\  \thechapter.\  #1}{\chaptername\  \thechapter.\  #1}}
\fancyhead[LO]{\rightmark}
\fancyhead[RE]{\leftmark}
\fancyhead[RO]{\thepage}
\fancyhead[LE]{\thepage}
\renewcommand{\headrulewidth}{0pt}

\begin{document}

\chapter{One}
\section{First section of chapter one}
\kant[1-3]
\section{Second section of chapter one}
\kant[8-15]

\chapter{Two}
\kant[1-15]
\section{First section of chapter two: Too much text for a running head}
\sectionmark{First section of chapter two}
\kant[11-15]
\end{document}

答案1

引用的答案看起来完全错误。\rightmark不是低级对应:第一个命令检索一个值,而第二个命令存储它。LaTeX 使用命令而不是简单的命令\markright来存储值是有充分理由的,答案破坏了这一点。\mark\def

如果没有章节,您似乎想要一些文本,因此我建议您也将一些内容存储到带有章节的正确标记中:

\documentclass[10pt]{book}
\usepackage{kantlipsum}
\usepackage{fancyhdr,etoolbox}

\pagestyle{fancy}

\renewcommand{\chaptermark}[1]
{\markboth{\chaptername\  \thechapter.\  #1}{\chaptername\  \thechapter.\  #1}}
\fancyhead[LO]{\rightmark}
\fancyhead[RE]{\leftmark}
\fancyhead[RO]{\thepage}
\fancyhead[LE]{\thepage}
\renewcommand{\headrulewidth}{0pt}

\begin{document}

\chapter{One}
\section{First section of chapter one}
\kant[1-3]
\section{Second section of chapter one}
\kant[8-15]

\chapter{Two}
\kant[1-10]
\section{First section of chapter two: Too much text for a running head}
\sectionmark{First section of chapter two}
\kant[11-15]
\end{document}

相关内容