我正在使用包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\ ]
总而言之,在您的示例中,有问题的字符是]
,,
和=
,有时还有空格。