> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/zh-tw/zhi-shi-ku/066-how-to-find-and-fix-errors-reported-in-generated-files.md).

# 如何找出並修正產生檔案中回報的錯誤

## 簡介

有時 Overleaf 會回報源自名稱如以下的檔案所產生的錯誤： `output.toc`, `output.bbl`，等等，但那些檔案 *在你的專案中甚至不存在*。那麼這些檔案究竟 *從哪裡來* 而且更重要的是，你要如何 *找出* 以及 *修正* 這些錯誤？

> ![Gen-toc-error.png](/files/7fadebb175c41286c658f6c980ff6fc63cae1bef) 「可是我甚至沒有 **有** 這個 `output.toc` 檔案在我的專案裡！」

這些「神祕檔案」其實是衍生物：也就是在 LaTeX 編譯過程中產生的輔助檔案，但它們也可能引發錯誤，而這些錯誤通常源自你專案原始檔中的程式碼問題。本說明文章使用一個 [真實且錯誤百出的範例](#playing-detective-locating-errors-in-generated-files) 來示範如何把這類錯誤追查到你專案原始檔中的源頭。

## LaTeX 編譯過程中產生的檔案

除了輸出 `.pdf` 檔案之外，LaTeX 編譯過程還會產生數種檔案類型，其中包含標籤、交互參照、頁碼等資訊。有些輔助檔案類型並非直接由 LaTeX 編譯器建立，而是由排版時使用的其他處理工具建立：例如格式化後的參考文獻列表與索引。這些產生的檔案必須在後續執行時由編譯器讀取，才能讓最終的 `.pdf` 檔案填入正確的清單、引文與交互參照。

由於 LaTeX 及其相關處理工具需要讀寫輔助資料檔案，因此在整個檔案資料集收斂（穩定）之前，可能需要多個編譯／處理步驟，才能產生最終排版（穩定的） `.pdf` 檔案。一個典型的排版循環可能如下：

`pdflatex`$$\mapsto$$`bibtex`$$\mapsto$$`pdflatex`$$\mapsto$$`pdflatex`

在本機的 LaTeX 安裝中，你可能需要自行執行每個中間步驟，或者使用像 [make](https://www.gnu.org/software/make/manual/), [latexmk](https://ctan.org/pkg/latexmk) 或 [arara](https://ctan.org/pkg/arara)這類建置工具來自動化這串處理流程。 [Overleaf 使用 latexmk](/latex/zh-tw/zhi-shi-ku/064-how-does-overleaf-compile-my-project.md)，而這段影片會展示你在 Overleaf 專案中每次點擊「重新編譯」按鈕時會發生什麼。

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/Uo3I2FXEI8H6aFPBZq171/e2139f9575a4db6955dc2278dc08283c/latexmk-ol.mp4>" %}

通常，產生的檔案會和 `.tex` 正在編譯的檔案具有相同檔名；例如，如果你正在編譯 `**main**.tex`，產生的檔案會命名為 `**main**.aux`, `**main**.toc`, `**main**.lof` 等等。不過， *在 Overleaf 中* 編譯 `\jobname` 一律設定為 `**output**`，因此 [產生的檔案](/latex/zh-tw/zhi-shi-ku/150-view-generated-files.md) 在你的 Overleaf 專案中總是命名為 `**output**.aux`, `**output**.toc`, `**output**.lof` 等等。這些產生的檔案可以從你的 Overleaf 專案下載，但無法在 Overleaf 上檢視或編輯。

## 從產生的檔案回報的編譯錯誤

主專案中的程式碼錯誤 `.tex` 檔案中的錯誤可能會被帶到產生的檔案中。例如，未跳脫的 `&` 在 `\section{Introduction & Background}` 會一路進入產生的 `.toc` 檔案中。當產生的 `.toc` 檔案接著被下一次 `pdflatex` 編譯執行讀入時，就會出現「來自 .toc 檔案」的錯誤訊息。然而，目前的 LaTeX 記錄與錯誤回報並不會把 `.toc` 檔案（以及其他產生的檔案）中的行與其在原始 `.tex` 檔案中的來源位置連結起來：因此原始錯誤該在哪裡修正，可能不會立刻明顯。

以下是在另一個 LaTeX 編輯器中錯誤顯示方式的範例：雖然你可以點擊錯誤訊息來開啟產生的 `.toc` 或 `.aux` 檔案中的相關行，但沒有一條路徑可以從錯誤追溯到 `.tex` 檔案中的來源位置。而且即使你透過將 `&` 替換成 `\&` 在 `.toc` 檔案中，即使這樣也不是真正解決問題：下次你編譯 `.tex` 檔案時， `.toc` 檔案會重新產生，而相同的錯誤也會再次寫入 `.toc` 檔案中。

![Texstudio-errors-generated-files.gif](/files/5fa027765174afd249ccab472f0466d5fedf6d63)

當錯誤被回報為來自產生的檔案時，正確的解法是先在原始檔中找出真正的源頭錯誤，並加以修正。錯誤訊息通常會包含上下文資訊，也就是錯誤周圍的一些文字或程式碼，因此在原始檔中做文字搜尋會有助於定位它們。這些錯誤本身常常很常見：你可以在 [這個說明頁面](/latex/zh-tw/latex-ji-chu/05-errors.md)，或在 [TeX 常見問題列表](https://texfaq.org/#errors).

## 首先，試著清除產生的檔案

有時，產生的檔案中的錯誤只是前一次編譯留下的殘留。即使你已經修正了你 `.tex` 的檔案並重新編譯，仍含有錯誤的產生檔案也可能仍被編譯器讀取，導致出現與之前相同的錯誤。你可以在重新編譯前嘗試刪除產生的檔案。關於如何在 Overleaf 執行此操作的說明可見於 [這裡](/latex/zh-tw/zhi-shi-ku/028-clearing-the-cache.md).

如果你在刪除所有產生的檔案並重新編譯後仍看到相同錯誤，那很可能是你的原始檔中真的有錯誤。

## 扮演偵探：定位產生檔案中的錯誤

以下各節會提供一些尋找這類錯誤的建議。我們將使用下面這個 *刻意充滿錯誤的* 範例專案來練習追查。準備好了嗎？開始吧！

[開啟一個 *充滿錯誤的* Overleaf 專案！](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Demo+of+LaTeX+compile+errors+reported+from+generated+files\&main_document=main.tex\&snip_uri=https%3A%2F%2Fassets.ctfassets.net%2Fnrgyaltdicpt%2F5qdEqgUidaYDHjOlBoKM7K%2F55395921a114edb36ed3d51d7b1c6edb%2Fdemoerrors.zip) 這個專案看起來應該像這樣 😲：

![顯示 LaTeX 專案錯誤的圖片](/files/1a0b667485613c69b7e58db621649f4737e1324f)

### .aux 檔案中的錯誤

該 `.aux` 檔案包含有關使用 `\label{...}` 宣告與 `\cite{...}` 在 `.tex` 檔案的資訊，因此這些都是值得檢查的項目。

讓我們看看這個充滿錯誤的範例專案中的第一個錯誤。

![由於 \label 宣告錯誤而導致的 .aux 檔案範例錯誤](/files/7408770c0da7d95ee651be735f392a792337c60e)

這個錯誤 `插入了缺少的 \endcsname。` 在一個 `\alpha` 乍看之下可能相當晦澀，對我們除錯似乎也沒那麼有幫助。但從錯誤訊息的文字（上下文）可看出，它發生在某段包含 `sec:\alpha`的程式碼附近，而那段程式碼與某個標號或編號 1.1 的計數器有關。因此，我們可能要仔細查看任何 `\label{...}` 在我們的 `.tex` 檔案中包含片段 `sec:\alpha`.

你很快就會找到我們範例專案中的第 37 行：

```latex
\label{sec:\alpha}
```

傳遞給 `\label{...}` 的參數不應包含任何 LaTeX 指令或控制序列，例如 `\alpha`。 `\label{sec:alpha}`，以及任何對應的 `\ref{...}`，即可消除此錯誤。

這裡還有另一個來自 `.aux` 檔案的錯誤，在我們的範例專案中：

![由於 \cite{...} 鍵中有空格而導致的 .aux 檔案範例錯誤](/files/ac03d65762cb919cd7d1dc0ac6e63cac5dc06a98)

這次編譯器抱怨 `\citation`中有一個空白；其中的鍵以「That」開頭。因此我們會想搜尋 `\cite{That ...}` 在我們的 `.tex` 檔案……而且我們在第 23 行找到了：

```latex
... justo \cite{That mandatory talk} eget magna ...
```

引用鍵不應包含空白字元，因此這個 `\cite{...}`，以及 `.bib` 檔案中對應的 BIBTeX 鍵中的空白都應移除。

### .toc 檔案中的錯誤

該 `.toc` 檔案包含 `\tableofcontents`的項目。這些項目來自 LaTeX 文件中的章節標題，例如 `\chapter{...}`, `\section{...}`等等。因此，如果你看到來自 `.toc` 檔案的錯誤，檢查那些包含錯誤訊息中提到文字的章節標題會很有幫助。

![由於 \section{...} 中未跳脫的 & 而導致的 .toc 檔案範例錯誤](/files/5490a8f35bfc70f8b2747929f271c005b7fdc2c6)

這看起來像是一個會編號為「1」的章節標題，並包含文字 `簡介與歡迎`。在 `.tex` 檔案中快速搜尋即可找到第 12 行：

```latex
\section{Introduction & Welcome}
```

該 `&` 在這裡沒有跳脫，因此我們需要把它改成 `\&` 在 `.tex` 檔案中。

另一個類似的例子：

![由於 \section{...} 鍵中的數學指令未處於數學模式而導致的 .toc 檔案範例錯誤](/files/3e7912adc440b8b23a2ae9e3337517918237f27c)

同樣地，我們會直覺去找一個會編號為「1.1」的章節標題，而且很可能包含 `設定 \alpha`。我們的直覺果然是對的，在 `.tex` 檔案：

```latex
\subsection{Setting \alpha}
```

`\alpha` 是一個數學指令，但我們忘了在這裡把它放進數學模式，因此需要將其改為

```latex
\subsection{Setting $\alpha$}
```

或

```latex
\subsection{Setting \(\alpha\)}
```

有時錯誤會出現在 `.toc` 檔案中，原因是用來設定目錄項目樣式的程式碼有錯：

![由於設定目錄（ToC）項目樣式時程式碼不當而導致的 .toc 檔案範例錯誤](/files/7cf21e1241dbc5f141b902b8cdd99eb3332c6cf7)

這裡，使用 `\itshae` 搜尋會帶我們找到範例中第 5 行的一個拼字錯誤 `.tex`：它應該是 `\itshape` 才對。在這種情況下，錯誤可以定位在我們的 `.tex` 檔案導言區，所以我們可以直接修正它。但如果你使用的是 `.cls` 或 `.sty` 由你的機構提供的檔案，而你懷疑錯誤是由提供的檔案設定不當所致，你應聯絡範本或套件的作者或維護者，以便他們更新範本。

### .lof 與 .lot 檔案中的錯誤

該 `.lof` 檔案包含 `\listoffigures`，並由 `\caption{...}` 的 `圖形` 環境填入。

同樣地， `.lot` 檔案使用 `\caption{...}` 來自 `表格` 環境中的 `\listoftables`.

因此，如果有來自 LaTeX 的錯誤出現在 `.lof` 或 `.lot` 檔案中，你應檢查 `\caption{...}` 其中包含相關文字片段的

根據這裡的錯誤訊息，我們會搜尋 `\alpha 與 var_coeff 的效果` 在我們的 `\caption{...}`，特別是 `圖形`：

![由於圖形 \caption{...} 鍵中的數學指令未處於數學模式而導致的 .lof 檔案範例錯誤](/files/c137c497e1d51662fabab09713f434988dae80c2)

並找到我們的第 19 行 `.tex` 檔案：

```latex
\caption{\alpha 與 var_coeff 的效果}
```

該 `\alpha` 應放在數學模式中；而且如果 `var_coeff` 應該是變數名稱，底線需要跳脫。不要使用 `\verb|var_coeff|` ，因為這在 `\caption{...}`中也可能造成相當嚴重的問題！

```latex
\caption{$\alpha$ 與 \texttt{var\_coeff} 的效果}
```

同樣地，看到這個錯誤時，我們會搜尋 `一些包含 n^i 的樣本資料` 在 `表格` `\caption{...}`，直覺上認為我們忘了把 `n^i` 也放進數學模式中。

![由於表格 \caption{...} 鍵中的上標未處於數學模式而導致的 .lot 檔案範例錯誤](/files/770aa9a8d6d3ab78304cd3b669ef407fe2a8c6c3)

因此我們修正第 31 行

```latex
\caption{含有 n^i 的一些樣本資料}
```

到

```latex
\caption{含有 $n^i$ 的一些樣本資料}
```

### .bbl 檔案中的錯誤

該 `.bbl` 檔案包含參考文獻列表（bibliography）的項目，並由 BIBTeX 在處理 `.bib` 檔案後依據 `.bst` 檔案中的樣式資訊產生。從 `.bbl` 回報的錯誤通常源自 `.bib` 檔案中。

這裡有一個我們在 Overleaf 支援中經常看到的常見錯誤：

![由於 .bib 檔案中未跳脫的 & 而導致的 .bbl 檔案範例錯誤](/files/adeea98bb7274a0918949e5d9b556da61ff2530a)

搜尋 `這個與那個` 在 `.bib` 檔案會把我們帶到第 13 行，在那裡我們會發現 `&` 應該跳脫為 `\&` 或改寫為單字 `以及`.

```bibtex
    title   = {這個與那個},
```

作者經常在 `.bbl` （因此也在 `.bib`）檔案中遇到與 Unicode 字元相關的錯誤——尤其是當資訊來源是從別處複製貼上而來時：

![由於 .bib 檔案中不支援的 Unicode 字元而導致的 .bbl 檔案範例錯誤](/files/3299116dfc63037257384582ecd8dfe2ddd7b763)

將錯誤訊息中的 ♣ 字元複製貼上並在 `.bib` 檔案中搜尋，會帶你到第 3 行：

```bibtex
    title   = {Research ♣ Development},
```

某些 Unicode 字元不受 `latex` 以及 `pdflatex` 編譯器支援。為避免此錯誤，你可以嘗試 [更改你的專案編譯器為](/latex/zh-tw/zhi-shi-ku/026-changing-compiler.md) 到 `XeLaTeX` 或 `LuaLaTeX`。但即使如此，你仍需確保你的專案與那些編譯器相容，且你使用的字型包含可表示 ♣ 的字形，這樣它才能在輸出的 PDF 中正確呈現。因此，使用相關的 LaTeX 指令會更好：

```bibtex
    title   = {Research $\clubsuit$ Development},
```

不過有時候，這個字元可能難以察覺得多：

![由於 .bib 檔案中不支援且無法列印的 Unicode 字元而導致的 .bbl 檔案範例錯誤](/files/e781ca919014929cdad7d0828eb485e90cba3ad2)

這裡，U+3000 是一個 [Unicode 字元 `IDEOGRAPHIC SPACE`](https://www.fileformat.info/info/unicode/char/3000/index.htm)，因此它確實是一個空白字元。要從錯誤訊息中複製這個精確字元並在 `.bib` 檔案中搜尋，可能會很困難。因此我們得用另一種方式來定位它，也就是使用 `\DeclareUnicodeCharacter` 來替換 `U+3000` 成更容易看見的東西！在你的專案導言區中加入以下幾行，放在 `\begin{document}`:

```latex
\usepackage{xcolor}
\DeclareUnicodeCharacter{3000}{\textcolor{red}{BAD!!}}
```

編譯你的專案後，錯誤就會消失；但你應仔細在輸出 PDF 中尋找 BAD!!：

![輸出 PDF 以紅色 BAD!! 取代 U+3000](/files/39d27c4d1cb06eaebaa64807ddab5b287aeb3cd5)

所以現在我們知道這個有問題的字元位於 `的` 以及 `奇妙的`，在「An Author」的參考文獻項目中。它在 `.bib` 檔案第 5 行看起來相當無害，因為它是隱形的：但如果你手動重新輸入那個 `...of Wondrous...` 用一般空白鍵手動重打，重新編譯後錯誤就會消失。

```bibtex
    journal = {Journal of　Wondrous Musings},
```

#### 關於 biblatex 的說明

如果你使用 `biblatex` 套件，那麼 `.bib` 檔案中的類似錯誤很可能都會被回報為來自 `\printbibliography` 你 `.tex` 檔案中的那一行。除錯過程類似：使用錯誤訊息中的短文字片段在你的 `.bib` 檔案中搜尋以找出有問題的行，並加以修正。

### .bst 檔案中的錯誤

`.bst` 檔案是 BIBTeX 用來處理與格式化參考文獻列表的文獻樣式檔。如果你看到來自 `.bst` 檔案的錯誤，這可能是 `.bst` 本身的 bug，特別是如果它是一個非常非常舊的樣式檔，可能已不再與最新的 LaTeX 套件相容。不過，這也可能其實是 `.bib` 檔案中的錯誤。這一類最常見的錯誤看起來像這樣：

![Bst-error-example-01.png](/files/a1f03a8b119e01b245389daa3500572bf6affdb4)

具有 BIBTeX 鍵 `Someone:etal:2008` 的項目有 `author` 欄位位於 `.bib` 檔案：

```bibtex
    author  = {Strange Someone, Night Stranger, and Random Person},
```

在 `.bib` 檔案中， [多個姓名的列表](/latex/zh-tw/can-kao-wen-xian-yu-yin-wen/01-bibliography-management-with-bibtex.md#multiple-authors) 應以 `以及`分隔，而不是用逗號或 `&`。 `author` 欄位應更正為

```bibtex
    author  = {Strange Someone and Night Stranger and Random Person},
```

### .ttt 與 .fff 檔案中的錯誤

只有在你載入 [`endfloat` 套件](https://www.ctan.org/pkg/endfloat)時才會產生這些檔案類型；它用來依照某些學術期刊投稿時的要求，強制將所有表格與圖形環境移到文件末尾。

若要查看這些產生檔案中的範例錯誤，請取消註解第 3 行 `\usepackage{endfloat}` 於 `.tex` 我們範例專案中的檔案。

![Ttt-error-example-01.png](/files/a2189301f2087cd5e945694233bfd54028cf3a95)

該 `.ttt` 檔案包含所有 `表格` 環境的內容，因此我們會搜尋 `dummy & data` 在 `.tex` 檔案，並特別注意表格。我們會在 `.tex` 檔案第 29 行看到問題：我們有三欄，比宣告的兩欄多了一欄。因此可能需要刪除一個多餘欄位；或者我們應該插入 `\\` 之後 `虛擬` 開始新的一列；或者我們原本是想宣告三欄 `c | c | c` 畢竟！

![Fff-error-example-01.png](/files/770a2aeb5154ff964f140451b3e80bc819db48b8)

同樣地， `.fff` 檔案包含來自所有 `圖形` 環境，而且搜尋那個拼錯的 `\includegraphcs` 會帶我們到第 18 行的 `.tex` 檔案，我們可以將其更正為 `\includegraphics`.

## 延伸閱讀

* [Overleaf 如何編譯我的專案？](/latex/zh-tw/zhi-shi-ku/064-how-does-overleaf-compile-my-project.md)
* [常見的 LaTeX 錯誤](/latex/zh-tw/latex-ji-chu/05-errors.md)
* [TeX 常見問題列表](https://texfaq.org/#errors)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/zh-tw/zhi-shi-ku/066-how-to-find-and-fix-errors-reported-in-generated-files.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
