前言

今天,给Overleaf换格式的时候,突然发现全部的代码都出现了,Undefined control sequence的问题,排查了一遍,发现原来是自己定义的command 没有一起导入到新的latex文件里面,于是乎记录一下。

【新的更新 - 2025年3月1日】
今天是2025年3月1日,好久没有写博客了,已经不太记得当初的问题究竟是什么,发现是2024年11月16日写的草稿,估计那个时候在写SBOM的paper。

正文

1. 问题

由于是太久之前的问题了,我就直接从overleaf上面找答案了《Undefined control sequence》

2. 原因

2.1 Package错字了(Typo in a command)

导致此类错误的最常见原因是简单的拼写错误。下面显示了此类拼写错误的一个示例,

您在输入 \alpha 时不小心按了 Z 而不是 a:输入 $\alpha$ 时可能出现拼写错误,即 $\Zlpha$。这将给出错误消息:

4bdb2f2c1942abfe33ec6e611a63ba3

这些错误很容易被人类发现,但可能会导致 LaTeX 对所询问的内容感到困惑。

2.2 忘记导入Package了(Forgetting to load a package)

导致此类错误的另一个原因是,需要使用特定包来使用某个命令,但在前言中却意外忘记了它。例如,

我想在单词 \LaTeX\xspace 后添加一个空格,但我忘记加载 xspace 包。
在此示例中,文档将无法编译,因为 LaTeX 无法识别 \xspace 命令。这不是拼写错误,因为 \xspace 是一个完全没问题的命令。问题是您忘记在前言中包含 \usepackage{xspace}。当包含此行时,错误消息将消失,因为 LaTeX 现在知道如何解释 \xspace 命令。

2.3 反斜杠在一个错误的地方(Backslash used in wrong place)

导致未定义控制序列错误的另一个原因是反斜杠使用不当。这种情况尤其可能发生在编写文件链接时,如下所示。

如果您将文件路径写为:C:\Users\Files,则会产生错误。

问题是,当 LaTeX 看到反斜杠 \ 时,它会将后面的内容解释为命令。这里没有 \Users 这样的命令,因此您将收到未定义控制序列错误。为避免这种情况,在编写文本时,您应该将反斜杠写为 \backslash。对于编写长文件路径和 URL,有时使用 url 包可能比每次都写 \backslash 更方便。

总结

这么看起来,情况比较多发生的还是 Package的名字打错了,和忘记导入一个package了。反斜杠的问题,一般还是比较少从本地引入包的,如果引入的话,还是用url的比较好。

参考

[1] Undefined control sequence

Q.E.D.


立志做一个有趣的碳水化合物