我希望根据两个相关的字符串来分配\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 }
(再次重申,这是一个相当不寻常的变体,所以我不得不创建它。)