课程 十五

处理错误

本课展示了 LaTeX 文档中的一些常见错误,它们的含义,以及如何解决它们。

与典型的文字处理系统不同,LaTeX 有一个类似于编程语言编译器的编辑/运行/查看循环,就像在编程中一样,用户可能会在输入中出错,因此需要处理系统报告的错误信息。

常见错误

本页给出了几个常见错误的示例。每个错误示例都有一些关于错误信息形式的讨论。

尝试这些示例可能会有所启发,同时也可以使用编辑功能来尝试修复文档并测试你是否能够解决这些错误。

找不到pdflatex

人们在开始时看到的一个常见错误,在 Windows 操作系统中,可能是:

'pdflatex' is not recognized as an internal or external command,
operable program or batch file.

而在Linux系统中,则可能是:

bash: pdflatex: command not found

这不是 TeX 错误,而是操作系统错误,说明TeX没有安装或找不到。一个常见的错误是安装了一个 编辑器,如 TeXworks 或 TeXShop,但没有安装 TeX 系统,如 TeX Live 或 MiKTeX。

TeX错误信息的剖析

% !TEX program=lualatex

\documentclass{ctexart}
\newcommand\mycommand{\textbold{hmmm}}

\begin{document}

这里使用自定义命令 \mycommand。

\end{document}

这会在日志文件中产生一个多行消息。

! Undefined control sequence.
\mycommand ->\textbold 
                       {hmmm}
l.8 这里使用自定义命令 \mycommand
                                  .
? 

注意,TeX 并不在定义被创建的点看到错误;事实上,如果\mycommand被定义但未使用,就不会报错。所以虽然错误在第8行被报告,但”真正的”错误在第4行的定义中,因此看到完整的错误消息很重要。

要注意,一些编辑器显示错误日志的一行”摘要”。这可能特别具有误导性,如果显示为

行 8: 未定义的命令: ...\mycommand

因为它使得看起来像是\mycommand未定义。

不匹配的花括号

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage[leqno}{amsmath}

\begin{document}

\end{document}

这里的错误是一个用于结束可选参数的不匹配的}。结束花括号导致 LaTeX 的选项解析失败,你得到一个内部的且不太有帮助的错误:

! \@fileswith@ptions 参数包含额外的 }.

虽然错误描述不太有帮助,但接下来的两行通过使用换行准确地显示了错误的位置:

l.4 \usepackage[leqno}
                      {amsmath}

缺失文件

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage{amsmathz}

\begin{document}

\end{document}

这会产生错误

! LaTeX 错误: 文件 `amsmathz.sty' 未找到.

注意:同样的错误可能由两种不同的原因引起;这里是一个简单的拼写错误,可以通过修正宏包名称来纠正,或者文件确实缺失,需要在当前系统上安装。

显示数学中的空行

% !TEX program=lualatex

\documentclass{ctexart}
\begin{document}

一些文本
\begin{equation}

  1=2

\end{equation}

\end{document}

产生了一个有点神秘的错误

! 插入未知 $ .

但修复很简单,数学环境中的空行是不允许的,应该删除。

练习

尝试修复提供的示例中的错误。

生成包含不同错误的文档,并注意错误信息的形式。