在我的文档第 95 页interface3
(日期为 2013 年 7 月 28 日)中,该\tl_case:???
函数首次被介绍为具有签名\tl_case:NnnTF
,但在其扩展用法描述中它显示为\tl_case:NnTF
。我猜这是一个打字错误,但以防万一……是吗?
我的问题实际上是关于是否可以使用这种类似开关的流控制结构来测试令牌列表的内容多变的针对集合的内容代币列表而据我了解,我们现在是针对令牌列表集合的内容进行测试变量。如果我理解错了,请纠正我的理解。
顺便说一句,从文档中我不清楚测试是否在第一次成功后停止(如果有的话)。这一点对于测试来说可能没有任何意义代币列表但在针对令牌列表进行测试时它确实如此变量因为我们可以有多个多变的设置为相同内容。
答案1
\tl_case:NnnTF
左边的 是打字错误,应该是与\tl_case:NnTF
正文描述一致的。
旧函数\tl_case:Nnn
最近已被重命名\tl_case:NnF
,并且在“真实”情况下(即当匹配发生时)添加操作的参数已经找到了它的位置。
是TF
可选的,总共有四个功能:
\tl_case:NnTF
\tl_case:NnT
\tl_case:NnF
\tl_case:Nn
他们全都做了一场比赛标记列表变量反对令牌列表变量,这是确保充分扩展的唯一方法。
如果需要进行字符串匹配,也有类似的函数
\str_case:nn(TF)
(其中(TF)
代表空,T
,F
或TF
)和
\str_case_x:nn(TF)
不同之处在于后者尝试对参数字符串进行完全扩展。(请注意,\str_case:nnTF
手册中的描述有一个印刷错误。)
正如约瑟夫赖特 (Joseph Wright) 所指出的,测试确实在第一次命中时停止:它们本质上是具有中断条件的循环(因此它们是可扩展的)。