未定義的控制序列
未知的命令名稱:拼字錯誤、缺少軟體包、錯誤的引擎。
未定義的控制序列
症狀
編譯以`!未定義的控制序列。然後,日誌顯示發生該情況的行,分為兩部分:TeX 已讀取的所有內容(包括一行上的有問題的命令)以及其下方原始程式碼行的其餘部分。上面一行的最後一個標記是 TeX 無法辨識的指令,這使得這是更容易精確定位的錯誤之一。
為什麼會發生
控制序列是以反斜線開頭的任何內容。 TeX 沒有固定的詞彙表:命令的存在只是因為核心、文檔類別、套件或您自己的 \newcommand 定義了它們。當 TeX 讀取反斜線後跟一個未定義的名稱時,它無法猜測您的意思並停止。一般來說,錯誤絕不是命令“錯誤”。目前,在該引擎下,該名稱在本文檔中是未知的。
透過三項檢查修復它
首先檢查拼字。在大多數情況下,用“\texbf”代替“\textbf”,用“\lable”代替“\label”,或用雜散空格將名稱分成兩個帳戶。日誌的行號可以直接引導您找到拼字錯誤。
如果拼字正確,定義包可能會遺失。如果沒有“\usepackage{graphicx}”,“\includegraphics”什麼也不做,“\toprule”需要“booktabs”,“\SI”需要“siunitx”。當您從另一個文件或模型的答案中複製片段時,這種情況最為嚴重:正文出現了,而序言行卻沒有。在每個指令解釋 中找到哪個套件定義了指令,加入 \usepackage 行,然後重新編譯。如果軟體包本身未安裝,請參閱安裝缺少的軟體包。
如果載入套件後錯誤仍然存在,請懷疑引擎。有些指令僅存在於特定引擎下:\fontspec 及其相關指令需要 XeLaTeX 或 LuaLaTeX,並且會在 pdfLaTeX 下死亡並出現此錯誤。在其文件中指定引擎的範本通常出於這個原因這樣做。 此項目使用哪個引擎 解釋了差異。
兩個值得了解的怪癖
順序很重要:在定義它的 \usepackage 行之前使用的命令此時仍然未定義,因此將套件載入保留在序言中,位於 \begin{document} 上方。而一個錯誤常常隱藏著另一個錯誤,因為 TeX 恢復後它可能會誤讀接下來的所有內容。修復日誌中第一個未定義的控制序列,重新編譯,然後查看剩餘的內容。