理解 amsmath 收集环境错误消息

理解 amsmath 收集环境错误消息

我正在尝试了解使用 latex 时的错误信息,而不必全部谷歌搜索。以下示例在使用嵌入在 Texpad 760(预加载格式=latex 2021.3.29)中的扩展模式下运行的 TexpadTeX(基于带有 e-TeX 扩展的 TeX 版本 3.14159265)时会产生 10 个错误:

\documentclass[11pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{gather}
    1=1
    
\end{gather}
\end{document}

上述代码的问题(从用户角度来看)在于,gather 环境中有一个空行,这是不允许的。但是生成的错误消息如下:

  1. ! Paragraph ended before \gather was complete. <to be read again> \par l.6
  2. ! Missing $ inserted. <inserted text> $ l.6
  3. ! Missing \endgroup inserted. <inserted text> \endgroup l.6
  4. ! Display math should end with $$. <to be read again> \par l.6
  5. ! Misplaced \cr. \math@cr@@@ ->\cr l.7 \end{gather}
  6. ! Misplaced \noalign. \math@cr@@ ... \iffalse }\fi \math@cr@@@ \noalign {\vskip #1\relax } l.7 \end{gather}
  7. ! Misplaced \noalign. \black@ #1->\noalign {\ifdim #1>\displaywidth \dimen@ \prevdepth \nointerlin... l.7 \end{gather}
  8. ! Extra }, or forgotten \endgroup. \endgather ->\math@cr \black@ \totwidth@ \egroup $$\ignorespacesafterend l.7 \end{gather}
  9. ! Missing $ inserted. <inserted text> $ l.7 \end{gather}
  10. ! Display math should end with $$. <to be read again> \endgroup l.7 \end{gather}

我不太明白有人怎么能从这些错误消息中推断出“删除 gather 环境中的空行”这一操作。这些错误消息中的哪一条能让我找到这个方向?

提前致谢!

答案1

TeX 提供了在发生错误后继续编译的功能。实现此功能是因为错误有时可能是局部的,因此即使错误周围的输出存在问题,也可以让文档的其余部分正常排版。

我认为这是一个不幸的设计决定,因为 1. 输出可能不是最优的,而且往往是完全错误的,2. 它告诉用户忽略错误是可以的,3. 它很难找出需要修复的实际错误(就像当前关于 的问题一样gather)。

在默认设置中,LaTeX 编译器(例如 pdfLaTeX不要继续,并在发现第一个错误时立即停止处理。然而,大多数编辑器和在线环境,包括 TeXPad,启用此功能,导致很多混乱。

介绍很长,主要观点是:始终只查看第一个错误,忽略后面的所有内容,因为所有其他错误消息与问题的根本原因无关。在本例中,第一个错误消息是:

! Paragraph ended before \gather was complete.
<to be read again> 
                   \par 
l.6 

此错误表示段落已结束,但不应结束。在 TeX 中,有两种方式可以结束段落:使用命令\par或使用空行。

错误消息告诉您发现了一个意外的段落结尾,因此要修复该问题,您需要删除该段落结尾。代码中没有,\par但有一个空行。因此您知道需要删除空行。

当然,这需要知道空行意味着段落结束,解决方案是消除这段话的结尾。这是学习 TeX 语言的一部分,需要花费一些时间和经验。错误消息可能很隐晦,但一旦你了解了这些细节,你就会发现修复错误所需的信息(几乎)总是出现在错误消息中。

答案2

作为一般规则,只需考虑与同一位置相关的一系列错误消息中的第一个。以下消息是由尝试恢复错误引起的,但在这种情况下,即使删除有问题的内容\par(如果在交互模式下)也无法解决问题:当“短”命令的参数包含不允许的 时,这是一个常见问题\par

宏可以是\long(接受\par其参数)或不是。由于\par无法在amsmath对齐中工作,因此所有相关宏都不是\long。输入\par\long宏将停止查找参数,并且预计错误恢复会失败。

在这种情况下,错误消息告诉用户\par(或空白行)出现在不该出现的位置。错误中提到\gather,并且应该知道\begin{env}在某个时刻执行命令\env。错误消息现在应该很清楚了:在第 6 行,在gather环境中,有一个空白行或虚假\par标记。将其删除并重新运行 LaTeX。

相关内容