LaTeX 如何“理解”可选参数?

LaTeX 如何“理解”可选参数?

我见过的最常见的命令符号如下:

\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可以轻松抓取一系列“基本”参数类型的选项。但是,它不支持可选的选项{...},它仅作为该代码的遗留附加组件提供(因为团队确实探索过是否将其开箱即用)。

相关内容