> 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/038-fixing-and-preventing-compile-timeouts.md).

# 修正並防止編譯逾時

當你點擊 **重新編譯** 按鈕時，你的 Overleaf 專案就會啟動一個程序，讀取你的專案檔案並將其轉換為排版完成的 PDF。如果你遇到編譯逾時錯誤，這表示編譯程序無法在以下時間內完成： [你所使用的 Overleaf 方案的逾時限制](/latex/zh-tw/zhi-shi-ku/119-overleaf-plan-limits.md).

雖然有些專案可能過大或過於複雜，無法在提供的時間內產生 PDF，但編譯逾時通常可以修正或預防。

## 解決編譯逾時的步驟

請依照以下步驟找出並修正常見的造成編譯逾時的問題：

1. [檢查編譯錯誤，並使用 **遇到第一個錯誤即停止** mode](#first-errors)
2. [試試 **Fast\[draft\]** 模式並最佳化你的圖片大小](#second-images)
3. [評估你的專案中耗時的工作](#third-assess)

除了遵循這些步驟之外，請也查看在 [特定逾時情況](#anchor-advice) 以及應遵循的 [最佳做法](#anchor-best) 以預防編譯逾時。

雖然許多專案都能在 Overleaf 免費方案提供的時間內完成編譯，但如果你正在準備一份大型或複雜文件，你可能需要 [訂閱付費方案](https://www.overleaf.com/user/subscription/plans) 以獲得更多編譯時間。

## 步驟 1：檢查編譯錯誤並加以修正

某些編譯錯誤，或多個錯誤的累積，可能會完全阻礙 [latexmk 建置程序](https://learn.overleaf.com/learn/Kb/How_does_Overleaf_compile_my_project%3F) 並導致編譯逾時。若要找出並修正錯誤，請開啟 **遇到第一個錯誤即停止** 編譯模式，位於 **重新編譯** 下拉式選單中：

![顯示如何啟用「遇到第一個錯誤即停止」編譯模式的螢幕截圖](/files/cb00bd25d8efda227d0f4637dfca0fc8cfd165cc)

該 [**遇到第一個錯誤即停止**](/latex/zh-tw/zhi-shi-ku/149-using-the-stop-on-first-error-compilation-mode.md) 編譯模式的作用正如你所預期——一旦遇到錯誤就會立即停止編譯。發生這種情況時，不會產生 PDF，並且會顯示一則說明錯誤的訊息。開啟 **遇到第一個錯誤即停止** 可讓你逐一找出並修正專案中的每個錯誤，直到專案完全沒有錯誤。

點擊每則錯誤訊息會帶你前往造成問題的原始碼行，方便你更正程式碼。幾個常見錯誤已在 [此頁面](/latex/zh-tw/latex-ji-chu/05-errors.md)中說明，而一些 LaTeX 除錯建議則列於 [此頁面](/latex/zh-tw/wen-yu-da/81-tips-and-tricks-for-troubleshooting-latex.md)。也請參閱 [本文中的章節](#anchor-fatal) ，其中列出一些常見的 **致命編譯錯誤** ，這些錯誤會導致編譯逾時。

## 步驟 2：嘗試以 Fast \[draft] 模式編譯

在專案中加入大量或大型圖片檔案，會大幅增加編譯專案所需的時間。

有一種方法可以幫助判斷是否是圖片處理造成逾時，那就是嘗試以 **快速 \[草稿]** 模式編譯。要這麼做，請從 **快速 \[草稿]** 重新編譯選單 **中選擇該選項**。這會以方框取代所有圖形，讓 PDF 編譯快得多：

![為 Overleaf 專案設定草稿編譯模式](/files/59d1be5bbe5959394b8577edb080fd4722b17d7e)

如果你的文件可以在 **快速 \[草稿]** 模式下編譯，但無法在 **一般** 模式下完整編譯，原因可能是圖片檔案過大或過多。

### 最佳化圖片檔案

如果你使用了多個大型、高解析度的 PNG 或 JPEG 檔案，處理這些檔案可能會增加編譯專案所需的時間，有時甚至相當可觀。請務必：

* 圖表與繪圖請使用 PDF 檔案而非 PNG 檔案。
* JPEG 只保留用於照片。

如需更多建議，請參閱： [最佳化大型圖片檔案](/latex/zh-tw/zhi-shi-ku/113-optimising-very-large-image-files.md).

## 步驟 3：評估你的專案中耗時的工作與致命錯誤

如果兩者都 **遇到第一個錯誤即停止** 和 **Fast\[draft]** 編譯模式仍然導致編譯逾時，你可能需要進一步找出編譯逾時的原因，並（希望能）加以處理。

1\. [查看會拖慢編譯速度的耗時做法與套件清單](#anchor-slow)

2\. [查看可能導致逾時的常見致命錯誤清單](#anchor-fatal)

3\. [查看最符合你情況的特定逾時情境建議](#anchor-advice)

### 耗時的做法與套件

某些做法與套件會導致編譯非常緩慢，甚至造成逾時。

**包含複雜的 TikZ 或 pgfplots 圖形**

`TikZ` 和 [`pgfplots`](https://ctan.org/pkg/pgfplots?lang=en) 可以產生很棒的圖形，但它們也可能 [需要很長的編譯時間](https://tex.stackexchange.com/a/254946/226)。有 [幾種方法可以將 TikZ 圖形外部化](/latex/zh-tw/wen-yu-da/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md) ，如此一來 LaTeX 在每次產生新的 PDF 時就不必重新繪製它們。

**使用 mhchem 套件**

較新版本的 [`mhchem` 套件](https://ctan.org/pkg/mhchem?lang=en) 可能需要更長的編譯時間。視你的用途而定， [`chemformula` 套件](https://ctan.org/pkg/chemformula) 可能可縮短編譯所需時間。如果你已經在使用 `mhchem`，你可以試著直接以 `chemformula` 作為替代：

```latex
% \\usepackage{mhchem}
\\usepackage{chemformula}
\\let\\ce\\ch
```

* **注意**：之間在語法與功能上有差異 `mhchem` 和 `chemformula`，因此這不一定總是能很好運作。例如， `\\ce{2H2O}` 在 `mhchem`中可以正常顯示，但在 `chemformula` 中你必須寫成 `\\ch{2 H2O}` 且在開頭的數字後加一個空格 `2`.

**包含追蹤或除錯呼叫**

如果你剛好有一個 `\\tracingall` 命令在你的文件中，它可能會寫入大量 *大量* 資料到 `.log`。 `\\tracingall` 記錄與處理 `.log` 在 `\\tracingall` 呼叫；或者如果你需要使用類似的除錯方法，則使用 [`trace` 套件](http://ctan.org/pkg/trace) 。

**使用 acro 套件**

使用 [`acro` 套件](https://www.ctan.org/pkg/acro) 的使用者已 [回報第 3 版較慢](https://github.com/cgnieder/acro/issues/205) 載入縮寫定義。其一個後果是 `acro`的編譯時間增加，可能會觸發編譯逾時；幸運的是，有一個替代作法：改用第 2 版的 `acro` 套件。

從第 3 版切回第 2 版可能需要編輯你的專案，以確保其與第 2 版的選項、功能與命令相容。第 2 版的文件可在較早期的原始碼版本中取得，這些版本可以 [從 GitHub 下載](https://github.com/cgnieder/acro/releases/tag/v2.10).

以下是在切回第 2 版時需要檢查的一些項目——這份清單遠非完整：

1. 修改你的專案主要的 `.tex` 為：
   * 將 `\\usepackage{acro}` 改為 `\\usepackage{acro}[=v2]`
   * 將 `include=...` 選項鍵 `\\printacronyms` 改為 `include-classes=...`
2. 在任何 `\\DeclareAcronym` 命令中，請確保 `tag=...` 選項鍵改為 `class=...`.

請參閱 [`acro` 第 2.10 版文件](https://github.com/cgnieder/acro/releases/tag/v2.10) ，以查看第 2 版可用但第 3 版沒有的命令與選項。

**使用 EPS 或 SVG 圖片**

使用 EPS 或 SVG 圖片可能需要額外處理才能將它們轉換為 PDF 格式。這些額外處理會增加編譯專案所需的時間。

* 雖然 **latex** 編譯器可直接支援 EPS 圖片，但 **pdfLaTeX** 編譯器不支援 EPS 圖片，因此在使用該編譯器時，需要額外一步將它們轉換為 PDF 圖片。此處理由 `epstopdf` 套件負責，其使用 `Ghostscript` 將 EPS 檔案轉換為 PDF。這個轉換步驟會大幅增加編譯專案所需的時間。
* 任何 LaTeX 編譯器都無法直接支援 SVG 圖片檔案，必須使用 `svg` 套件以及 `\\includesvg` 命令。 `svg` 套件會使用 `inkscape` 將 SVG 圖片轉換為 PDF。這個轉換步驟會大幅增加編譯專案所需的時間。

若想更快並有助於避免編譯逾時，請改用圖片的 PDF 版本，而不是 EPS 或 SVG 格式。

**使用 tabularray 套件**

該 `tabularray` 套件提供了在 LaTeX 中製作表格的標準命令與環境的替代方案。不幸的是， `tabularray` 該套件執行得非常慢，特別是對於較大的表格以及使用某些欄位類型的表格。目前，考量編譯時間，建議優先使用標準表格定義方法，而非 `tabularray` 。

**在命令中建立無限迴圈**

在編譯期間，LaTeX 命令偶爾可能會觸發「無限迴圈」。無限迴圈最常見的原因是套件或使用者自訂命令中的錯誤。

如果你懷疑自己遇到了迴圈，請檢查是否不小心建立了 [遞迴的](https://en.wikipedia.org/wiki/Recursion) 定義，例如在你的某個自訂命令中，例如 `\\newcommand{\\foo}{\\foo}`.

### 某些致命編譯錯誤的原因

以下是一些已知的致命錯誤原因。

**在敏感的標題命令中包含空白行**

LaTeX 類別與期刊範本通常會提供特殊命令來設定文件標題的部分內容。這些命令通常只應包含簡單引數，而以意料之外的方式使用它們可能會導致編譯錯誤，甚至逾時。最重要的是，像以下這些命令： `\\author{...}`, `\\date{...}` 和 `\\title{...}` 不應包含空白行。

**包含過多固定浮動體**

如果你有太多使用 `[H]` 定位標記的 `float` 套件，可能會導致 LaTeX 在嘗試為所有表格與圖形尋找合適位置時陷入無限迴圈。請考慮將所有 `[H]` 與 `[hbt!]` 以及必要時偶爾使用的 `\clearpage` 替換掉，以便在插入分頁前先將佇列中的所有表格與圖形排出。

**\\\caption 命令與 tabular 環境中的錯誤**

以下是一些需要注意的表格相關問題——一般而言，排版表格時請務必小心！

* `\\caption{...}` 應始終放在 *外部* 該 `tabular` 環境之外，因為如果 [`caption` 套件](https://ctan.org/pkg/caption) 已載入，則可能造成致命錯誤，如以下範例所示：

  ```latex
  \documentclass{article}
  \\usepackage{caption}
  \begin{document}

  \begin{table}
      \\begin{tabular}{c|c}
          \\caption{Caption}% \\caption{...} 應該在 tabular 環境之外
          a & b \\
          c & d \\
      \end{tabular}
  \end{table}
  \end{document}
  ```

  [開啟此範例 **這會觸發 Overleaf 逾時錯誤**](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Overleaf+timeout+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bcaption%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cbegin%7Btable%7D%0A++++%5Cbegin%7Btabular%7D%7Bc%7Cc%7D%0A++++++++%5Ccaption%7BCaption%7D%25+%5Ccaption%7B...%7D+should+be+OUTSIDE+the+tabular+environment%0A++++++++a+%26+b+%5C%5C%0A++++++++c+%26+d+%5C%5C%0A++++%5Cend%7Btabular%7D%0A%5Cend%7Btable%7D%0A%5Cend%7Bdocument)
* 相較之下，請注意 `longtable` 環境 *確實* 需要 `\\caption{...}` 在其中，如我們的 [表格說明文章中的範例所示](/latex/zh-tw/tu-biao-yu-biao-ge/01-tables.md#multi-page-tables).
* `\\caption{...}` 不應包含 `\\`, `\newline`, `\centering`, `\raggedright` 等等。
* 在某些範本或套件中， `\ref{...}` 或 `\\cite{...}` 位於 `\caption` 前面可能需要加上 `\\protect` 才能避免致命錯誤；例如， `\\protect\\cite{...}`.
* 檢查不完整的 `\\cmidrule{...}` 在 `tabular` 環境；它需要一段欄位範圍，因此你需要寫成 `\\cmidrule{3-3}` 而不是只有 `\\cmidrule{3}` 如果你想要一條只跨越一欄的水平線。
* 避免巢狀 `tabular` 環境。請看看 [`makecell` 套件](https://ctan.org/pkg/makecell?lang=en) ，若你想在表格儲存格中手動換行，或是 `p{...}` 欄位類型，以及／或 [`tabularx`](https://ctan.org/pkg/tabularx) 套件，若你正在尋找可讓欄位自動換行長文字的方法。
* 如果你的 tabular 行是以 `[...` 開頭，你可能需要在 `\relax` 之後加上 `\\` ，放在上一行的

**使用 soul 或 changes 套件**

如果你正在使用 [`soul`](https://ctan.org/pkg/soul) 或 [`changes`](https://ctan.org/pkg/changes) 套件來標示文字或加刪除線，那麼 `\cite` 和 `\\ref` 前面可能需要加上 `\\protect`；例如， `\\protect\\cite{...}`.

**使用 tikzpicture**

檢查缺少的 `;` 於 path/node 命令結尾的 `]` 以及參數列表結尾的 `tikzpicture`符號。

**使用 breqn 套件**

該 [`breqn`](https://ctan.org/pkg/breqn) 套件的 `dmath` 環境可能會陷入無限迴圈；請改用 `align` ，並在必要時手動斷行。

**使用 babel 套件**

某些 [`babel`](https://ctan.org/pkg/babel) 語言選項會改變某些字元的含義，當這些字元在其「正常」情境中使用時可能會造成問題；例如在數學模式中。為避免此情況，請嘗試使用選項 `shorthands=off` 來載入 babel（例如， `\\usepackage[shorthands=off]{babel}`).

**使用 jabbrv 套件**

某些範本會使用 [`jabbrv` 套件](https://github.com/compholio/jabbrv) 來自動縮寫期刊標題（見 [此 Overleaf 範例](https://www.overleaf.com/latex/templates/automatic-journal-abbreviations/mxfsdscmvxcr)）。當 `.bib` 檔案中的期刊欄位包含帶重音的 Unicode 字元（例如 Biología）時，這可能會阻擋編譯並在 Overleaf 上造成逾時。必須改用 LaTeX 命令，例如 `Biolog{\'i}a` 或者你可以 [更改專案的編譯器](/latex/zh-tw/zhi-shi-ku/026-changing-compiler.md) 改為 `XeLaTeX` 或 `LuaLaTeX`，這兩者都內建支援讀取 Unicode 字元。

## 針對某些特定逾時情況的建議

### 我的專案原本編譯沒有任何錯誤，但現在我看到編譯逾時

一個小變更有時也會造成編譯逾時。為了幫助找出問題原因並加以修正，請嘗試以下步驟：

1. 使用 [從頭重新編譯](/latex/zh-tw/zhi-shi-ku/028-clearing-the-cache.md) ，以清除任何可能造成問題的過時產生檔案。
2. 請使用 [Overleaf 歷史記錄功能](/latex/zh-tw/geng-duo-zhu-ti/49-using-the-history-feature.md) 來找出你最近的變更。請參閱上方致命編譯錯誤原因清單。
3. 請使用 [遇到第一個錯誤即停止](/latex/zh-tw/zhi-shi-ku/149-using-the-stop-on-first-error-compilation-mode.md) 選項來找出並修正你不小心引入的任何錯誤。

有可能一個小變更已導致致命編譯錯誤——請參閱 [上方的致命編譯錯誤清單](#anchor-fatal) ，以了解一些可能原因。

### 我剛把一個專案上傳到 Overleaf，結果遇到編譯逾時

可能是你的專案缺少關鍵檔案或套件，或者其組織方式導致 Overleaf 的編譯程序出現問題。

* 如果某個專案在你的本機電腦上可以順利編譯，但在 Overleaf 上無法編譯，可能是因為你使用了不同版本的 **TeX Live** 於你自己的電腦上。你可以 [更改你專案所使用的 TeX Live 版本](https://www.overleaf.com/blog/new-feature-select-your-tex-live-compiler-version) ，使其更接近你在本機成功編譯專案時所使用的版本。
* 你上傳的專案可能沒有適合 Overleaf 的最佳檔案結構。如果你的主要 tex 檔位於某個資料夾中，編譯器可能難以找到某些檔案相依性。如果你的主要 tex 檔位於資料夾中，請嘗試重新組織專案，讓主要 tex 檔位於專案最上層。

依照 [上方關於找出並修正錯誤的指示](#first-errors) 通常可以找出缺少的檔案、TeX Live 版本問題，以及專案組織方面的問題。

### 我複製了一個原本可以編譯的專案，但現在卻遇到編譯逾時

新專案（包含現有專案的複本）預設會使用最新版本的 TeX Live。如果你的原始專案是使用較舊版本的 TeX Live，則可能與最新版本之間存在不相容而造成問題。請嘗試 [更改 TeX Live 版本](https://www.overleaf.com/blog/new-feature-select-your-tex-live-compiler-version) ，讓新複本與原始專案所使用的版本一致。

### 當我包含所有章節時，我的專案無法編譯，但各章節單獨編譯都沒問題

依照 [上方關於使用 Fast\[draft\] 編譯選項的建議](#second-images) ，看看整個專案是否可以在 Fast\[draft] 模式下編譯。

在某些情況下，可以分兩階段成功編譯大型專案：先以 Fast\[draft] 模式執行，再以 Normal 模式編譯。

檢查你專案的每個章節，以找出可能造成編譯緩慢的來源。這些可能包括 [可加以最佳化的大型圖片檔案](#anchor-optimize)，或其他 [耗時的做法或套件](#anchor-slow).

### 我的專案有時會逾時，但無法穩定編譯

你的專案可能已非常接近最大編譯時間。請遵循上方關於 [修正錯誤](#first-errors), [最佳化圖片](#second-images)、以及 [避免耗時的做法或套件](#third-assess).

## 預防編譯逾時的最佳做法

預防編譯逾時發生，遠比事後面對有時令人緊張的修正過程更好。這些建議應能幫助你避免編譯逾時，或在發生時迅速恢復。

### 在編譯錯誤發生時立刻修正

編譯錯誤會以重新編譯按鈕旁的紅色通知泡泡顯示，如同在 [此頁面](/latex/zh-tw/wen-yu-da/81-tips-and-tricks-for-troubleshooting-latex.md)。

[此頁面](/latex/zh-tw/latex-ji-chu/05-errors.md) 說明幾種常見的編譯錯誤。如果你難以理解錯誤訊息，通常用錯誤訊息中的文字上網搜尋，就能找到一篇部落格文章或論壇貼文，其中會解釋該錯誤並提供解決方案。

### 在進行重大變更或重要里程碑之前，為你的專案版本加上標籤

請使用 [Overleaf 歷史記錄功能](/latex/zh-tw/geng-duo-zhu-ti/49-using-the-history-feature.md) 為你的專案版本加上標籤，這樣你就能輕鬆將目前的專案與較早版本進行比較。這有助於你快速找出任何新的編譯錯誤來源。

### 整理你的檔案

如果你的專案組織良好，就更容易找出並修正問題。此外，良好的專案管理可讓你編譯專案的特定部分，讓你更容易找出可能導致編譯時間過長的區域。請 [請見此處](/latex/zh-tw/wen-jian-jie-gou/07-management-in-a-large-project.md) 以取得管理大型專案的建議。

## 更多關於編譯與編譯時間的資訊

### 那麼，「編譯」到底是什麼？

編譯是將你的 LaTeX 程式碼轉換成排版好的 PDF 檔案的過程。 [進一步了解 Overleaf 如何編譯 LaTeX 專案](/latex/zh-tw/zhi-shi-ku/064-how-does-overleaf-compile-my-project.md).

### 合理使用限制

某些大型或複雜的文件所需的編譯時間可能比 Overleaf 免費方案的逾時限制更長，並且可能需要我們的延長編譯時間 [付費方案](https://www.overleaf.com/user/subscription/plans)。某些專案甚至可能需要比我們付費方案所提供的更長的編譯時間。在這些情況下，你可能需要下載你的專案並在本機編譯。

### 還是卡住了？

如果你有無法依照此處建議解決的編譯逾時問題，請 [告訴我們](https://www.overleaf.com/contact).


---

# 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/038-fixing-and-preventing-compile-timeouts.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.
