绝对基本的 \csname 问题

绝对基本的 \csname 问题

我天真地以为下面的代码会在破折号之间产生单词“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

您的问题是名称和之间的空格\endcsname

吉米

这有效:

\documentclass[10pt]{article}

\usepackage[T1]{fontenc}

\setlength\parindent{0pt}

\begin{document}

\expandafter\def\csname v0\endcsname{Jimmy}

-\csname v0\endcsname-

\end{document}

答案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

相关内容