我发现很多人都问过类似的问题。尽管可能会惹恼 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
。