为什么 NewDocumentEnvironment 的签名中不能有 {t!}?

为什么 NewDocumentEnvironment 的签名中不能有 {t!}?

xparse 手册(2018/02/21)规定可选参数:

可选<字符>,这将导致一个值,\BooleanTrue如果<字符>是存在,\BooleanFalse否则为不存在。给定为。t<char>

如果我使用签名:{st! O{t}d()}那么编译将中止:

 Argument of \somemacro has an extra }

如果我将 改为!?+一切都会按预期进行。

我可以想象,像%#或 这样的特殊字符\是被禁止的。但无辜的感叹号呢?这可能是一个错误吗?或者感叹号不是那么无辜?是否有(禁止)使用字符的列表?

答案1

如果你使用 babel 语言(或其他包)定义激活字符,它们在这里可能会或可能不会起作用,具体取决于为字符赋予的具体定义。在 babel 的情况下,你可以使用

\shorthandoff{!}

确保!安全,然后\shorthandon赋予它特定于语言的定义。

相关内容