当我使用 \leftmark 和 \rightmark 与 fancyhdr 时,如何防止“内容”在标题中出现两次?

当我使用 \leftmark 和 \rightmark 与 fancyhdr 时,如何防止“内容”在标题中出现两次?

我想使用\leftmark\rightmark,但“内容”在标题中只出现一次(在左侧)。相反,它同时显示为\leftmark\rightmark

以下 MWE 说明了这个问题:

\documentclass[12pt]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}

\lhead{\leftmark}
\rhead{\rightmark}

\begin{document}
\tableofcontents
\end{document}

答案1

改变 的定义\tableofcontents

\documentclass[12pt]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}

\lhead{\leftmark}
\rhead{\rightmark}

\makeatletter
\renewcommand\tableofcontents{%
    \section*{\contentsname
        \@mkboth{%
%           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% DELETED
           \MakeUppercase\contentsname}{}}% ADDED
    \@starttoc{toc}%
    } 
\makeatother

\begin{document}
\tableofcontents
\end{document}

答案2

该包装的用户指南fancyhdr第 10 页指出

需要注意的是,LATEX 标记机制对于篇章(总是从新页开始)和较​​长的节来说工作得很好。对于较短的节和小节来说,它工作得不太好。这是 LATEX 的问题,而不是 fancyhdr 的问题。

据我所知,有一个简单的解决方法,它不需要重新定义 LaTeX 的\tableofcontents命令,包括在命令\rhead{}之前指定\tableofcontents,然后\rhead{\rightmark}在第一部分之前指定:

\documentclass[12pt]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\leftmark}
\begin{document}
\rhead{}   % set \rhead to empty
\tableofcontents

\clearpage   % OP has indicated that ToC spans a full page
\rhead{\rightmark} % reset \rhead to \rightmark

\section{Hello}
\end{document}

答案3

\rightmark使用页面的第一个右标记。因此,您也可以在\tableofcontentsan 之前设置空白\markright以删除第一页的右标记,并使用 an在目录中addtocontents插入 a\markright以删除以下页面的右标记:

\documentclass{article}
\usepackage{fancyhdr}
\pagestyle{fancy}

\lhead{\leftmark}
\rhead{\rightmark}
\begin{document}
\markright{}
\tableofcontents
\addtocontents{toc}{\protect\markright{}}
%some text in the toc for test:
\addtocontents{toc}{blub}
\addtocontents{toc}{\protect\newpage}
\addtocontents{toc}{blub}

\end{document}

顺便说一句:你没有说\leftmark\rightmark包含哪些信息。你应该知道,某些组合(例如节/小节)可能会导致令人困惑的结果。根据经验法则, 应该\leftmark连接到开始新页面的内容,例如\part\chapter

答案4

\documentclass{article}
\usepackage{fancyhdr}

\begin{document}

\rhead[]{Contents}

\lhead[Contents]{}

\tableofcontents

\markboth{}{\rm Contents}

\end{document}

相关内容