xparse 和“token”类型参数的行为

xparse 和“token”类型参数的行为

请考虑以下示例:

\documentclass{minimal}

\usepackage{xparse}
\NewDocumentCommand{\f}{tx}{\IfBooleanTF{#1}{true}{false}}

\begin{document}
\f{x}

\f[x]

\f x
\end{document}

结果如下:

falsex
false[x]
true

这不是我所期望的。我期望前两个中的一个会打印“true”,最后一个会打印“false x”。这是怎么回事?这是预期的行为吗?

后续问题:有没有办法获得这种行为,即当不存在时给出 False,当存在时给出 True 的参数?

答案1

这是预期的行为,因为参数恰好包含一个 token 和直接使用 token 之间存在差异。当 TeX 读取

\foo x

紧接着的\foox。另一方面,

\foo{x}

接下来\foo{,而在

\foo[x]

它是一个。和[之间存在一些技术差异(因为一个涉及 TeX 组,而另一个可能是类似 LaTeX 的可选参数,将使用分隔宏进行处理)。但是,从这个问题的角度来看,这并不重要:重要的是有“额外”标记。说明符纯粹是关于下一个标记,而不是可能发生的情况\foo{x}\foo[x]t里面其他论点。

相关内容