因此我看到有一个\abstract{...}
命令(通过 TeXlipse 的建议),但是我在网上找到的大多数示例都使用如下环境结构:
\begin{abstract}
something like \lipsum or \blindtext
\end{abstract}
由于我假设\abstract{...}
函数类似\section{...}
,这让我感到疑惑。这两个选项之间有什么区别吗?特别是,使用其中一个相对于另一个有什么优点或缺点吗?
答案1
简化\begin{foo}
有以下四个作用:
- 检查环境
foo
(更确切地说是宏\foo
)是否存在; - 开一个群(
\begingroup
); - 将当前环境的名称 (
\@currenvir
) 设置为foo
; - 执行
\foo
(实际上\csname foo\endcsname
)。
\end{foo}
同样地,
- 执行
\endfoo
(更准确地说\csname endfoo\endcsname
); - 检查关闭的环境是否与之前打开的环境相同(通过
foo
与之前保存的环境进行比较\@currenvir
); - 关闭群组(
\endgroup
)。
标准类、KoMa
类和memoir
都定义abstract
为环境。在这种情况下,只需调用\abstract{...}
(我只用 进行了测试article
)不会出错,但结果会令人费解:使用 类时,article
字体大小和边距会减小,而没有\end{abstract}
这个会扩展到以下文本。发生这种情况是因为跳过了步骤 1 到 3,特别是\begingroup
;并且由于没有 ,\end{abstract}
组(从未打开过)将不会关闭,并且无论字体和/或边距和/或任何更改\abstract
都不会局限于摘要。
有一些类(我猜主要是日志;我可以提到webofc.cls
和PoS.cls
,因为我必须使用它们)定义\abstract
为接受一个参数的宏。写作
\begin{abstract}
Some text.
\end{abstract}
通常也不会产生错误,但结果不会是预期的输出:只有字母S
会被作为参数\abstract
(无论它做什么),其余的(“ ome text.
”)将以某种方式排版,并且\end{abstract}
可能会引发不错误,因为即使\endabstract
尚未定义,构造\csname...\endcsname
也会扩展为\relax
。
回到你的问题:
具体来说,使用其中一种相对于另一种有什么优点或缺点吗?
底线是:它与优点或缺点无关:\begin{abstract}...\end{abstract}
如果类将抽象定义为环境,则必须使用,\abstract{...}
如果类将抽象定义为宏,则必须使用。