我正在使用 pandoc 将复杂的 markdown 文档转换为 pdf。并且需要在转换过程中为其添加一些格式。因此,我无法将样式和数据放在同一个位置,这意味着我无法使用类似的东西进行目标样式分配\thispagestyle
。如何为某些页面创建一般条件页眉\页脚?我现在能想到的删除带有目录的页面上的页眉的方法如下。由于某种原因,它不起作用。(在这种情况下,\fancyhead[C]{\textsl{\leftmark}}
将在此页面的页眉中设置单词“CONTENTS”)。
\usepackage{fancyhdr}
\usepackage{ifthen}
\pagestyle{fancy}
...
some general header/footer style
...
\fancyheadinit{
\ifthenelse{\equal{\leftmark}{Contents} \OR \equal{\leftmark}{CONTENTS}}
{
\fancyhf{}
{\fancyhead[C]{\textsl{\rightmark}}}
\renewcommand{\headrulewidth}{0pt}
}
}
答案1
以下是解决方案的思考过程:
\chaptername
通过重新定义来捕获章节名称/标题\chapter
。查找目录的章节名称实际上看起来像你使用的类(我看过
book.cls
和report.cls
两者都是相同的;对于其他文档类别可能有所不同)。 将其存储在 中\ToCchaptername
。将当前情况
\chaptername
与\ToCchaptername
您设置的(未设置的)条件进行比较。
下面的示例就是这样做的,使得目录没有任何标题。
\documentclass{book}
\usepackage{fancyhdr,lipsum}
% Capture the chapter name/title in \chaptername
\makeatletter
\let\oldchapter\chapter
\RenewDocumentCommand{\chapter}{s o m}{%
\cleardoublepage
\IfBooleanTF{#1}
{\oldchapter*{#3}\def\chaptername{#3}}% \chapter*{...}
{\IfValueTF{#2}
{\oldchapter[#2]{#3}\def\chaptername{#2}}% \chapter[..]{...}
{\oldchapter{#3}\def\chaptername{#3}}}% \chapter{...}
\markright{}% Clear possible section mark left by ToC
}
% Taken from https://www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/latex/base/book.cls?view=co
\def\ToCchaptername{\contentsname \@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
\makeatother
\pagestyle{fancy}
\fancyheadinit{%
\fancyhf{}% Remove header/footer
\renewcommand{\headrulewidth}{0pt}% Remove header rule
% Compare chapter title/name to that of ToC
\ifx\chaptername\ToCchaptername
% What to do when you're in the ToC
\else
% What to do when you're not in the ToC
\fancyhead[C]{\textsl{\rightmark}}
\fi
}
\begin{document}
\sloppy
\tableofcontents
\chapter{First chapter}\lipsum[1-10]
\section{First section}\lipsum[11-20]
\section{Second section}\lipsum[21-30]
\section{Third section}\lipsum[31-40]
\section{Final section}\lipsum[41-50]
\chapter{Second chapter}\lipsum[1-10]
\section{First section}\lipsum[11-20]
\section{Second section}\lipsum[21-30]
\section{Third section}\lipsum[31-40]
\section{Final section}\lipsum[41-50]
\chapter{Third chapter}\lipsum[1-10]
\section{First section}\lipsum[11-20]
\section{Second section}\lipsum[21-30]
\section{Third section}\lipsum[31-40]
\section{Final section}\lipsum[41-50]
\chapter{Final chapter}\lipsum[1-10]
\section{First section}\lipsum[11-20]
\section{Second section}\lipsum[21-30]
\section{Third section}\lipsum[31-40]
\section{Final section}\lipsum[41-50]
\end{document}
必须考虑一个小的边缘情况(因为你正在设置\rightmark
),因为 ToC 设置两个都左/右标题为\contentsname
。因此,如果目录之后的第一章在设置第一章\section
(因此)之前有一段较长的介绍(延伸到第二页),那么您可以在新章节中将单词设置为 的一部分。因此,我们在调用(via )时清除 。\rightmark
\contentsline
\rightmark
\rightmark
\chapter
\markright{}