通过另一个命令获取某个命令名的token

通过另一个命令获取某个命令名的token

有两个命令,其中一个命令形成“token-kind@number-of-section@number-of-this-kind-token”类型的标记。同时,标记类型字符串的名称和相应的计数器名称作为参数传递给此命令。第二个命令生成一个命令名称,其前导反斜杠和名称本身与第一个命令生成的格式相同的标记一致。同样,这个命令有两个与第一个命令含义相同的参数。现在我将它们定义如下:

\def\commandNameToken#1#2{#1@\arabic{section}@\arabic{#2}}
\def\makeCommandName#1#2{\csname #1@\arabic{section}@\arabic{#2}\endcsname}

但问题是,如果我想更改令牌的格式,那么我应该在 \commandNameToken 和 \makeCommandName 命令中都进行更改。但是,我还没有掌握 TeX 扩展机制,即命令 \makeCommandName 使用命令 \commandNameToken 来获取令牌(仅在 \commandNameToken 中更改令牌格式)。

有没有 TeXpert 可以建议参考命令 \commandNameToken 的命令 \makeCommandName 的格式?:)

答案1

考虑到 Phelype Oleinik 的精彩评论,您可以使用:

\def\makeCommandName#1#2{\csname\commandNameToken{#1}{#2}\endcsname}

如果你想\makeCommandName依赖 扩展结果\commandNameToken在 扩展处的意义。另一方面,如果你想让 的定义在 定义处 包含 意义的“快照” ,你可以按如下方式进行:\csname\makeCommandName\makeCommandName\commandNameToken\makeCommandName

\edef\makeCommandName#1#2{%
  \unexpanded\expandafter{\expandafter\csname\commandNameToken{#1}{#2}\endcsname}%
}

相关内容