expl3: 充分展开另外两个参数

expl3: 充分展开另外两个参数

我希望根据两个相关的字符串来分配\crefname计数器\__my_countername:,为此我写了类似的东西:

\exp_args:Nx \crefname { \__my_countername: }{ \csname my@cref@\__my_countername: @name\endcsname}{\csname my@cref@\__my_countername: @name@plural\endcsname }

但是,只有第一个\__my_countername:被展开了。我怎样才能让其他两个\__my_countername:也展开呢?我查看了手册interface3.pdf,发现没有\exp_args:Nxxx,也\exp:w\__my_countername:\exp_end:不起作用。

答案1

一般来说,与具有正确签名的预定义函数相比,“临时”扩展不太受欢迎expl3。因此,你找不到的原因\exp_args:Nxxx是它没有被创建例如

\cs_generate_variant:Nn \some_foo:nnn { xxx }

但是,我们可以使用以下方法强制它存在

\exp_args_generate:n { xxx }

不过我不会x在这里使用 -type 扩展。你有三个参数,一个声称是无参数函数,但我怀疑它实际上是 tl 变量,另外两个是 csname 寻址的 tl 变量。因此,我们想要提取值,这就是 和 的V用途v

\exp_args_generate:n { Vvv }
\exp_args:NVvv \crefname
  \__my_countername:
  { my@cref@\__my_countername: @name }
  { my@cref@\__my_countername: @name@plural }

(再次重申,这是一个相当不寻常的变体,所以我不得不创建它。)

相关内容