我正在尝试使用\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
也是不必要的。