\secdef 起什么作用?

\secdef 起什么作用?

chapterKOMA级指令定义scrbook如下:

\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
  \thispagestyle{\chapterpagestyle}%
  \global\@topnum\z@
  \@afterindentfalse
  \secdef\@chapter\@schapter
}

我想知道\secdef是什么。

答案1

\secdef是一个实用命令;如果定义的形式为

\def\foo{<tokens>\secdef\fooA\fooB}

呼唤\foo

 <tokens>\fooA

而调用\foo*就可以了

<tokens>\fooB

这是因为的定义\secdef

\def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}}

因此,撇开<tokens>可能先于执行的\secdef,我们得到

\@ifstar{\fooB}{\@dblarg{\fooA}}

如果\foo*被调用,\fooB则执行,否则 TeX 执行

\@dblarg{\fooA}

所以\fooA 必须以特殊方式定义:

\def\fooA[#1]#2{...}

就像\@chapter是。这个\@dblarg技巧基本上检查下一个标记;如果是[,那么我们就会处于这样的情况

\foo[X]{Y}

LaTeX 就可以了

\fooA[X]{Y}

否则我们有

\foo{Y}

并将\@dblarg以这样一种方式安排事情,以便 TeX 最终能够看到

\fooA[Y]{Y}

改为、\foo改为和改为以便更好地理解这个想法。\chapter\fooA\@chapter\fooB\@schapter

答案2

哦...我想我自己明白了:\secdef似乎在\chapter\chapter*调用之间切换,所以你可以在上面的例子中为每种情况定义一个自己的宏\@chapter(非星号案例)或\@schapter(星号案例)。

相关内容