![帮助理解:amsart 类如何存储摘要的内容以供稍后在 \maketitle 中使用?](https://linux22.com/image/433991/%E5%B8%AE%E5%8A%A9%E7%90%86%E8%A7%A3%EF%BC%9Aamsart%20%E7%B1%BB%E5%A6%82%E4%BD%95%E5%AD%98%E5%82%A8%E6%91%98%E8%A6%81%E7%9A%84%E5%86%85%E5%AE%B9%E4%BB%A5%E4%BE%9B%E7%A8%8D%E5%90%8E%E5%9C%A8%20%5Cmaketitle%20%E4%B8%AD%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我希望了解类如何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
投放当前垂直列表中的素材。