这个问题类似于如何在报告类中删除带有 fanchyhdr 的章节名称。然而,在书籍类中情况就完全不同了。
我花了三天时间搜索了这个网站的各个角落,却没有找到一个可行的例子。对于初学者来说,这真是太令人沮丧了。我真的想完成我的报告。
挑战在于:
- 甚至为章节第一页设置页眉。
book
类定义章节第一页要使用的plain
样式。 - 因此,我们可以通过以下方式覆盖普通样式:
\fancypagestyle{plain}
- 所在章节
\frontmatter
不应显示章节编号,因为它们为 0。 书是一面。每一章都由 输出
\clearpage
。\documentclass[a4paper,oneside,12pt]{book} \usepackage{fancyhdr} \makeatletter \renewcommand{\chaptermark}[1]{\markboth{\textit{Chapter \thechapter}\ #1}{}} % no effort command \fancypagestyle{plain}{% \fancyhf{}% % No effort comment from wikibooks: Note the ## here. It's required because \fancypagestyle is making a macro (\ps@fancybook). % If I just wrote #1, TeX would think that it's the argument to \ps@fancybook, but % \ps@fancybook doesn't take any arguments, so TeX would complain with an error message. % You are not expected to understand this. % \renewcommand*{\chaptermark}[1]{ \markboth{\thechapter\ \chaptername: ##1}{} } \fancyhead[R]{\textbf{\leftmark}} \fancyfoot[C]{\thepage} \renewcommand{\plainheadrulewidth}{0.4pt} } \pagestyle{plain} \begin{document} \frontmatter \chapter{Abstract} abstract \clearpage \mainmatter \chapter{Main} Show `1 Main` in the header. \clearpage \end{document}
答案1
使用book
而不是完全没有区别report
。(尝试切换到report
进行测试。)
\renewcommand{\chaptermark}[1]{\markboth{\normalfont\thechapter.\space#1}{}}
但你需要告诉fancyhdr
使用花哨的标题
\pagestyle{fancy}
真正造成差异的是 等的使用\frontmatter
,\mainmatter
这确实是 所特有的book
。更具体地说,这里重要的是您希望标题中的章节不编号,而 LaTeX 在标准样式中默认不这样做。您也会看到未编号章节的相同复杂性report
。
有几种方法可以实现您想要的功能。以下方法可能不是您的最佳选择,具体取决于您希望进行的其他更改。但是,对于 MWE 来说,至少它很简单。
LaTeX 的标准类支持未编号节的星号形式的节命令。这是您在 之前应该使用的\mainmatter
。但它们的配置不同,默认情况下不会为标题创建“标记”。要更改此设置,我们可以从 重新定义命令book.cls
。
首先,我们创建一个特殊的命令来为带星号的章节做“标记”:
\newcommand{\schaptermark}[1]{\markboth{\normalfont #1}{}}
然后我们将其添加到定义中book
。这\makeatletter... \makeatother
是必需的,因为代码包含@
通常不允许在文档中的命令名称中使用的符号。
\makeatletter
% modified from book.cls - don't use \def unless you **know** it is safe!
\def\@schapter#1{\if@twocolumn
\@topnewpage[\@makeschapterhead{#1}]%
\else
\@makeschapterhead{#1}%
\schaptermark{#1}% <= our addition here
\@afterheading
\fi}
\makeatother
然后我们设置页面样式:
\fancypagestyle{plain}{%
\fancyhf{}%
\fancyhead[R]{\textbf{\leftmark}}%
\fancyfoot[C]{\thepage}%
\renewcommand{\plainheadrulewidth}{0.4pt}%
}
假设您想要对非首页使用相同的配置:
\fancyhf{}
\fancyhead[R]{\textbf{\leftmark}}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
然后我们可以写
\frontmatter
\chapter*{Abstract}% a * stops the numbering
abstract
我们不需要说\clearpage
。这是自动处理的。
\mainmatter
\chapter{Main}% no * so it is numbered
Show `1 Main` in the header.
生产
完整代码:
\documentclass[a4paper,oneside,12pt]{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{\normalfont\thechapter.\space#1}{}}
\newcommand{\schaptermark}[1]{\markboth{\normalfont #1}{}}
\makeatletter
% modified from book.cls - don't use \def unless you **know** it is safe!
\def\@schapter#1{\if@twocolumn
\@topnewpage[\@makeschapterhead{#1}]%
\else
\@makeschapterhead{#1}%
\schaptermark{#1}%
\@afterheading
\fi}
\makeatother
\fancypagestyle{plain}{%
\fancyhf{}%
\fancyhead[R]{\textbf{\leftmark}}%
\fancyfoot[C]{\thepage}%
\renewcommand{\plainheadrulewidth}{0.4pt}%
}
\fancyhf{}
\fancyhead[R]{\textbf{\leftmark}}
\fancyfoot[C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\begin{document}
\frontmatter
\chapter*{Abstract}% a * stops the numbering
abstract
% \clearpage is automatic
\mainmatter
\chapter{Main}% no * so it is numbered
Show `1 Main` in the header.
% \clearpage is automatic
\end{document}