我想知道在不同系统中以某种方式做某事比以另一种方式做某事有什么(优势)。例如,我读到纯 TEX 用户\def
在想要创建新命令时应该使用 而不是\(re)newcommand
在 LaTeX 中使用,dimen
在想要设置长度时应该使用 而不是使用\setlength
。我只是想知道这样做的原因,因为我使用LaTeX2e
,但我倾向于选择\def
使用 而不是使用\(re)newcommand
或。为了更清楚,我正在寻找类似于分别使用和而不是和 的\newcommand
情况的解释。\(...\)
\[...\]
$...$
$$...$$
答案1
首先介绍一些术语:Plain TeX 和 LaTeX 是格式(用 TeX 语言编写的宏集。)LaTeX 格式提供了许多新命令,这些命令仅供 LaTeX 用户使用,普通 TeX 用户无法使用。其中包括命令\newcommand
和\setlength
。有关一些常见对应关系的列表,请参阅:
任何定义为 TeX 语言本身一部分的命令都可以在纯 TeX 格式或 LaTeX 中使用。但是,反之则不然:在 LaTeX 中定义的命令不能在纯 TeX 中使用。因此纯 TeX 用户必须使用\def
,而 LaTeX 用户可以使用\def
或\newcommand
。但是,两者之间存在一些差异:
有关长度命令之间的差异请参见:
答案2
\newcommand
防止我们意外覆盖现有命令。\def
不提供此编译检查。\def
可以容纳更多通用的参数分隔符,例如\def\point(#1,#2){\ensuremath{(#1,#2)}}
。
答案3
\def
对于了解 LaTeX并可以选择\newcommand
,应该没有任何区别。也就是说,差异可能是主观的/取决于个人喜好。LaTeX定义 \newcommand
就 而言\def
。因此,\newcommand
仅提供了一个用户友好的、因此略有限制的接口来定义宏。
使用\newcommand
具有内置安全性,即无法重新定义宏。为此,应使用\renewcommand
。或者,\providecommand
可用于定义新命令;\newcommand
如果命令不存在,则默认为 ,如果命令已存在(不重新定义),则丢弃其参数。