为什么没有 \cs_name_spec:N

为什么没有 \cs_name_spec:N

在 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更为专业,但很有用。我们不需要“只获得名称”,因此没有在该区域添加专用功能。

相关内容