何时需要 {} 来包围键值对中的字符串

何时需要 {} 来包围键值对中的字符串

我正在使用包kvoptions并声明各种stringoption。调用包/类时,何时需要包含字符串值?

例如在我的包中:

\DeclareStringOption[defaultval]{abc}[defaultval]

在调用类中:

\usepackage[abc=someval]{mypackage}

什么时候需要使用大括号someval,例如abc={someval}

答案1

需要括号,以便解析器可以将某些组视为单个元素并避免在内部进行解析。

考虑以下:

\cmd[key=val=1,bla=0]

解析器应该理解什么?有很多可能的含义:

\cmd[key={val=1,bla=0}]
\cmd[key={val=1},bla=0]
\cmd[{key=val}=1,bla=0]

ETC。

在某些情况下,解析器选择的特定解释可能无效并产生错误。

此外,对自身的调用\cmd正在执行一些解析,以了解例如是否存在可选参数;这也需要转义方括号:写作\cmd[key=\bla[1]]将使其\cmd认为其可选参数是key=\bla[1。要解决这个问题,请使用\cmd[key={\bla[1]}]

此外,正如 @Joseph 所指出的,一些 keyval 包也会删除值周围的空格,因此为了包含它们,您可能还需要将它们放在括号中,或者根据值以某种方式对它们进行转义:

\cmd[key={ val }] or \cmd[key=\ val\ ]

总而言之,在您的示例中,有问题的字符是],=,有时还有空格。

相关内容