\csname 与 #1 不兼容?

\csname 与 #1 不兼容?

我正在尝试使用\csname来执行一个名称取决于变量的命令。如果我使用\csname mygametitle\tmp \endcsname它,它会起作用,但如果我使用它而不是\tmp参数,#1它会失败:

在此处输入图片描述

\documentclass{article}

\begin{document}

\def\mygametitleABC{Title for ABC}
\def\test#1{%
  \csname mygametitle#1 \endcsname%
}
\def\testb#1{%
  {%
    \def\tmp{#1}%
    \csname mygametitle\tmp \endcsname%
  }%
}

Version 1:
\test{ABC}

Version 2:
\testb{ABC}

\end{document}

答案1

\def\testb#1{%
  {%
    \def\tmp{#1}%
    \csname mygametitle\tmp \endcsname%
  }%                      ^^^ irrelevant
}

后面的空格\tmp按照通常规则被吞噬,\csname mygametitle\tmp \endcsname相当于\csname mygametitle\tmp\endcsname。但在

\def\test#1{%
  \csname mygametitle#1 \endcsname%
}%                    ^^^ very very relevant

你正在添加额外的空格。你应该使用

\def\test#1{%
  \csname mygametitle#1\endcsname
}%  

注意%后面的\endcsname也是不必要的。

相关内容