在 LaTeX3 中我们得到了\cs_prefix_spec:N
、\cs_argument_spec:N
和\cs_replacement_spec:N
来分析控制序列。
还有通用的\cs_split_function:N
,它将控制序列分成其名称和参数规范部分。
但是第一个并不能让我们获得关于控制序列的所有信息,即缺少名称。
\cs_name_spec:N
给出所需函数的实现并将其扩展为函数名称也不难,例如
\cs_new:Npn \__cs_name_spec_aux:N #1
{
\use_i:nnn #1
}
\cs_new:Npn \cs_name_spec:N #1
{
\exp_args:Nx \__cs_name_spec_aux:N { \cs_split_function:N #1 }
}
(如果没有重定向,我不知道这一点\exp_args
)
那么,为什么这个函数没有包含在 LaTeX3 内核中呢?从我的角度来看,它只会完成上面提到的另外三个。
答案1
这至少在一定程度上是历史性的,但在很大程度上反映了对团队有用的内容。\cs_split_function:N
需要实现\cs_generate_variant:Nn
和其他核心功能,并且需要功能名称的两个部分。另一方面,,则\cs_prefix_spec:N
更为专业,但很有用。我们不需要“只获得名称”,因此没有在该区域添加专用功能。