LaTeX错误和警告

错误消息
LaTeX在排版过程中会遇到它无法理解或无法执行的内容,并显示错误消息。错误消息的格式始终相同。错误消息以感叹号“!”开头,描述错误类型,随后是显示错误发生时LaTeX处理的文档行号。以下是一个例子,显示用户输入了错误的命令\tableofcotnetns

! Undefined control sequence.
l.6 \tableofcotnetns

当LaTeX发现错误时,它会显示错误消息并暂停。你必须键入以下字母之一以继续:

意义
x 立即停止并退出程序。
q 尽量安静地继续,不再显示错误消息。
e 停止程序,但将光标移到编辑器中错误所在的位置。 (仅适用于与LaTeX通讯的编辑器)。
h 尝试提供更多帮助。
i (后跟修正)输入修正并继续(这是临时的修复,仍然需要在编辑器中做实际修正)。
r 在非停止模式下运行。继续处理,除非错误太多,程序失败(错误超过100条)。

某些系统(如Emacs)运行LaTeX时会启用“非停止”模式,因此它会一直处理到文件末尾,无论是否有错误,或者直到达到限制。

警告消息
警告消息不以感叹号开头,而是LaTeX给出的注释,通常是关于你可能需要关注的问题,例如行太长或太短(通常由不正常的连字符导致),页面过长或过短,其他排版问题等(大多数情况下你可以忽略,直到稍后)。与其他系统不同,LaTeX并不试图通过干预字母间距来隐藏文本的不均匀性(通常这做不到),而是认为作者或编辑应该能够解决这些问题。虽然通过设置LaTeX参数,你可以使排版非常松散,从而避免警告消息(关于不合适的行或页面),但这只会推迟问题的出现,直到你开始收到读者或出版商的抱怨。

常见错误示例

这里只列出了几条常见的错误消息,这些是初学者最常遇到的错误。如果你遇到其他错误消息,并且不确定应该怎么做,寻求帮助是一个好主意。

大多数错误消息都是自解释的,但需要注意的是,LaTeX报告错误的地方可能与实际出错的位置不同。例如,如果你忘记闭合一个包含斜体的花括号,LaTeX通常不会报告错误,直到遇到另一个错误,这个错误无法发生,直到遇到这个花括号(例如:文档的结束)。有些错误只能通过人类来修复,因为只有人类才能理解文档的意义或预期的外观。

常见错误:

  1. 多余的右花括号

! Too many }'s.
l.6 \date December 2004}

LaTeX认为这里有多余的右花括号,因为\date命令后缺少一个左花括号,而紧跟着的是右花括号,导致了错误。

  1. 未定义的控制序列

! Undefined control sequence.
l.6 \dtae
{December 2004}

在这个例子中,LaTeX报告说没有\dtae这样的命令。显然这是拼写错误,但只有人类能发现这一点。LaTeX只知道\dtae不是它知道的命令,它是未定义的。拼写错误是最常见的错误来源。

常见错误的解决方法

  • 拼写错误:在大多数情况下,拼写错误是导致错误的最常见原因。一些编辑器可以通过下拉菜单或图标插入常见的命令和环境,这有助于避免这些错误。

  • 未闭合的花括号:确保所有的花括号都正确配对。

常见LaTeX错误及解决方案

数学模式错误

! Missing $ inserted

当LaTeX遇到只能在数学模式中使用的字符时,而该字符被插入到普通文本中时,出现此错误。如果你想使用数学模式,请使用$...$\begin{math}...\end{math},或者使用“快速数学模式”命令:\ensuremath{...}。如果你不想使用数学模式,可能是你不小心使用了特殊字符。例如,_数学模式下会被解释为下标操作符,应该使用\_来表示下划线字符。

从2018年开始,所有TeX引擎都支持UTF-8编码。在旧版本中,如果你没有正确使用字符编码,例如在没有\usepackage[utf8]{inputenc}的情况下使用UTF-8,或者没有\usepackage[latin1]{inputenc}使用iso8859-1,也会导致此错误。

参数溢出错误

Runaway argument?
{December 2004 \maketitle
! Paragraph ended before \date was complete.

此错误发生是因为\date命令中的闭合花括号丢失。错误原因是\maketitle尝试排版标题页时,LaTeX仍在等待更多的文本输入以完成日期内容。\maketitle会自动创建新的段落,因此它会检测到上一段结束,但\date尚未完成。

不足的盒子宽度 (Underfull hbox)

Underfull \hbox (badness 1394) in paragraph at lines 28--30

这个警告表明LaTeX无法将行扩展到足够宽,而不使间距大于当前最大值。警告中的"badness"值(0-10000)指示问题的严重程度。在这种情况下,badness 1394可能不需要太过关注。你可以通过查看相关行来找到问题所在,并手动调整。例如,可以通过\textwidth\linewidth选项避免插入图片时出现这种情况。

过度的盒子宽度 (Overfull hbox)

Overfull \hbox (9.11617pt too wide) in paragraph at lines 860--861

这表示行内容过长,无法适应当前设定的宽度。LaTeX通常会把超出的部分放在行的边缘。你可以通过调整内容或修改排版设置来解决此问题,或者使用\slash命令来正确排版斜杠等字符。

缺失的包

! LaTeX Error: File `paralisy.sty' not found.

如果你尝试使用\usepackage命令加载某个包但未安装该包,会显示此错误。你可以通过手动下载所需的.sty文件并将其放入编译文档的同一文件夹中来解决此问题。

babel包警告

Package babel Warning: No hyphenation patterns were loaded for the language X

这是一个常见的警告,表示Babel包没有加载该语言的分词规则,可能会导致单词分割不当。解决方法是安装所需语言的分词规则。

常见错误的解决方法

  1. 拼写错误:拼写错误是导致LaTeX错误的最常见原因,检查命令的拼写。

  2. 忘记关闭花括号:确保所有花括号成对配对。

  3. 缺少\end{document}:这是LaTeX无法编译的常见原因之一。

  4. URL过长:使用breakurl包来拆分URL。

错误排查工具

一些程序可以检查LaTeX源码,帮助发现错误或突出显示不规范的用法,提供比内置错误消息更多的帮助,特别是对于初学者。

  • nag:一个LaTeX包,用于指示使用过时的命令。

  • lacheck:用于检查代码一致性的工具,适用于Windows和OS/2。

  • chktex:LaTeX语义检查工具,适用于类Unix系统。

这些工具可以帮助你发现并解决LaTeX中的常见问题。


Last modified: Monday, 21 April 2025, 9:55 AM