大型 LaTeX 專案如何管理?目錄結構、分章節編譯與命名規範
大型 LaTeX 專案的維護成本主要來自三處:改動落在哪個檔案看不出來、編譯要等多久、套件散落導致的同名衝突。對應做法是固定檔案職責、收攏套件入口、縮小單次編譯範圍、統一命名規則。
大型 LaTeX 專案如何組織目錄結構?
大型 LaTeX 專案包含多個章節、表格和圖片檔案時,首先要建立清晰的目錄結構,讓每個檔案的職責一目瞭然。建議按檔案用途劃分目錄,並讓檔名與章節內容對應,方便定位和維護。
project/├── main.tex % 文件類與章節順序├── preamble.tex % 套件與自訂指令├── chapters/│ ├── intro.tex│ ├── method.tex│ └── results.tex├── tables/ % \input 進來的表格原始碼└── figures/下面這份 main.tex 可以直接編譯,前提是同目錄下存在 preamble.tex 與 chapters/ 裡的三個檔案:
% 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:
% preamble.tex —— 全文的套件只在這裡出現\usepackage{amsmath,amssymb}\usepackage{graphicx}\usepackage{booktabs}\usepackage[hidelinks]{hyperref}preamble.tex 由主檔案在 \begin{document} 之前 \input 進來。載入順序也會影響結果,hyperref 通常放在最後;集中之後調整隻改這一處,章節檔案裡不再出現 \usepackage。
單次編譯變慢時:用 \includeonly 只編譯改動的章節
章節變多後,不必每次都重新排版全文。在導言區加一行 \includeonly,列出本次要重新編譯的章節;其餘章節不排版。被省略章節的編號與交叉引用依賴已有輔助資訊;不要假設這些資訊會在每次平台任務中保留。
前提:章節必須用 \include 引入,\input 進來的內容不受 \includeonly 影響;被排除的章節此前至少完整編譯過一次,否則其他地方引用它們時顯示 ??。
% 只重新編譯 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 設定。