我经常会混淆\IfBooleanTF
和\IfNoValueTF
(以及其他类似的宏),不知道对于以下可选参数,哪个是正确的: ,,,,,
s
( 和 )和 ( 和)。从文档来看,似乎应该使用:o
d
g
k_
k^
t_
t^
\IfBooleanTF
:s
,t
\IfNoValueTF
:o
,,,,d
g
k
问题:
- 上面要使用的宏列表是否正确?
- 区分
\IfBooleanTF
和的目的是什么\IfNoValueTF
? 只用一个宏来完成这两项工作不是很有意义吗? 或者,是否存在需要区分的情况?t
和k
使用不同的宏对我来说特别令人困惑。
我询问的原因是:如果我能理解这背后的逻辑,也许我就能记住使用正确的方法。
后续问题:
参考:
答案1
是的,上面说的正确。
这两种情况在逻辑上是截然不同的,因为你传递不同的信息. 的目的xparse
是使这些结构信息清晰明了。
为了\IfBoolean(TF)
,论点是单个令牌只能是两个值之一:TRUE 和 FALSE。值是总是由t
(和s
) 参数类型返回,并且测试用于查看它是哪种类型。也可以使用 反转此处返回的逻辑\ReverseBoolean
:标记的存在不必映射到逻辑上的 TRUE。
\DeclareDocumentCommand \foo { >{ \ReverseBoolean } s }
{
\IfBooleanTF #1
{ Star not present }
{ Star present }
}
另一方面,获取“一些标记”的参数类型可能不存在(因此产生\NoValue
),存在但为空或存在且非空。某事物的逻辑展示无法逆转,因此\IfNoValue
仅当根本没有给出可选参数时才会始终为真。
-type参数k
最近已调整:您现在需要e
-type。这个参数有些特殊,团队已经就此处的正确形式进行了大量讨论。