如何调试“嵌套太深”错误

如何调试“嵌套太深”错误

我发现很多人都问过类似的问题。尽管可能会惹恼 LaTeX 专家,但问题在于,正如我之前所说,LaTeX 是一种非常糟糕的语言。话虽如此,一个在 Java/C++/Perl/Python 等方面相当熟练的程序员应该能够调试停止工作的程序。

目前,我调试失败的唯一方法是,如果我幸运地只写了几行代码,就快速撤消,或者注释掉代码块,直到我确定问题所在的区域。这是完全不可接受的。如果这是唯一的方法,那么语言就有问题。我正在寻找任何帮助,如何在不必编辑数百行代码的情况下找到错误。

我编译了我的代码,控制台在第 709 行给出了一个错误:

\materials
\begin{itemize}
\item photoresistor (3k)
\item resistor (2.2\kohm)
\end{itemize}

\materials 命令定义如下:

\newcommand{\materials}{{\bf Materials:}}

带有光敏电阻的项目是出现错误的项目。这大概意味着之前有未关闭的 \begin{itemize} 命令?

Q1:此错误的可能原因是什么。是否有任何其他未封闭的实体导致此错误? \begin{enumerate} 怎么办?

Q2:除了搜索每个 \begin{itemize} 并手动寻找匹配的 \end{itemize} 之外,我怎样才能找到它?

Q3:我可以编写任何代码来断言所有内容都必须关闭,或者显示任何打开的 \begin 的位置吗?这对解决这个问题大有帮助!!!

答案1

如果您怀疑您有未封闭的组,那么让 TeX 到达最后,或者如果其他错误停止 tex 或掩盖问题,请\stop在您想要测试的点添加,然后查看终端输出或日志。

例如

\documentclass{article}

\begin{document}

aaa

\begin{itemize}
\item xxx
\item xxx
\end{itemize}

bbb

\begin{itemize}
\item xxx
\item xxx
%oops\end{itemize}

bbbb

\begin{itemize}
\item xxx
\item xxx
\end{itemize}



\stop



more stuff here

other \ERROR we are not concerned about

如果你运行上述代码,TeX 会停止在,\stop并且终端输出显示

(\end occurred inside a group at level 1)

### semi simple group (level 1) entered at line 14 (\begingroup)

因此,级别 1 表示您有一个额外的开群,第二行告诉您这是一个半单群,这意味着它不是以 开头的,\begingroup所以{在 latex 中很可能是以\begin

然后它会告诉你它从第 14 行开始,这正是

\begin{itemize}

行,查找缺少的列表\end

相关内容