Fancyhdr 和 TOC

Fancyhdr 和 TOC

几周前,我发了一个关于页眉页脚设计的问题,现在它看起来恰到好处:谢谢。不过,我的目录,因为它有两个页面,默认样式对我来说不起作用(如您所见,这个 0 非常不愉快):

照片一

0 不继续


我看过了使用 fancyhdr 包仅更改目录页的标题发布,并且我在我的styles.sty文件中做了类似的事情:

\usepackage{extramarks}
\usepackage{fancyhdr}
\fancypagestyle{nor}{% <===========================================
    \renewcommand{\headrulewidth}{0.1pt}
    \fancyhead[RE]{\nouppercase{\leftmark}}
    \fancyhead[LO]{\nouppercase{\lastrightxmark}}
    \fancyhead[RO]{\lastleftxmark}
    \fancyhead[LE]{\thechapter}
    \fancyfoot[RO, LE]{\thepage}
    \fancyfoot[CO, CE]{}
    \fancyheadoffset[LE,RO]{+0.025\textwidth}
}
\fancypagestyle{toc}{% <===========================================
    \renewcommand{\headrulewidth}{0.1pt}
    \fancyhead[RE]{\nouppercase{\leftmark}}
    \fancyhead[LO]{\nouppercase{\lastrightxmark}}
    \fancyhead[RO]{\lastleftxmark}
    \fancyhead[LE]{}
    \fancyfoot[RO, LE]{\thepage}
    \fancyfoot[CO, CE]{}
    \fancyheadoffset[]{+0.025\textwidth}
}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}\extramarks{}{}}
\renewcommand{\sectionmark}[1]{\extramarks{\thesection}{#1}}

然后,在 .tex 文件中:

\documentclass[a4paper,12pt,twoside]{book}
\usepackage{styles}

\begin{document}
\setlength{\baselineskip}{.55cm}

\pagestyle{nor}
\begin{titlepage}
Some text
\end{titlepage}

\pagestyle{toc}
\tableofcontents

\pagestyle{nor}
\chapter{Els nombres enters}
SOME TEXT.

\end{document}

但这对我来说不起作用,因为 (1) chapterMark/sectionMark 的重新定义丢失了,所以它会干扰其他页面的样式;(2) 从照片 II 和照片 III 来看,它似乎从未从 \pagestyle{toc} 发生变化;(3) TOC 标题也不起作用,因为它显示的输出与照片 I 相同。照片 IV 来自我进行这些更改之前的功能性标题。

希望你能帮助我。谢谢。

更新:我对我的styles.sty代码做了一些修改,目前情况如下。main.tex 保持完整。有两点:有没有办法让代码更优雅?它似乎有点不对劲。另一点,正如我向 Pieter 评论的那样,\renewcommand{\chaptermark} 和 \renewcommand{\sectionmark} 仍然无法按预期工作,输出与照片 II 中的相同。此外,我尝试将这两个命令放在 \fancypagestyle{} 定义内和上方:它根本没有起作用。

\usepackage{extramarks}
\usepackage{fancyhdr}
\fancypagestyle{nor}{% <===========================================
    \renewcommand{\headrulewidth}{0.1pt}
    \fancyhead[RE]{\nouppercase{\leftmark}}
    \fancyhead[LO]{\nouppercase{\lastrightxmark}}
    \fancyhead[CE,CO]{}
    \fancyhead[RO]{\lastleftxmark}
    \fancyhead[LE]{\thechapter}
    \fancyfoot[RO, LE]{\thepage}
    \fancyfoot[CO, CE]{}
    \fancyheadoffset[LE,RO]{+0.025\textwidth}
    \fancyheadoffset[RE,LO]{+0.0\textwidth}
}
\fancypagestyle{toc}{% <===========================================
    \renewcommand{\headrulewidth}{0.1pt}
    \fancyhead[RE]{}
    \fancyhead[LO]{}
    \fancyhead[CE,CO]{\textsc{Índex}}
    \fancyfoot[RO, LE]{\thepage}
    \fancyfoot[CO, CE]{}
    \fancyhead[RO]{}
    \fancyhead[LE]{}
    \fancyheadoffset[]{+0.025\textwidth}
}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}\extramarks{}{}}
\renewcommand{\sectionmark}[1]{\extramarks{\thesection}{#1}}

照片二

照片三

在此处输入图片描述

照片四

在此处输入图片描述

答案1

在与@Mario的私下交流中,我可以解决这两个问题。为了便于将来查找,我将在此处提供这两个问题的解决方案。

1. 为什么目录的最后一页出现了错误的页眉?

pagestyle{nor}命令是在目录的最后一页输出之前执行的。当执行\newpage下一个命令所暗示的时,该页的输出就会发生。本身末尾没有;如果您愿意,您可以在同一页上在其后添加其他文本。\chapter\tableofcontents\newpage

现在输出页面时,新的pagestyle已经设置好了,所以就使用pagestyle了。解决办法是在\newpage前面加一个\pagestyle{nor}

2.\chaptermark\sectionmark似乎不起作用

看来 Mario 使用的是fancyhdr3.10 版。在版本 4 之前的所有 fancyhdr 版本中,初始化都是在给出第一个(或其派生的页面样式之一)时完成的,包括和\pagestyle{fancy}的初始化。因此,文档中的第一个初始化了这些,因此 中给出的定义丢失了。在版本 4 中,情况不再如此,因此这会给出正确的结果。\chaptermark\sectionmark\pagestyle{nor}styles.styfancyhdr

幸运的是,除了切换到版本 4 之外,还有一个简单的解决方案:在 中styles.sty,将其放在定义\pagestyle{nor}之前\chaptermark。现在首先完成初始化,然后给定的定义将覆盖默认定义。

\pagestyle{nor}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}\extramarks{}{}}
\renewcommand{\sectionmark}[1]{\extramarks{\thesection}{#1}}

相关内容