答案1
您说得对,记住哪个是哪个1并不总是那么容易。这背后没有真正的原因——只是可选参数是惯例,并且——现在已经成为一条不成文的规则——由方括号组成。因此,如果您知道参数是可选的,那么在 99% 的情况下,您可以安全地使用方括号。它也是第一个参数,因为提前查看是否存在可选参数是有意义的。
有时环境类型的命令会引起混淆,例如:
\begin{figure}[htbp]
这里要使用的助记符是
\figure[htbp]
[]
这再次遵循代表可选参数的规则。
texdoc package name
对于一些复杂的模式(例如wrapfig
包命令等),需要耐心和耐心,最后可以使用以下命令:
\begin{wrapfigure}[6]{r}[..]{12cm}
但即使如此,这里的模式仍然是这样的[optional]{argument}
。
花括号约定起源于早期的计算机语言,当时它们被用来表示开始和结尾在 Pascal 中,这是 Knuth 用来编写 TeX 的语言,花括号表示函数定义的参数,对于 TeX 使用相同的方法可能更有意义。
最初的 TeX 并没有我们今天所熟知的内置可选参数机制。宏的定义方式如下:
\def\name#1#2{#1 #2}
使用花括号表示参数调用也是有意义的,因为你实际上告诉解析器,开始读取此参数直到遇到结尾。有人可能会认为使用普通括号会更好,并且如果写成如下形式,像上面这样的宏将遵循更现代的范式:
\name(...)(...)
事实上,以这种方式编写 TeX 宏来接受输入非常容易。但是,如果您考虑到我们主要处理的是文本输入,那么普通括号在此类文本中很常见,这将迫使我们开始使用引号或其他约定来划分字符串。
LaTeX 团队构建了更复杂的顶级函数以使生活变得更轻松,特别是自从引入键值概念以来,更加标准化的语法样式成为可能。
但总的来说,我同意你的观点,即总体而言(所有)TeX 不会占用大量的计算机内存,但它确实会给我们自己的计算机内存带来负担。
- 我对 markdown 的链接也有同样的问题。
答案2
这实际上是@Yiannis 回答的附言,但关于参数可选的规则[]
并不是不成文的,在 LaTeX 书中明确指出那是 LaTeX 语法。
使用原始\def
工具可以定义基本上具有任意语法的命令,但是在所有核心 LaTeX 发行版和大多数贡献包中定义的命令都遵循这些规则。
有三种参数类型(用于环境和命令)
强制参数用 括起来{}
。此类参数的数量对于特定命令始终是固定的。(因此,强制参数的数量永远不会取决于可选参数的值。)
可选参数被包围,[]
可能有任意数量的可选参数。由于它们是按位置确定的,因此通常不会有超过 2 或 3 个。为了避免需要有太多的可选参数,在较新的软件包中(但在基本 latex 发行版中永远不会)通常在\includegraphics[width=3cm,clip]{...}
命令graphicx
版本中的单个可选参数中使用 key=value 语法。
图片模式参数以图片模式单位表示坐标或大小,并被()
例如\makebox(10,10){...}
此外,还有*
-form,它被记录为不同的命令(如在环境中),但对于命令来说,从技术上讲,它是一个特殊参数,可以被认为是布尔标志(星号或非星号)。因此,tabular
和tabular*
环境是两个具有不同名称的独立环境,而\section
和\section*
,虽然以类似的方式记录,但从技术上讲,它们是单个命令\section
,它采用特殊的可选*
标志(在这种情况下,它确定该部分是否编号)。