LaTeX
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通常不会报告错误,直到遇到另一个错误,这个错误无法发生,直到遇到这个花括号(例如:文档的结束)。有些错误只能通过人类来修复,因为只有人类才能理解文档的意义或预期的外观。
常见错误:
-
多余的右花括号
! Too many }'s.
l.6 \date December 2004}
LaTeX认为这里有多余的右花括号,因为\date
命令后缺少一个左花括号,而紧跟着的是右花括号,导致了错误。
-
未定义的控制序列
! 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包没有加载该语言的分词规则,可能会导致单词分割不当。解决方法是安装所需语言的分词规则。
常见错误的解决方法
-
拼写错误:拼写错误是导致LaTeX错误的最常见原因,检查命令的拼写。
-
忘记关闭花括号:确保所有花括号成对配对。
-
缺少
\end{document}
:这是LaTeX无法编译的常见原因之一。 -
URL过长:使用
breakurl
包来拆分URL。
错误排查工具
一些程序可以检查LaTeX源码,帮助发现错误或突出显示不规范的用法,提供比内置错误消息更多的帮助,特别是对于初学者。
-
nag:一个LaTeX包,用于指示使用过时的命令。
-
lacheck:用于检查代码一致性的工具,适用于Windows和OS/2。
-
chktex:LaTeX语义检查工具,适用于类Unix系统。
这些工具可以帮助你发现并解决LaTeX中的常见问题。