考虑
\def\niii{10}
\def\niiii{21}
我可以轻松通过以下方式获得
\use:c {niii} % 10
\use:c {niiii} % 21
但是我想使用 动态创建 csname \int_step_inline:nn {4} {i}
。我尝试了以下方法,但都没有奏效
\use:c { n\int_step_inline:nn {4} {i} }
\exp_args:Nx \use:c { n\int_step_inline:nn {4} {i} }
\tl_set:Nx \l_tempa_tl { n\int_step_inline:nn {4}{i} }
\use:c {\tl_use:N \l_tempa_tl}
答案1
参数\use:c
必须仅扩展为字符标记。由于\int_step_inline:nn
不能完全扩展(手册中旁边没有星号或空心星号),因此不能在这样的地方使用它。
你可以使用\int_step_function:nN
类似
\cs_new:Nn \__antshar_makei:n { i }
\use:c { note \int_step_function:nN { 3 } \__antshar_makei:n }
但如果目的是获得四个字符串i
,则使用更简单\prg_replicate:nn
\use:c { note \prg_replicate:nn { 3 } { i } }
但也许你不想要创建\notei
、\noteii
等等\noteiii
。您可以使用以下方式定义数值数组
\intarray_new:Nn \g_antshar_note_intarray {100}
这将分配一个长度为 100 的数组。如果您想在数组中存储值(该数组初始化为所有 0 条目)
\intarray_gset:Nnn \g_antshar_note_intarray { 3 } { 10 }
\intarray_gset:Nnn \g_antshar_note_intarray { 4 } { 21 }
并且你可以(扩展地)使用以下方式检索值
\intarray_item:Nn \g_antshar_note_intarray { 3 }