请看一下这个简短的 MWE:
% Plain LuaTeX
\ifcsname b@selineskip\endcsname
\else
\expandafter\newdimen\lastnamedcs
\lastnamedcs\normalbaselineskip
\fi
\expandafter\the\csname b@selineskip\endcsname
\bye
这里有什么问题?
答案1
\ifcsname
没有为未定义的名称定义 csname(与 不同\csname
),因此
\ifcsname foo\endcsname\else
\expandafter\show\lastnamedcs
\fi
\bye
生产
> \^^@=undefined.
<recently read> \IMPOSSIBLE.
l.2 \expandafter\show\lastnamedcs
它正在生成一个无法使用的内部不可访问令牌\newdimen
(或任何东西)。
一个更容易理解的变体是
\ifcsname foo\endcsname\else
\expandafter\def\expandafter\z\expandafter{\lastnamedcs}
\show\z
\fi
\bye
具有终端输出
> \z=macro:
->\IMPOSSIBLE..
l.3 \show\z