我想使用\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
使用页面的第一个右标记。因此,您也可以在\tableofcontents
an 之前设置空白\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}