在 TeX 中,“\centerline” 真的定义了“\ERROR”吗?

在 TeX 中,“\centerline” 真的定义了“\ERROR”吗?

.tex文件中,有\centerline{\bf A SHORT \error STORY},这将导致错误,因为

l.3 \centerline{\bf A SHORT \ERROR STORY}
                                         
? 
! Emergency stop.
<argument> \bf A SHORT \ERROR 
                              STORY
\centerline #1->\line {\hss #1
                              \hss }
l.3 \centerline{\bf A SHORT \ERROR STORY}

解释如下TeXbook

像 \centerline 这样的控制序列在告诉 TEX 查看 #1 之前可能已经定义了像 \ERROR 这样的控制序列。因此 TEX 在扫描参数时不会解释控制序列。

有点难以理解,这句话的意思好像是因为 \centerline定义了\ERROR\centerline所以不会解释\ERROR,所以报错。

答案1

否,\ERROR未定义(这就是产生错误的原因)

注释的要点是,错误是在使用命令时引发的,而不是在扫描参数时引发的。

所以 如果 \centerline被定义为不使用其参数

\def\centerline#1{oops}
\centerline{....\ERROR}

不是一个错误,同样如果 \centerline本地定义\ERROR

\def\centerline#1{{\def\ERROR{OK}#1}}
\centerline{....\ERROR}

不是一个错误。

但实际定义确实给出了错误

\centerline{\bf A SHORT \ERROR STORY}`

但上下文不是

\centerline{\bf A SHORT \ERROR
                              STORY}

因为扫描参数时不会引发错误,所以

<argument> \bf A SHORT \ERROR 
                              STORY
\centerline #1->\line {\hss #1
                              \hss }
l.3 \centerline{\bf A SHORT \ERROR STORY}

\centerline因为在扫描整个参数并开始处理替换文本后,错误就被删除了。

相关内容