我希望了解类如何amsart
设法存储抽象内容以供后者使用\maketitle
,以及为什么它们要求abstract
环境先于\maketitle
(即这样做有什么好处?)。定义如下:
\newbox\abstractbox
\newenvironment{abstract}{%
\ifx\maketitle\relax
\ClassWarning{\@classname}{Abstract should precede
\protect\maketitle\space in AMS document classes; reported}%
\fi
\global\setbox\abstractbox=\vtop \bgroup
\normalfont\Small
\list{}{\labelwidth\z@
\leftmargin3pc \rightmargin\leftmargin
\listparindent\normalparindent \itemindent\z@
\parsep\z@ \@plus\p@
\let\fullwidthdisplay\relax
}%
\item[\hskip\labelsep\scshape\abstractname.]%
}{%
\endlist\egroup
\ifx\@setabstract\relax \@setabstracta \fi
}
大部分代码我都看不懂,最吸引我的是:这段代码怎么\verb
在抽象中允许存在?(为了搭建自己的abstract
环境,我尝试过将内容存入宏中,但宏不允许\verb
;最后只好将内容存入文件,稍后再输入,这对我来说无疑是一种笨拙的方法)
答案1
AMS 要求abstract
环境位于前面,\maketitle
因为他们希望它成为标题栏的一部分。这样就可以以取决于最终将使用的内部文档类的方式来处理它。
在这种情况下,它使用 TeX 功能将排版材料存储在垂直框中\vtop
(因此参考点将位于材料中的第一个基线)。
语法是
\setbox<box number>=\vtop{...}
其中{
和}
不需要是显式括号,但也可以是\bgroup
和\egroup
(隐式括号)。因此,可以在环境的一部分\vtop
中开始 ,在部分中结束。\begin
\end
如果在出现错误\begin{abstract}
后发现。在任何情况下,都会启动,并带有存储箱。使用适当的设置启动 A。在令牌处将完成排版并将排版材料存储在箱子中。\maketitle
\vtop
\abstractbox
list
\end{abstract}
\endlist\egroup
分配是\global
因为周围环境形成了一个群体。
缺点是材料无法重新处理(当然,某种形式的重新处理是可能的),但这并不重要,因为材料已经按照所需的格式排版了。
随后\maketitle
即可\box\abstractbox
投放当前垂直列表中的素材。