前言
在LaTeX中, 常常会出现很多意想不到的错误, 我一开始学习的时候, 就常常被这种看似玄学的错误整的焦头烂额, 常常是打开一堆CSDN界面各处翻找而没有一个合适的解决方案.
之后在不断的使用和摸索中, 我对于 LaTeX 的报错等问题逐渐有了自己的分析解决方法, 在查找新出现的问题时候也已经转向了TeX - LaTeX Stack Exchange了. 下面我总结一下我自己认为好用的debug方法, 希望能帮到正在使用LaTeX的你.
P.S. 方法论有了, 还是需要自己实践, 针对具体问题进行分析解决才能有所提升.
方法
清理辅助文件
对于一些已经修改的没有问题的文档, 如果在编译时还是会出现报错, 那么你可能需要清理一下辅助文件, 一般来说需要清理的文件只有.aux
, 对于文献中的错误可能需要清理.bbl
文件, 对于目录生成上的错误可能要清理.toc
文件, 其他的有beamer中经常用到的导航: .nav
文件, 定理生成的.thm
文件, 代码环境中的.pyg
,.vrb
文件等.
不过一般的智能编辑器中都有清理辅助文件的快捷键(例如我用的Sublime的LaTeXTools插件,就是用Command+L Backspace进行清理, 你也可以自己编写脚本一键清理).
总之, 如果你实在想不到问题出在哪, 没准清理辅助文件这个方法能救你于水火..
注释法
对于一个长而复杂的.tex
文档, 我们常常会遇到一些奇奇怪怪的错误, 比如之前我常常遇到的就是missing $insert
, 这样的错误常常是一些特殊字符导致的.
例如, 在正文文档中出现了一个_
, 却没有加上\
转义. 这样的错误在TeX引擎编译之后常常不会精确定位到错误出现的行, 所以我们就需要采取退而求其次的方法, 注释掉报错行附近的段落. 直到没有编译错误, 就能在注释掉的行中查找错误了. 将报错控制在较小的范围内, 再处理起报错就显得容易很多了.
修改编码
如果报错中有很多乱码, 那么肯定存在由 GBK 或者 GB2312 到 utf8 或者 ANSI 编码的不完整转换了, 这就需要记事本+另存为大法了
具体操作为:
用记事本打开乱码文件, 另存为新的 tex 文件, 并将编码设置 为 utf8, 这样就好了. 不过前提是记事本打开的时候文件中没有乱码, 如果记事本不能正确打开可以试试 vscode 或者 sublime 了.
其他常见问题
-
字体未找到问题
这个问题主要出现在macOS上, 一般常见的模板主要在Windows平台上进行, 但是在模板的制作中作者可能没有考虑到字体的标识符问题, 于是对macOS用户来说, 像隶书, 雅黑等字体就需要额外安装了.
或者说, tex 中的字体的名称并不是系统下真正的字体名称, 这也会导致错误, 关于这个问题, 大家可以看我之前的文章, 在 Windows 和 MacOS 下都给出了解决方案.
-
找不到 \begin{document}
这个问题其实是细节照顾不到导致的, 需要仔细检查一下
\begin{document}
附近有没有多余的字符, 有的话赶紧删掉, 要不然编译错误根本无法理解… -
未定义的控制序列
这个问题可能需要你导入一些需要的包, 或者打错了一些常用的宏命令, 都会出现这个问题.
遇到这个问题, 其实是比较宽泛了, 需要具体问题具体分析, 多注意一下报错所在行上面的几行中是不是有不熟悉的命令.
-
ccmap 以及 cchead 等的一系列问题
这个问题可以说是由来已久, 或者说是一个历史遗留问题了, 只有用过 ctex 或者旧版的中文期刊模板才可能会有这个问题, 不要慌, 先把文档类改成新式的 ctex 即可:
例如:
ccbook
->ctexbook
其他同理. 然后注释掉文档类中所有的 CJK 包, 如果需要的话, 还是加上
ctex
包(此 ctex 非彼 ctex 了), 这是作为宏包支持的.
小结
本文相当于是一个引子, 并没有全面介绍LaTeX的报错以及解决(这个是LaTeX文档的事), 遇到这些问题时, 一开始的办法当然是在网上胡乱搜索一通, 但是,如果你能冷静下来分析报错的原因, 也许你会有更大的收获.
关于其他详细的内容, 可以参考刘海洋老师的LaTeX入门, 这也是我一直在反复查看的一本书, 确实能在使用LaTeX的过程中给予我非常大的帮助(99%的问题都能从书中得到解决方案).