理解 expl3 的 \exp_args:NV

理解 expl3 的 \exp_args:NV

在下面的例子中,我原本期望\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第一个参数(标记)的性质。

相关内容