将宏添加到 \chapter 命令

将宏添加到 \chapter 命令

我正在使用报告类。我想要的只是在使用\chapter{...}宏之后\thispagestyle{onlypagenumber}添加的内容。

我通过定义一个新的宏解决了这个问题\Chapter{...}

\newcommand{\Chapter}[1]{\chapter{#1}\thispagestyle{onlypagenumber}}

但是我宁愿继续使用,\chapter{...}因为人们习惯于输入\chapter{...}而不是\Chapter{...}。我该如何进行这个小改动?还请注意,\thispagestyle{onlypagenumber}不应将其添加到星级章节,例如\chapter*{...}

我也尝试过使用电子工具箱它提供了第 9 页上的一些“appto”命令。

\appto 此命令将任意 hcodei 附加到 hhooki。如果 hcodei 包含任何参数字符,则无需将其加倍。此命令非常可靠。

但这失败了,但可能是我做错了什么。我更喜欢 etoolbox 的解决方案。

例子

\documentclass{book}
\usepackage{fancyhdr}
\usepackage{lipsum}

\fancypagestyle{onlypagenumber}{%
  \fancyhf{}
  \fancyhfoffset[RO,EL]{2.5cm}
  \fancyhead[OR]{%
    \sffamily
    \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
    \thepage
  }
  \fancyhead[EL]{%
    \sffamily\thepage
    \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
  }
}

\pagestyle{fancy}
\fancyhf{}
\fancyhfoffset[OR,EL]{2.5cm}
\fancyhead[OR]{%
  \sffamily\MakeUppercase{\leftmark}
  \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
  \thepage
}
\fancyhead[EL]{
  \sffamily\MakeUppercase{\thepage}
  \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
  \MakeUppercase{\chaptername}~\thechapter
}
\renewcommand\headrulewidth{0pt}
\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{#1}}{}}

\newcommand{\Chapter}[1]{\chapter{#1}\thispagestyle{onlypagenumber}}

\begin{document}

\Chapter{Test chapter}
\lipsum[1-40]

\end{document}

答案1

一个简单的方法是修补\chapter

\usepackage{etoolbox}
\patchcmd{\chapter}{plain}{onlypagenumber}{}{}

因为\chapter确实如此\thispagestyle{plain},并且补丁将替换plainonlypagenumber

然而,更简单的方法是

\fancypagestyle{plain}{%
  \fancyhf{}
  \fancyhfoffset[RO,EL]{2.5cm}
  \fancyhead[OR]{%
    \sffamily
    \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
    \thepage
  }
  \fancyhead[EL]{%
    \sffamily\thepage
    \quad\smash{\rule[-.2ex]{1pt}{4cm}}\quad
  }
}

以便重新定义plain页面样式,而不是定义新的页面样式:您可能不再需要普通的页面样式,对吗?


要仅更改编号章节的样式,请使用

\usepackage{etoolbox}

\makeatletter
\pretocmd{\@makechapterhead}{\thispagestyle{onlypagenumber}}{}{}
\makeatother

因此,在处理时,\thispagestyle{plain}由发出的(仅针对编号章节执行)\chapter将被撤销。\@makechapterhead

相关内容