LaTeX/錯誤和警告
LaTeX 在排版時描述了它正在做什麼。如果它遇到無法理解或無法執行的內容,它將顯示一條訊息,說明問題所在。它還可能顯示一些較不嚴重情況的警告。
看到錯誤資訊不要驚慌:在命令中輸入錯誤或拼寫錯誤、忘記花括號、輸入正斜槓而不是反斜槓或意外使用特殊字元非常常見。錯誤很容易在編輯器中發現並糾正,然後您可以再次執行 LaTeX 來檢查是否已修復所有錯誤。下一節介紹了一些最常見的錯誤。
錯誤資訊格式始終相同。錯誤資訊以行首的感嘆號開頭,並給出錯誤的描述,後面緊跟著以數字開頭的另一行,該數字指的是 LaTeX 在發現錯誤時正在處理的文件檔案中的行號。以下是一個示例,表明使用者誤輸入了\tableofcontents命令
! Undefined control sequence. l.6 \tableofcotnetns
當 LaTeX 發現類似這樣的錯誤時,它會顯示錯誤資訊並暫停。您必須鍵入以下字母之一才能繼續
| 鍵 | 意義 |
|---|---|
| x | 立即停止並x退出程式。 |
| q | 儘可能quickly繼續執行,不要再給我顯示任何錯誤資訊。 |
| e | 停止程式,但在我的editor 中將文字重新定位到您發現錯誤的位置(這僅在您使用 LaTeX 可以與之通訊的編輯器時才有效)。 |
| h | 嘗試給我提供更多help。 |
| i | (後跟更正)表示將input 更正替換為錯誤並繼續執行(這只是為了處理檔案而進行的臨時修復。您仍然需要在編輯器中進行該更正)。 |
| r | 以不停模式run。遇到任何錯誤都繼續執行,除非積累了太多錯誤導致失敗(100 個錯誤)。 |
某些系統(例如 Emacs)以開啟的“不停”開關執行 LaTeX,因此它將始終處理到檔案結尾,無論是否出現錯誤,或者直到達到限制為止。
警告不會以感嘆號開頭:它們只是 LaTeX 關於您可能需要檢視的事情的評論,例如過長或不足的行(通常由不尋常的連字元化引起,例如)、頁面過短或過長,以及其他印刷細節(您大多數情況下可以忽略,直到以後再處理)。與嘗試透過干預字母間距來隱藏文字中不均勻性的其他系統不同(通常收效甚微),LaTeX 認為作者或編輯應該能夠做出貢獻。雖然當然可以設定 LaTeX 的引數,使其間距足夠鬆散,以至於您幾乎永遠不會收到關於不合適的行或頁面的警告,但您幾乎肯定只是將問題推遲到開始收到讀者或出版商的投訴時。
這裡只給出一些常見的錯誤資訊:初學者最有可能遇到的錯誤資訊。如果您發現這裡沒有顯示的另一個錯誤資訊,並且不清楚應該怎麼做,請尋求幫助。
大多數錯誤資訊是不言自明的,但請注意,LaTeX 發現並報告錯誤的位置可能比實際發生錯誤的位置要晚。例如,如果您忘記關閉括起斜體的花括號,例如,LaTeX 不會在遇到其他無法發生的事情之前報告此錯誤(例如,文件的結尾!)。有些錯誤只能由能夠閱讀和理解文件應該意味著什麼或應該是什麼樣子的人類來糾正。
新手應該記住檢查特殊字元列表:在您學習 LaTeX 時,很多錯誤都是由於意外輸入了您不想輸入的特殊字元造成的。在您習慣了這些字元之後,這種情況就會在幾天內消失。
! Too many }'s. l.6 \date December 2004}
LaTeX 認為這裡有太多'}'的原因是,在\date控制序列和單詞 December 之前缺少左花括號,因此右花括號被視為多餘的(確實如此!)。實際上,除了花括號中的日期之外,還可以有其他內容跟隨\date命令,因此在找到右花括號之前,LaTeX 無法猜測您遺漏了左花括號!
! Undefined control sequence.
l.6 \dtae
{December 2004}
在本例中,LaTeX 抱怨它沒有名為\dtae. 顯然,它是被誤輸入的,但只有人類才能發現這個事實:LaTeX 只知道\dtae不是它知道的命令:它沒有定義。誤輸入是最常見的錯誤來源。一些編輯器允許使用下拉選單或圖示插入常見的命令和環境,這可以用來避免這些錯誤。
! Missing $ inserted
在普通文字中插入了只能在數學模式下使用的字元。如果您打算使用數學模式,請使用$...$ 或\begin{math}...\end{math}或使用“快速數學模式”\ensuremath{...}. 如果您不打算使用數學模式,那麼您可能正在嘗試使用需要以不同方式輸入的特殊字元;例如_在數學模式下將被解釋為下標運算子,您需要\_來獲得下劃線字元。
從 2018 年[1] 開始,所有 TeX 引擎都支援 UTF-8 編碼。在舊版本中,如果您使用錯誤的字元編碼,也會發生這種情況,例如在沒有“\usepackage[utf8]{inputenc}”的情況下使用 UTF-8,或在沒有“\usepackage[latin1]{inputenc}”的情況下使用 iso8859-1。
Runaway argument?
{December 2004 \maketitle
! Paragraph ended before \date was complete.
<to be read again>
\par
l.8
在這個錯誤中,日期的結束花括號被省略了。這與 } 過多的錯誤相反,它會導致\maketitle嘗試格式化標題頁,而 LaTeX 仍在等待日期的更多文字!由於 \maketitle 在標題頁上建立新段落,因此會檢測到這一點,LaTeX 會抱怨上一個段落已結束,但 \date 尚未完成。
Underfull \hbox (badness 1394) in paragraph at lines 28--30 [][]\LY1/brm/b/n/10 Bull, RJ: \LY1/brm/m/n/10 Ac-count-ing in Busi- [94]
這是一個警告,LaTeX 無法將行拉伸到足夠寬以容納,而不會使間距大於其當前允許的最大值。糟糕程度(0-10,000)表示問題的嚴重程度(在這裡,您可以忽略 1394 的糟糕程度)。它說明了在發現此問題時正在排版檔案的哪些行,方括號中的數字是列印有問題的行的頁碼。由斜槓分隔的程式碼是行中使用的字型和字型的樣式和大小。暫時忽略它們。
如果您強制換行,例如 \\,並在其之前有回車符,則會出現這種情況。通常,TeX 會忽略換行符,為參差不齊的文字提供完整的段落。在這種情況下,有必要將換行符向上拉一行到上一句的末尾。
插入影像時,也可能會出現此警告。可以透過使用 \textwidth 或可能的 \linewidth 選項來避免,例如 \includegraphics[width=\textwidth]{image_name}
[101] Overfull \hbox (9.11617pt too wide) in paragraph at lines 860--861 []\LY1/brm/m/n/10 Windows, \LY1/brm/m/it/10 see \LY1/brm/m/n/10 X Win-
一個溢位的 \hbox 表示存在斷字或對齊問題:將行上的最後一個單詞移到下一行會使行中的間距比當前限制更寬;將單詞保留在行上會使間距小於當前限制,因此單詞保留在行上,但單詞之間的間距為最小允許值,這使得行超過邊緣。
發出警告是為了讓您找到源於問題的程式碼行(在本例中:860-861)並修復它。此示例中的行長了 9pt 多一點。在行末顯示了最小化錯誤的斷字點 (Win-)。行號和頁碼與以前一樣給出。在本例中,9pt 太多而無法忽略(超過 3mm),需要進行手動校正(例如更改斷字),或者需要更改靈活性設定。
如果“溢位”一詞包含正斜槓,例如“input/output”,則應將其正確排版為“input\slash output”。使用 \slash 的效果與使用“/”字元相同,只是它可以構成一行的結尾(後續單詞出現在下一行的開頭)。“/”字元通常用於單位,例如“mm/year”字元,不應在多行中換行。
當未包含或刪除 \end{document} 標籤時,也可能會發出警告。
要輕鬆找到文件中溢位 hbox 的位置,您可以讓 latex 在行過寬的地方新增一條黑線
\overfullrule=2cm
|
! LaTeX Error: File `paralisy.sty' not found. Type X to quit or <RETURN> to proceed, or enter new name. (Default extension: sty) Enter file name:
當您使用\usepackage命令請求 LaTeX 使用某個包時,它將查詢具有指定名稱和檔案型別的檔案.sty. 在這種情況下,使用者誤輸入了 paralist 包的名稱,因此很容易修復。但是,如果您輸入了正確的名稱,但該包未安裝在您的機器上,則需要下載並安裝它才能繼續。如果您不想影響機器的全域性安裝,您可以從網際網路下載必要的.sty檔案並將其放在您要編譯的文件的同一個資料夾中。
雖然這是來自 Babel 包而不是 LaTeX 的警告,但此錯誤非常常見,並且會給您的文件帶來一些奇怪的斷字(詞語斷開)問題。錯誤的斷字規則會降低文件的整潔度。
Package babel Warning: No hyphenation patterns were loaded for (babel) the language `Latin' (babel) I will use the patterns loaded for \language=0 instead.
這可能發生在使用以下內容之後:(參見 LaTeX/國際化)
\usepackage[latin]{babel}
解決方案並不難,只需在您的 LaTeX 發行版 中安裝所使用的語言。
如果您之前設定了 X 語言,然後決定切換到 Y,您將收到此錯誤。這可能看起來很奇怪,因為如果您沒有更改任何內容,您的程式碼中顯然沒有錯誤。答案在於.aux檔案,babel 在其中定義了您的語言。如果您再次嘗試編譯,它應該可以工作。如果不是,請刪除.aux檔案,然後一切將按預期工作。
| 一位讀者要求擴充套件本節以包括更多內容。 您可以透過新增新內容(瞭解如何)或在閱覽室中尋求幫助。 |
(pdf)LaTeX 卡住的一個常見原因是忘記包含 \end{document}
有幾個程式可以檢查 LaTeX 原始碼,目的是查詢錯誤或突出顯示不良實踐,併為(尤其是新手)使用者提供比內建錯誤訊息更多的幫助。
- nag (www.ctan.org/tex-archive/macros/latex/contrib/nag) 是一個 LaTeX 包,旨在指示使用過時的命令。
- lacheck (www.ctan.org/tex-archive/support/lacheck) 是一個一致性檢查器,旨在發現程式碼中的錯誤。它以原始碼的形式提供,也可以編譯為 Windows 和 OS/2 版本。
- chktex (baruch.ev-en.org/proj/chktex/) 是一個 LaTeX 語義檢查器,以原始碼形式提供,適用於類 Unix 系統。
- ↑ LaTeX 新聞 2018 (檢索於 2024 年 3 月 23 日)
