有两个命令,其中一个命令形成“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}%
}