当 \subsection 与 \section 位于同一页面时,其右侧标记会消失

当 \subsection 与 \section 位于同一页面时,其右侧标记会消失

在双面文章中,我希望在奇数页显示当前子节名称,在偶数页显示当前节名称。因此我写了

\fancyhead[RO]{\rightmark}
\fancyhead[LE]{\leftmark}
\renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{}}
\renewcommand*{\subsectionmark}[1]{\markright{\thesubsection~~#1}}

但是,如果\section\subsection在同一页上,则正确的标记会消失。我在这个网站上搜索并找到了原因(在这个答案):

\rightmark 总是使用第一个标记,因此如果您在一页上有章节或小节,您将得到第一个。

有什么方法可以改变这种行为,让正确的标记始终出现?

下面是一个MWE,正如你所看到的,第一页上的正确标记消失了。

\documentclass[twoside]{article}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RO]{\rightmark}
\fancyhead[LE]{\leftmark}
\renewcommand*{\sectionmark}[1]{\markboth{\uppercase{#1}}{}}
\renewcommand*{\subsectionmark}[1]{\markright{\thesubsection~~#1}}

\usepackage{blindtext}
\begin{document}
\blindtext
\section{Section One}
    \subsection{Subsection One}
        \blindtext[10]
\section{Section Two}
    \blindtext[3]
    \subsection{Subsection Two}
        \blindtext[10]
\end{document}

答案1

这是一个经常出现的问题,因为标准 LaTeX 标记相互影响。因此,部分标记会隐藏子部分标记。我编写了一个新包extramarks2来解决这个问题。该包尚未在 CTAN 上,因为我仍需编写文档并将其集成到文档中fancyhdr。但您可以从此处下载测试版Github:获取文件 README-extramarks2、extramarks2.sty 和 extramarks2-multicol.tex。使用此包,解决方案是

\documentclass[twoside]{article}

\usepackage{fancyhdr}
\usepackage{extramarks2}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RO]{\firstrightxmark}
\fancyhead[LE]{\firstleftxmark}
\fancyfoot[c]{\thepage}
\renewcommand*{\sectionmark}[1]{\extramarksleft{\uppercase{#1}}}
\renewcommand*{\subsectionmark}[1]{\extramarksright{\thesubsection~~#1}}

\usepackage{blindtext}
\begin{document}
\blindtext
\section{Section One}
\subsection{Subsection One}
 \blindtext[10]
\section{Section Two}
 \blindtext[3]
\subsection{Subsection Two}
 \blindtext[10]
\end{document}

在此处输入图片描述

相关内容