如何扩展包含另一个宏的宏

如何扩展包含另一个宏的宏

假设我已经预定义了一些宏,如\abc,,\aotherc...等。该宏就像\a#1c,并由#1定义\x

换句话说,我不知道要使用\abc、、\aotherc...中的哪一个,但是所有这些宏都已定义。那么我怎样才能先\a\xc\x扩展来写,然后整个宏扩展为正确的内容?

这是我命名约定导致的问题。调整子名称的顺序就可以解决这个问题。但我想知道是否有办法解决这个问题。

\def\abc{abc}
\def\aotherc{aotherc}
\def\x{b}

我的尝试

\expandafter\a\csname \x\endcsname c

第一条评论是对的。这样写

\csname a\x c\endcsname

然后它就会正确扩展。我上次运行时遇到了其他问题。

答案1

在此处输入图片描述

是纯 TeX 文件的输出:

\def\abc{abc}
\def\aotherc{aotherc}



1:
\def\x{b}
\csname a\x c\endcsname

2:
\def\x{other}
\csname a\x c\endcsname

\bye

这表明在每种情况下,首先\x扩展以构造 csnames \abc(在第一种情况下)或\aotherc(在第二种情况下),然后扩展构造的 csname 以生成适当的文本。

相关内容