为什么从第二次编译开始我会得到 `! LaTeX Error: Missing \begin{document}. l.2 gdef @abspage@last{1}`?

为什么从第二次编译开始我会得到 `! LaTeX Error: Missing \begin{document}. l.2 gdef @abspage@last{1}`?

我有一个简单的 TeX 文件,像这样

\documentclass{article}
\begin{document}

\def\printcsnameof #1{
    \escapechar=-1
    \string #1
}

\printcsnameof \test

\end{document}

当我第一次编译它时,它运行良好并打印test在页面上。

然而,从第二次运行开始,它引发了错误

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ->\errmessage  LaTeX Error: Missing \protect \begin {document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help\@err@                                                               
                                                                                                                                                                                                                  
l.2 g
   def @abspage@last{1}
?

到底是怎么回事?

答案1

问题是代码escapechar全局修改了的值,这使得在文档末尾运行的写入文件的代码的行为.aux不正确。

如果你检查该.aux文件,内容将是

\relax 
gdef @abspage@last{1}

解决方案:

  • 修改代码,使其不会escapechar全局修改,例如

    \documentclass{article}
    \begin{document}
    
    \def\printcsnameof #1{%
        {%
            \escapechar=-1
            \string #1%
        }%
    }
    
    \printcsnameof \test
    
    \end{document}
    
  • 删除旧.aux文件(否则您将不断收到错误消息)

  • 重新编译该文件。

使用更正后的文件,.aux文件内容应为

\relax 
\gdef \@abspage@last{1}

\之前gdef@abspage@last

相关内容