在双面文章中,我希望在奇数页显示当前子节名称,在偶数页显示当前节名称。因此我写了
\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}