大型 LaTeX 專案如何管理?目錄結構、分章節編譯與命名規範

部落格EasyLaTeX 官方發布日期

大型 LaTeX 專案的維護成本主要來自三處:改動落在哪個檔案看不出來、編譯要等多久、套件散落導致的同名衝突。對應做法是固定檔案職責、收攏套件入口、縮小單次編譯範圍、統一命名規則。

大型 LaTeX 專案如何組織目錄結構?

大型 LaTeX 專案包含多個章節、表格和圖片檔案時,首先要建立清晰的目錄結構,讓每個檔案的職責一目瞭然。建議按檔案用途劃分目錄,並讓檔名與章節內容對應,方便定位和維護。

LaTeX
project/├── main.tex              % 文件類與章節順序├── preamble.tex          % 套件與自訂指令├── chapters/│   ├── intro.tex│   ├── method.tex│   └── results.tex├── tables/               % \input 進來的表格原始碼└── figures/

下面這份 main.tex 可以直接編譯,前提是同目錄下存在 preamble.tex 與 chapters/ 裡的三個檔案:

LaTeX
% main.tex\documentclass[11pt]{article}\input{preamble}​% 僅做章節預覽時取消下一行註解;交付前保持註解% \includeonly{chapters/method}​\begin{document}\include{chapters/intro}\include{chapters/method}\include{chapters/results}\end{document}

主檔案不寫正文,只保留文件類、\input 與章節順序;改一章內容只需動 chapters/ 下的一個檔案。

LaTeX 多檔案專案如何統一管理套件?

同一個套件在不同檔案中重複載入時容易出現選項衝突,日誌報 Option clash for package ...,錯誤訊息位置指向第二個載入它的檔案。把全部套件集中到 preamble.tex:

LaTeX
% preamble.tex —— 全文的套件只在這裡出現\usepackage{amsmath,amssymb}\usepackage{graphicx}\usepackage{booktabs}\usepackage[hidelinks]{hyperref}

preamble.tex 由主檔案在 \begin{document} 之前 \input 進來。載入順序也會影響結果,hyperref 通常放在最後;集中之後調整隻改這一處,章節檔案裡不再出現 \usepackage。

單次編譯變慢時:用 \includeonly 只編譯改動的章節

章節變多後,不必每次都重新排版全文。在導言區加一行 \includeonly,列出本次要重新編譯的章節;其餘章節不排版。被省略章節的編號與交叉引用依賴已有輔助資訊;不要假設這些資訊會在每次平台任務中保留。

前提:章節必須用 \include 引入,\input 進來的內容不受 \includeonly 影響;被排除的章節此前至少完整編譯過一次,否則其他地方引用它們時顯示 ??。

LaTeX
% 只重新編譯 method 一章\includeonly{chapters/method}

副作用是本次只更新被包含章節的 .aux。改動如果改變了篇幅,被排除章節的頁碼可能停在上一版,交付前去掉這一行做一次完整編譯,再確認目錄與編號。

標籤與檔案命名不統一時:用字首區分物件型別

物件字首示例
章節sec:\label{sec:method}
圖fig:\label{fig:pipeline}
表tab:\label{tab:ablation}
公式eq:\label{eq:update}

兩個 \label 重名不會中斷編譯,只在日誌裡留一條 multiply-defined labels 提示,引用可能指向錯誤物件;統一字首後可以按型別檢索,把重名找出來。

浮動體裡的 \label 要寫在 \caption 之後。寫反時編號照常生成,取到的卻是上一個計數器,編譯不會出錯,只在 PDF 裡顯示錯誤編號。

改動完成後核對:三個位置與常見日誌提示

改完一處後核對三件事:\include 列表與實際檔案是否對應、標籤與引用是否一一對應、是否需要再做一次完整編譯。

錯誤訊息觸發原因處理
LaTeX Warning: There were multiply-defined labels.兩個 \label 重名檢索改名;編譯兩次,交叉引用才全部更新
LaTeX Warning: Reference 'fig:x' undefined標籤未寫入 .aux,或章節未完整編譯過完整編譯一次;確認 \label 位於 \caption 之後
LaTeX Warning: Label(s) may have changed.本輪交叉引用與上一輪不一致再編譯一次,直到該提示消失
! LaTeX Error: Option clash for package hyperref.同一套件在兩個檔案裡以不同選項載入把 \usepackage 集中到 preamble.tex
! LaTeX Error: \include cannot be nested.章節檔案內又用了 \include章節內改用 \input

相關閱讀:如何減少 LaTeX 專案中的重複程式碼?、LaTeX 編譯失敗怎麼辦?三步定位到出錯的那一行、如何讓 AI 更準確地修改 LaTeX,而不是越改 Bug 越多?。

總結

  • 按職責分層:主檔案只留骨架,章節、表格原始碼、圖片各佔一層;

  • 套件只留一個入口:\usepackage 全部寫在 preamble.tex;

  • 編譯按章節縮小:\includeonly 只編改動的章節,交付前做一次完整編譯;

  • 命名用字首區分:sec: / fig: / tab: / eq:,重名與失效引用都能檢索出來。

檔案較多、編譯時間偏長時,可以把整個目錄匯入 EasyLaTeX 編輯器,編譯入口按 main.tex 設定。