将以数字结尾的名称传递给 \csname 不起作用

将以数字结尾的名称传递给 \csname 不起作用

可能重复:
带有特殊字符的宏名称

当我使用\yyy下面定义的时,它不会打印yyy,但如果我使用\xxx它,它会打印xxx。我该如何让它\yyy工作?

\def\P1{yyy}
\def\PA{xxx}
\def\yyy{\csname P1\endcsname}
\def\xxx{\csname PA\endcsname}

答案1

有办法解决这个问题:

  • 使用罗马数字,而不是阿拉伯数字。例如:

    \def\Pi{yyy}
    \def\Pii{xxx}
    \def\yyy{\Pi}
    \def\xxx{\Pii}
    
  • 对于所有非字母的内容,请使用\csname...\endcsname指令。例如(请注意所需的扩展):

    \expandafter\def\csname P1\endcsname{yyy}
    \def\PA{xxx}
    \def\yyy{\csname P1\endcsname}
    \def\xxx{\PA}
    
  • 使用\@namedef\@nameuse。例如:

    \makeatletter
    \@namedef{P1}{yyy}
    \def\PA{xxx}
    \def\yyy{\@nameuse{P1}}
    \def\xxx{\PA}
    \makeatother
    

无论如何,我认为人们总是可以不用控制序列中的数字。

相关内容