![绝对基本的 \csname 问题](https://linux22.com/image/349877/%E7%BB%9D%E5%AF%B9%E5%9F%BA%E6%9C%AC%E7%9A%84%20%5Ccsname%20%E9%97%AE%E9%A2%98.png)
我天真地以为下面的代码会在破折号之间产生单词“Jimmy”,但它只产生了破折号(也是注释掉的版本)。有人能解释一下(最好是一个音节的单词)我遗漏了什么吗?
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\setlength\parindent{0pt}
%
\begin{document}
\expandafter\def\csname v0 \endcsname{Jimmy}
%\expandafter\def\csname v0 \endcsname#1{Jimmy}
-\csname v0\endcsname-
\end{document}
答案1
答案2
\csname v0 \endcsname
和之间是有区别的\csname v0\endcsname
。你定义了前者,但使用了后者:
—吉米—
\documentclass{article}
\begin{document}
\expandafter\def\csname v0 \endcsname{Jimmy}
-\csname v0 \endcsname-
\end{document}
在\csname
...内\endcsname
,即使是空格也是有效的。因此,您必须在使用时完全匹配它。此外,如果未定义宏, \csname
...不会导致错误。相反,它\endcsname
定义将其改为\relax
。以下是示例:
\csname v1\endcsname
\expandafter\show\csname v1\endcsname
/terminal中的输出.log
是
\v1=\relax