根据章节名称选择条件标题外观

根据章节名称选择条件标题外观

我正在使用 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

以下是解决方案的思考过程:

  1. \chaptername通过重新定义来捕获章节名称/标题\chapter

  2. 查找目录的章节名称实际上看起来像你使用的类(我看过book.clsreport.cls两者都是相同的;对于其他文档类别可能有所不同)。 将其存储在 中\ToCchaptername

  3. 将当前情况\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{}

相关内容