在下面的例子中,我原本期望\exp_args:NV
(1.) 和\exp_args:Nv
(3.) 能够作为\exp_last_unbraced:No
变量 (2.) 周围的 + 括号。但它们却吸收了变量之外的内容。我可能遗漏了什么?
\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
\tl_set:Nn\l__erw_foo_tl{{x}{y}}
\begin{enumerate}
\item %\exp_args:NV\use_i:nn\l__erw_foo_tl
\item \exp_last_unbraced:No\use_i:nn{\l__erw_foo_tl}
\item %\exp_args:Nv\use_i:nn{l__erw_foo_tl}
\end{enumerate}
\ExplSyntaxOff
\end{document}
答案1
\exp_args:NV
接受一个变量并扩展到内容作为n
类型参数,因此
\exp_args:NV \use_i:nn \l__erw_foo_tl
扩展是
\use_i:nn { <content of \l__erw_foo_tl> }
同样地\exp_args:Nv
\exp_args:Nv \use_i:nn { l__erw_foo_tl }
结果完全相同
\use_i:nn { <content of \l__erw_foo_tl> }
在这两种情况下,\use_i:nn
都需要二参数,这里我们只提供了一个,因此它会吸收后面的所有参数。
相反,\exp_last_unbraced:No
(或\exp_last_unbraced:NV
或....) 明确不将最后一个参数括起来。这是一个相对罕见的要求,旨在作为比该系列略高级别的扩展,\exp_after:wN
但不如该\exp_args:N...
系列那么常见/方便。o
-type 参数需要一个标记,按照惯例,它不应该用括号括起来,但可以与它们一起使用 - 我认为你会混淆
\item \exp_after:wN \use_i:nn \exp_after:wN { \l__erw_foo_tl }
这显然是w
第一个参数(标记)的性质。