我见过的最常见的命令符号如下:
\command[optional]{mandatory}
我想了解如何理解可选参数。例如,它们可以传递为:
[opt1=val1, opt2=val2, opt3=val3, etc]
或者:
[opt1, opt2=val2, opt3]
我认为第一种情况就像**kwargs
在 Python 中一样。但是,有些情况下也会使用第二种形式,我不明白 Latex 如何理解顺序(如果有关系的话)。此外,我还使用了 beamer,我注意到如果我写:
\begin{frame}{Title}{Subtitle}
该命令在没有{Subtitle}
参数的情况下也可以工作。如果没有指定强制参数,那不应该触发错误吗?
答案1
LaTeX 是用 TeX 编写的,而 TeX 没有内置可选参数的概念。它确实具有“向前查找”标记的能力,以及获取分隔参数的方法。因此,LaTeX 查找可选参数的方法是向前查找[
,如果找到一个,则获取到下一个之前的所有内容]
。这使用两个内部宏,其中一个根本不接受“可选”参数,另一个接受分隔参数,因此需要 [...]
。
基本方法可能会因嵌套的可选参数而产生混淆:代码允许ltcmd
这样做并确保例如
\foo[\cmd[bar]]
正确地抓取\cmd[bar]
为可选参数。
然后由“消费者”代码决定如何处理可选参数。例如,如果将其作为键值参数处理,则可以按照用户给出的顺序或程序员定义键的顺序查看键。重要的是要理解标记之间的所有内容都是[...]
单个参数。
通常强制对中的可选参数的情况{...}
比较特殊。它不能使用与正常情况完全相同的机制,因为 TeX 不允许这样做。相反,我们会向前看{
两个内部命令之间的 then 分支,其中一个命令比另一个命令多一个强制参数。
抓取可选参数超出{...}
了正常的 LaTeX 参数模式。因此,LaTeX 团队不鼓励这样做。例如,最近的 LaTeX 版本提供了ltcmd
可以轻松抓取一系列“基本”参数类型的选项。但是,它不支持可选的选项{...}
,它仅作为该代码的遗留附加组件提供(因为团队确实探索过是否将其开箱即用)。