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