在我的 LaTeX3 代码中,我经常发现自己想要将一个标记列表(或其他变量)的值添加到另一个标记列表(或其他变量)中,但却被括号包围(一个常见的用例是我构造一个稍后要调用的命令,我需要做一些复杂的计算来构造它的参数)。
我最近有以下想法:
\cs_new_nopar:Npn \tl_put_right_braced:Nn #1#2
{
\tl_put_right:Nn #1 {{#2}}
}
\cs_generate_variant:Nn \tl_put_right_braced:Nn {NV}
这样,我想我可以利用已经嵌入在 LaTeX3 中的变体内容,而不必自己弄清楚正确的扩展。
因此,我的问题本质上是“这样可以吗?”,附带的问题是“有没有更好的方法?”(以及可选的甜点“我应该如何称呼这个函数?”)。
答案1
执行赋值的函数应该是protected
。我认为没有理由使用nopar
,如果这必须是一个通用实用程序,那就更没有理由了。
如果你有多个通用实用程序,那么你应该有一个asutils
可以定义(并注册)前缀的包,例如asutils
。现在你的函数将是
\cs_new_protected:Nn \asutils_tl_put_right_braced:Nn
{
\tl_put_right:Nn #1 { { #2 } }
}
\cs_generate_variant:Nn \asutils_tl_put_right_braced:Nn { NV, cV, cv, Nx, cx }
是否需要陪伴gput
,由你来判断。
该前缀tl
是为内核保留的,不应被任何其他人使用。