是否有比文档中更多的可选 \xx_use:N 和 \xx_new:N 函数?

是否有比文档中更多的可选 \xx_use:N 和 \xx_new:N 函数?

从文档中我\tl_use:N知道\str_use:N是可选的。这些变量可以直接使用。对于更多类型来说这不是同样如此吗?

是否可能\xx_new:N将更多内容正式提升到该可选级别(即,如果覆盖不是问题,则无需声明使用意图,并​​且\xx_set:Nn可以直接调用吗?(例如\cs_set:Nn

特别是考虑到局部变量——我不会养成使用\l_tmpa_tl描述性变量名(我认为这容易出错)的习惯,所以我会有很多\tl_new:N函数悬而未决。

答案1

使用\l_siemer_foo_tl\l_siemer_foo_str代替

\tl_use:N \l_siemer_foo_tl
\str_use:N \l_siemer_foo_str

确实允许,但并不推荐。我通常尝试使用\tl_use:N(或来作为前缀\str_use:N,因为这样编程更简洁,除非简洁性使得“无前缀”方式更可取。请注意,\tl_use:N需要几个扩展步骤,而无前缀形式只需要一个,这可能会对已经很长的程序产生影响。

另一方面,当选项生效\tl_use:N时,还会检查以下变量是否被声明。check-declarations

还有其他<module>_use:N功能,即\dim_use:N\skip_use:N\muskip_use:N\int_use:N和;省略这些\box_use:N功能\fp_use:N将会导致灾难。

使用任何变量(除了tlstr,如上所述)在野外不会有任何好处;在某些情况下,您会得到一个合理的错误,例如A sequence was misused.A floating point with value '1.2' was misused。在其他情况下(想想dim变量),您会得到一个非常低级的错误消息或意外的输出。

唯一的其他变量类型可以在野外使用是clist,但这只是为了实现的原因,不应依赖此功能。因此\l_siemer_foo_clist应该不是被认为是 的简写\clist_use:Nn \l_siemer_foo_clist {,}(反正我看不出有什么用处)。使用它的漂亮程序可能不再有效,因为clist变量的内部实现已经改变。

对于其他变量类型,没有<module>_use:N函数,但需要利用变量的内部结构的其他参数。

而且,<module>_new:N绝对不是可选的,因为任何变量类型。

答案2

任何最终为宏的变量类型都可以在不带访问器的情况下“使用”。但是,这可能会导致令人惊讶的结果:例如,查看fp!的原始结构。

关于变量声明的官方立场不会改变:它们必须在使用前声明。唯一的例外是它们由以下方式“自动创建” l3keys:这是一种避免代码重复性的折衷方法。

相关内容