fancyhdr 与目录冲突

fancyhdr 与目录冲突

我在让目录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:我确实知道\thispagestyleToC 的问题,但这不是这个问题的问题或关注点。

答案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}

相关内容