前言
今天,给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$
。这将给出错误消息:
这些错误很容易被人类发现,但可能会导致 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.