如果我定义
\newcount\punkt
\def\newpt{\the\punkt\space\advance\punkt by 1}
一切运行良好;但如果我
\newcounter{punkt}
\newcommand\newpt{\the\punkt\space\stepcounter{\punkt}}
我明白了
You can't use `blank space ' after \the.
为什么?
答案1
LaTeX 中与 Plain 类似的\the\punkt
是
\the\csname c@punkt\endcsname
因为在处理\newcounter{punkt}
LaTeX时
\newcount\c@punct
请注意其中的巨大差异:之后\newcount
(借用自纯 TeX)应该有一个控制序列名称,而参数\newcounter
是一串字符,用于构建不同的控制序列,即
\c@punkt
\thepunkt
\p@punkt
第一个是分配的计数寄存器的名称,第二个是计数器值的表示宏(默认情况下),最后一个是处理链接到此计数器的\arabic{punkt}
“前缀” (有关详细信息,请参阅)。特别是,\label
source2e
\newcounter{punkt}
不是定义\punkt
。
因此\newcounter{punkt}
,\the\punkt
你会得到一个关于未定义控制序列的错误(除非\punkt
是由于未定义的控制序列(独立定义)并且你在出现错误消息时按下回车键,或者如果 TeX 由前端以“不间断”模式运行,TeX 会忽略未定义的控制序列并继续应用于\the
下一个标记;由于\space
是可扩展的,TeX 会将其扩展并尝试应用于\the
结果标记列表,但这\the<space token>
是非法的。
总是看着第一的错误消息。并改用\thepunkt
。
答案2
如果使用您发布的代码,它会产生与您显示的错误不同的错误。
\documentclass{article}
\newcounter{punkt}
\newcommand\newpt{\the\punkt\stepcounter{\punkt}}
\begin{document}
\newpt
\end{document}
! Undefined control sequence.
\newpt ->\the \punkt
\stepcounter {\punkt }
l.9 \newpt
?
latex 命令\newcounter
没有定义\punkt
,您可以使用\thepunkt
来获取打印表格。
\documentclass{article}
\newcounter{punkt}
\newcommand\newpt{\thepunkt\stepcounter{punkt}}
\begin{document}
\newpt
\newpt
\end{document}
您可以使用如下结构生成所示的错误
\documentclass{article}
\edef\x{\noexpand\the\space}\x
\begin{document}
\end{document}
! You can't use `blank space ' after \the.
\x ->\the
l.3 \edef\x{\noexpand\the\space}\x
?