是否可以在章节开头添加命令?

是否可以在章节开头添加命令?

我找到了etoolbox允许我在另一个命令开头添加命令的包。

我尝试了以下操作,但没有效果:

\apptocmd{\chapter}{
    \exewidth{(34)}
}

我想通过调用 在每个章节开始时重置某个值\exewidth。该怎么做?

答案1

\chapter类中的定义book

% book.cls, line 365:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

如果你

\apptocmd{\chapter}{
    \exewidth{(34)}
}{}{}

(注意两个尾随参数,查看文档etoolbox了解说明),您将使命令\secdef失败。

您还添加了不需要的空格,但这只是一个小细节。

正确的添加位置\exewidth开始

\pretocmd{\chapter}{% <--- IMPORTANT
    \exewidth{(34)}% <--- IMPORTANT
}{}{}

但是,当然,当\chapter*调用时,这也会添加设置。如果您只想将其用于编号章节,则修补的正确命令是\@chapter,再次使用\pretocmd


\exewidth{(34)}假设在末尾添加。\secdef执行时,它会吸收其两个参数(在本例中为\@chapter\@schapter)并寻找后续的*;没有*,因为下一个标记是\exewidth,因此根据其定义,\secdef传递\@dblarg{\@chapter}。请注意,\exewidth仅检查了 ,但仍在输入流中。

现在\@dblarg执行;其操作首先在于查看是否[遵循。没有,有\exewidth;很好,因此寻找一个参数(由表示#1)并执行\@chapter[#1]{#1}

是什么#1?通常,如果您输入 ,它就是章节标题\chapter{Title}。但这里仍有\exewidth待处理的标记。没有括号,因此\exewidth变成#1

这是你想要的吗?;-)

相关内容