LaTeX/错误和警告
LaTeX 在排版时描述了它正在做什么。如果它遇到无法理解或无法执行的内容,它将显示一条消息,说明问题所在。它还可能显示一些较不严重情况的警告。
看到错误信息不要惊慌:在命令中输入错误或拼写错误、忘记花括号、输入正斜杠而不是反斜杠或意外使用特殊字符非常常见。错误很容易在编辑器中发现并纠正,然后您可以再次运行 LaTeX 来检查是否已修复所有错误。下一节介绍了一些最常见的错误。
错误信息格式始终相同。错误信息以行首的感叹号开头,并给出错误的描述,后面紧跟着以数字开头的另一行,该数字指的是 LaTeX 在发现错误时正在处理的文档文件中的行号。以下是一个示例,表明用户误输入了\tableofcontents命令
! Undefined control sequence. l.6 \tableofcotnetns
当 LaTeX 发现类似这样的错误时,它会显示错误信息并暂停。您必须键入以下字母之一才能继续
键 | 意义 |
---|---|
x | 立即停止并x退出程序。 |
q | 尽可能quickly继续执行,不要再给我显示任何错误信息。 |
e | 停止程序,但在我的editor 中将文本重新定位到您发现错误的位置(这仅在您使用 LaTeX 可以与之通信的编辑器时才有效)。 |
h | 尝试给我提供更多help。 |
i | (后跟更正)表示将input 更正替换为错误并继续执行(这只是为了处理文件而进行的临时修复。您仍然需要在编辑器中进行该更正)。 |
r | 以不停模式run。遇到任何错误都继续执行,除非积累了太多错误导致失败(100 个错误)。 |
某些系统(例如 Emacs)以打开的“不停”开关运行 LaTeX,因此它将始终处理到文件结尾,无论是否出现错误,或者直到达到限制为止。
警告不会以感叹号开头:它们只是 LaTeX 关于您可能需要查看的事情的评论,例如过长或不足的行(通常由不寻常的连字符化引起,例如)、页面过短或过长,以及其他印刷细节(您大多数情况下可以忽略,直到以后再处理)。与尝试通过干预字母间距来隐藏文本中不均匀性的其他系统不同(通常收效甚微),LaTeX 认为作者或编辑应该能够做出贡献。虽然当然可以设置 LaTeX 的参数,使其间距足够松散,以至于您几乎永远不会收到关于不合适的行或页面的警告,但您几乎肯定只是将问题推迟到开始收到读者或出版商的投诉时。
这里只给出一些常见的错误信息:初学者最有可能遇到的错误信息。如果您发现这里没有显示的另一个错误信息,并且不清楚应该怎么做,请寻求帮助。
大多数错误信息是不言自明的,但请注意,LaTeX 发现并报告错误的位置可能比实际发生错误的位置要晚。例如,如果您忘记关闭括起斜体的花括号,例如,LaTeX 不会在遇到其他无法发生的事情之前报告此错误(例如,文档的结尾!)。有些错误只能由能够阅读和理解文档应该意味着什么或应该是什么样子的人类来纠正。
新手应该记住检查特殊字符列表:在您学习 LaTeX 时,很多错误都是由于意外输入了您不想输入的特殊字符造成的。在您习惯了这些字符之后,这种情况就会在几天内消失。
! Too many }'s. l.6 \date December 2004}
LaTeX 认为这里有太多'}'的原因是,在\date控制序列和单词 December 之前缺少左花括号,因此右花括号被视为多余的(确实如此!)。实际上,除了花括号中的日期之外,还可以有其他内容跟随\date命令,因此在找到右花括号之前,LaTeX 无法猜测您遗漏了左花括号!
! Undefined control sequence. l.6 \dtae {December 2004}
在本例中,LaTeX 抱怨它没有名为\dtae. 显然,它是被误输入的,但只有人类才能发现这个事实:LaTeX 只知道\dtae不是它知道的命令:它没有定义。误输入是最常见的错误来源。一些编辑器允许使用下拉菜单或图标插入常见的命令和环境,这可以用来避免这些错误。
! Missing $ inserted
在普通文本中插入了只能在数学模式下使用的字符。如果您打算使用数学模式,请使用$...$ 或\begin{math}...\end{math}或使用“快速数学模式”\ensuremath{...}. 如果您不打算使用数学模式,那么您可能正在尝试使用需要以不同方式输入的特殊字符;例如_在数学模式下将被解释为下标运算符,您需要\_来获得下划线字符。
从 2018 年[1] 开始,所有 TeX 引擎都支持 UTF-8 编码。在旧版本中,如果您使用错误的字符编码,也会发生这种情况,例如在没有“\usepackage[utf8]{inputenc}”的情况下使用 UTF-8,或在没有“\usepackage[latin1]{inputenc}”的情况下使用 iso8859-1。
Runaway argument? {December 2004 \maketitle ! Paragraph ended before \date was complete. <to be read again> \par l.8
在这个错误中,日期的结束花括号被省略了。这与 } 过多的错误相反,它会导致\maketitle尝试格式化标题页,而 LaTeX 仍在等待日期的更多文本!由于 \maketitle 在标题页上创建新段落,因此会检测到这一点,LaTeX 会抱怨上一个段落已结束,但 \date 尚未完成。
Underfull \hbox (badness 1394) in paragraph at lines 28--30 [][]\LY1/brm/b/n/10 Bull, RJ: \LY1/brm/m/n/10 Ac-count-ing in Busi- [94]
这是一个警告,LaTeX 无法将行拉伸到足够宽以容纳,而不会使间距大于其当前允许的最大值。糟糕程度(0-10,000)表示问题的严重程度(在这里,您可以忽略 1394 的糟糕程度)。它说明了在发现此问题时正在排版文件的哪些行,方括号中的数字是打印有问题的行的页码。由斜杠分隔的代码是行中使用的字体和字体的样式和大小。暂时忽略它们。
如果您强制换行,例如 \\,并在其之前有回车符,则会出现这种情况。通常,TeX 会忽略换行符,为参差不齐的文本提供完整的段落。在这种情况下,有必要将换行符向上拉一行到上一句的末尾。
插入图像时,也可能会出现此警告。可以通过使用 \textwidth 或可能的 \linewidth 选项来避免,例如 \includegraphics[width=\textwidth]{image_name}
[101] Overfull \hbox (9.11617pt too wide) in paragraph at lines 860--861 []\LY1/brm/m/n/10 Windows, \LY1/brm/m/it/10 see \LY1/brm/m/n/10 X Win-
一个溢出的 \hbox 表示存在断字或对齐问题:将行上的最后一个单词移到下一行会使行中的间距比当前限制更宽;将单词保留在行上会使间距小于当前限制,因此单词保留在行上,但单词之间的间距为最小允许值,这使得行超过边缘。
发出警告是为了让您找到源于问题的代码行(在本例中:860-861)并修复它。此示例中的行长了 9pt 多一点。在行末显示了最小化错误的断字点 (Win-)。行号和页码与以前一样给出。在本例中,9pt 太多而无法忽略(超过 3mm),需要进行手动校正(例如更改断字),或者需要更改灵活性设置。
如果“溢出”一词包含正斜杠,例如“input/output
”,则应将其正确排版为“input\slash output
”。使用 \slash
的效果与使用“/
”字符相同,只是它可以构成一行的结尾(后续单词出现在下一行的开头)。“/
”字符通常用于单位,例如“mm/year
”字符,不应在多行中换行。
当未包含或删除 \end{document} 标签时,也可能会发出警告。
要轻松找到文档中溢出 hbox 的位置,您可以让 latex 在行过宽的地方添加一条黑线
\overfullrule=2cm
|
! LaTeX Error: File `paralisy.sty' not found. Type X to quit or <RETURN> to proceed, or enter new name. (Default extension: sty) Enter file name:
当您使用\usepackage命令请求 LaTeX 使用某个包时,它将查找具有指定名称和文件类型的文件.sty. 在这种情况下,用户误输入了 paralist 包的名称,因此很容易修复。但是,如果您输入了正确的名称,但该包未安装在您的机器上,则需要下载并安装它才能继续。如果您不想影响机器的全局安装,您可以从互联网下载必要的.sty文件并将其放在您要编译的文档的同一个文件夹中。
虽然这是来自 Babel 包而不是 LaTeX 的警告,但此错误非常常见,并且会给您的文档带来一些奇怪的断字(词语断开)问题。错误的断字规则会降低文档的整洁度。
Package babel Warning: No hyphenation patterns were loaded for (babel) the language `Latin' (babel) I will use the patterns loaded for \language=0 instead.
这可能发生在使用以下内容之后:(参见 LaTeX/国际化)
\usepackage[latin]{babel}
解决方案并不难,只需在您的 LaTeX 发行版 中安装所使用的语言。
如果您之前设置了 X 语言,然后决定切换到 Y,您将收到此错误。这可能看起来很奇怪,因为如果您没有更改任何内容,您的代码中显然没有错误。答案在于.aux文件,babel 在其中定义了您的语言。如果您再次尝试编译,它应该可以工作。如果不是,请删除.aux文件,然后一切将按预期工作。
一位读者要求扩展本节以包括更多内容。 您可以通过添加新内容(了解如何)或在阅览室中寻求帮助。 |
(pdf)LaTeX 卡住的一个常见原因是忘记包含 \end{document}
有几个程序可以检查 LaTeX 源代码,目的是查找错误或突出显示不良实践,并为(尤其是新手)用户提供比内置错误消息更多的帮助。
- nag (www.ctan.org/tex-archive/macros/latex/contrib/nag) 是一个 LaTeX 包,旨在指示使用过时的命令。
- lacheck (www.ctan.org/tex-archive/support/lacheck) 是一个一致性检查器,旨在发现代码中的错误。它以源代码的形式提供,也可以编译为 Windows 和 OS/2 版本。
- chktex (baruch.ev-en.org/proj/chktex/) 是一个 LaTeX 语义检查器,以源代码形式提供,适用于类 Unix 系统。
- ↑ LaTeX 新闻 2018 (检索于 2024 年 3 月 23 日)