在 .cls 文件中用 \cleardoublepage 重新定义 \chapter 和 \chapter*

在 .cls 文件中用 \cleardoublepage 重新定义 \chapter 和 \chapter*
\newcommand{\Chapter}[1]{{\let\cleardoublepage\relax\chapter{#1}}}

运行正常。我如何对 .cls 文件中的星号 (*) 版本执行相同操作?

(其他人可能会感兴趣:在主文档中定义它有什么区别吗?)

答案1

您曾表示想要重新定义\chapter\chapter*。为此,我建议您在课堂上更深入地了解,这不是初学者的任务。

无论如何,您都可以构建一个包含星号版本并使用\chapter您在课堂上编写的命令的宏。

一个非常基本的方法如下:

\documentclass{scrbook}

\newcommand{\MyChapter}{%
    \let\cleardoublepage\empty
    \clearpage
    \chapter
}

\begin{document}

\tableofcontents

\MyChapter{Introduction}
some text

\MyChapter[My Introduction]{Introduction}
some text

\MyChapter*{Introduction}
some text

\end{document}

该命令\MyChapter会删除\cleardoublepage,它会执行\clearpage\chapter。它将具有旧 的所有\chapter功能,因为\chapter它最后执行,并将您在 之后输入的任何内容作为参数\MyChapter

然而后者不是一个好的做法,因为命令\cleardoublepage变得无用,并且删除 latex 命令通常会导致功能失常。

我认为一个“体面”的做法是保存\cleardoublepage它并在以后恢复它:

\documentclass{scrbook}

\newcommand{\ResCdp}{%
    \let\cleardoublepage\cdp
}

\newcommand{\MyChapter}{%
    \let\cdp\cleardoublepage
    \let\cleardoublepage\empty
    \clearpage
    \chapter
}

\begin{document}

\tableofcontents

\MyChapter{Introduction}\ResCdp
some text

\MyChapter[My Introduction]{Introduction}\ResCdp
some text

\cleardoublepage

\MyChapter*{Introduction}\ResCdp
some text

\end{document}

虽然读写起来有点困难,但可以安全地完成任务。

要避免\ResCdp在不删除\cleardoublepage并保留所有\chapter功能的情况下使用它需要付出更多的努力。

答案2

您已表明您使用scrbook文档类。如果您想重新定义\chapter(和\chapter*)来执行\clearpage而不是\cleardoublepage,我建议您加载etoolbox包并使用其\patchcmd宏来修改chapter宏:

\usepackage{etoolbox}
\patchcmd{\chapter}{\cleardoublepage}{\clearpage}{}{}

答案3

scrbook在使用选项的情况下openany,请\cleardoublepage手动插入。

这并不是问题的确切答案,但我仍然决定使用此方法。

相关内容