为什么你不能在 \the 之后使用“空格”

为什么你不能在 \the 之后使用“空格”

如果我定义

\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}“前缀” (有关详细信息,请参阅)。特别是,\labelsource2e\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
                                        
? 

相关内容