我在让目录fancyhdr
正常运行方面遇到了一些麻烦。下面有一个 MWE,它试图按照我的需要创建文档。本质上,我有一个标题页、一些序言页和一个目录,后面是实际的文档内容。我在文档上定义了一个页脚,它应该与页面一起出现。
问题似乎出在renewcommand
用于指定目录标题的 。如果我不将其包含在文档中,文档可以正常编译,并且外观和行为都符合我的预期。当我尝试使用该命令更改目录标题时,它突然无法编译并在 行上抛出错误\tableofcontents
。这是怎么回事?我该如何实现页脚和目录标题的更改?
\documentclass{article}
\usepackage[letterpaper,margin=1in]{geometry} % Handles geometry of page layout
\usepackage{fancyhdr}
\usepackage{lipsum}
% Define footer
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[L]{Some long footer at the bottom of the page. \\ \centering \normalfont \thepage}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\headrulewidth}{0pt}
% This is the problem line!
\renewcommand{\contentsname}{\centering Table of Contents\\\small Section \hfill Page}
\begin{document}
\pagenumbering{roman}
\begin{titlepage}
Title of Document
\end{titlepage}
\newpage
\lipsum
\newpage
\tableofcontents % Compilation shows error here!
\newpage
\pagenumbering{arabic}
\section{One}
\lipsum
\end{document}
我相信这个问题问的是同样的问题,但不清楚,而且据我所知没有提供答案。
PS:我确实知道\thispagestyle
ToC 的问题,但这不是这个问题的问题或关注点。
答案1
用于\contentsname
定义如何标记目录(此字符串用于不同的地方,例如在页眉和页脚中,因此可能不包含在这些其他地方没有意义的其它内容)。
要使目录标题居中,一种侵入性最小的方法是在正确位置添加 center 命令,如下所示。可以使用 插入附加行 (Section ... Page) \addtocontents
。在序言中,加载包xpatch
。
\usepackage{xpatch}
该\tableofcontents
命令必须由以下几行替换:
\bgroup
\makeatletter
\xpatchcmd\@ssect{#5}{\centering #5}{}{}
\tableofcontents
\makeatother
\egroup
\addtocontents{toc}{{\small\bfseries Section\hfill Page\bigskip\par}}
如果出于一致性的原因,您想要将由 引入的所有标题居中\section*
(包括所有“列表”部分),请省略\bgroup
和\egroup
。
下面的目录是根据下面的代码生成的。
\documentclass{article}
\usepackage[letterpaper,margin=1in]{geometry} % Handles geometry of page layout
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[L]{Some long footer at the bottom of the page. \\ \centering \normalfont \thepage}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\headrulewidth}{0pt}
\usepackage{xpatch}
\renewcommand{\contentsname}{Table of Contents}
\begin{document}
\pagenumbering{roman}
\begin{titlepage}
Title of Document
\end{titlepage}
\newpage
\lipsum
\newpage
\bgroup
\makeatletter
\xpatchcmd\@ssect{#5}{\centering #5}{}{}
\tableofcontents
\makeatother
\egroup
\addtocontents{toc}{{\small\bfseries Section\hfill Page\par}}
\newpage
\pagenumbering{arabic}
\section{One}
\lipsum
\subsection{One One}
\lipsum
\subsubsection{One One One}
\lipsum
\subsubsection{One One Two}
\lipsum
\end{document}