好像是章节首页使用plain
样式。我创建的mystyle
。如何使章节首页可用mystyle
?
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
}
\begin{document}
\tableofcontents
\chapter{First}
\lipsum[1-9]
\chapter{Second}
\lipsum[1-9]
\end{document}
但是等一下。我只想使用它的章节第一页。目录页和其他用途plain
不应受到影响。因此编辑plain
样式不是答案(如果我错了请告诉我)。
也许有点
\makeatletter
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{mystyle}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
\makeatother
正是我要找的。不幸的是/有趣的是,这也影响了内容页面(为什么?)。
答案1
伪章节的标题(例如目录)是使用 设置的\chapter*
。如果您自己不需要任何未编号的章节,我们可以\chapter
使用 进行修补mystyle
,并使用\chapter*
进行修补。plain
etoolbox
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\pagestyle{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
}
\makeatletter
\patchcmd\chapter{\thispagestyle{plain}}{\thispagestyle{mystyle}}{}{}
\pretocmd\@schapter{\thispagestyle{plain}}{}{}
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\lipsum[1-9]
\chapter{Second}
\lipsum[1-9]
\end{document}
根据您的评论,更好的解决方案可能是明确地将\chapter
页面样式重置为plain
仅在需要时。
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\pagestyle{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
}
\patchcmd\chapter{\thispagestyle{plain}}{\thispagestyle{mystyle}}{}{}
\def\makechapterpagestyleplain{%
\patchcmd\chapter{\thispagestyle{mystyle}}{\thispagestyle{plain}}{}{%
\GenericWarning{}{LaTeX Warning: Could not patch \string\chapter to use the page style `plain'.}%
}%
}
\begin{document}
{\makechapterpagestyleplain
\tableofcontents
}
\chapter{First}
\lipsum[1-9]
\chapter{Second}
\lipsum[1-9]
\end{document}
答案2
正如我在您的问题的评论中提到的那样,我解决您编辑的问题的第一反应是发布\patchcmd{\chapter}{\thispagestyle{plain}}{\thispagestyle{mystyle}}{}{}
,但通过\show\tableofcontents
在文档中插入,我已确认在报告中\tableofcontents
使用了带星号的变体\chapter
,因此仅仅修补\chapter
仍然会导致您希望保持简单的页面出现问题。
解决这个问题的一种方法是调用\apptocmd
任何应保持空白的特殊章节类非章节页面。这种方法的问题在于其临时样式:如果您稍后决定添加其他章节类非章节页面,您\apptocmd
也需要在它们上使用。
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\pagestyle{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
}
\patchcmd{\chapter}{\thispagestyle{plain}}{\thispagestyle{mystyle}}{}{}
\apptocmd{\tableofcontents}{\thispagestyle{plain}}{}{}
\begin{document}
\tableofcontents
\chapter{First}
\lipsum[1-9]
\chapter{Second}
\lipsum[1-9]
\end{document}
如果您知道您不需要任何其他类似章节的非章节页面,那就没问题,但考虑到您使用的软件包可能会引入其他此类页面,这种假设可能并不适用。 正如另一个答案所暗示的那样,因为具体\tableofcontents
使用\chapter*
,您可以尝试修补它。好处是这应该会影响所有类似章节的非章节页面(除非它们使用无星号变体?),但缺点是这假设您不需要\chapter*
自己使用,除非您同意保留页面样式的无编号章节plain
。
答案3
如果只有编号章节的第一页应使用页面样式,mystyle
您可以修补\@chapter
:
\usepackage{etoolbox}
\makeatletter
\pretocmd\@chapter{\thispagestyle{mystyle}}{}{\PatchFailed}
\makeatother
例子:
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\pagestyle{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
}
\makeatletter
\pretocmd\@chapter{\thispagestyle{mystyle}}{}{\PatchFailed}
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\lipsum[1-9]
\chapter{Second}
\lipsum[1-9]
\chapter*{Starred Chapter}
\lipsum[1-9]
\end{document}
补充说明:请注意,您的定义mystyle
仅将其设置添加到已激活的 fancyheader 设置中。因此,只有在编号章节的第一页上,headerule 的宽度才会发生变化。\thispagestyle{mystyle}
更改 fancyheader 的本地内容,并且仅在当前页面上。但如果您要\pagestyle{mystyle}
在文档中使用,则更改是全局的,您可以未重置标题线宽使用\pagestyle{fancy}
。如果更改仅限于本地,则必须\pagestyle{mystyle}
在组中使用。
例子:
\documentclass[twoside]{report}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\lhead{fancy}
\fancypagestyle{mystyle}{
\renewcommand{\headrulewidth}{5pt}
\rhead{added by mystyle}
}
\begin{document}
\lipsum[1-9]
{%
\clearpage
\pagestyle{mystyle}
\lipsum[1-9]
\clearpage
}
\lipsum[1-9]
\pagestyle{mystyle}
\lipsum[1-9]
\clearpage
\pagestyle{fancy}
\lipsum[1-9]
\end{document}