如何使章节首页使用 mystyle?

如何使章节首页使用 mystyle?

好像是章节首页使用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*进行修补。plainetoolbox

\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}

相关内容