长文档按章节拆分、图单独成文件,会更容易管理。LaTeX 提供了多种把拆分文件重新连接起来的方法,各自适合不同用途:\input 可在任何位置插入内容,\include 用于章节级片段(配合 \includeonly 做部分构建),而 subfiles / standalone package 让每个片段也能单独编译。本页讨论如何选择。
\input — 在任何位置插入
\input{file} 会把该文件的内容 原样插入到命令所在位置,就像你直接在那里输入了一样。它不会分页,可用于导言区或正文,也可以嵌套。扩展名默认补为 .tex。它适合引入 小片段:共享导言区、表格、短小小节等。
% main.tex
\documentclass{report}
\input{preamble/common}
\begin{document}
\input{sections/intro}
\input{tables/experiment-settings}
\end{document}\include — 按章节拆分
\include{file} 会在引入内容的 前后执行 \clearpage,并为这一块切换到 单独的 .aux 文件。它是面向章节等大单位的机制。\include 不能嵌套(但在被 \include 的文件中使用 \input 是可以的)。当章节级拆分需要从新页开始时使用它。
\include{chapters/ch1}\includeonly — 快速只编译一部分
在导言区写 \includeonly{ch2,ch3},LaTeX 就会 只处理这些章节。由于每个 \include 都保留自己的 .aux,跳过章节的页码和交叉引用会沿用上一次完整构建的值。也就是说,先完整构建一次后,就可以只用很短时间重建正在编辑的那一章。(这只适用于 \include,不适用于 \input。)
\includeonly{chapters/ch3} % プリアンブルに置く / put in the preamblesubfiles / standalone — 单独编译文件
\include 方式只能从主文件构建。使用 subfiles package 后,每个子文件都可以 单独编译,同时 自动继承主文件的导言区。主文件中写 \subfile{...},每个子文件开头写 \documentclass[../main.tex]{subfiles} 即可。想不构建整本书而只检查一章时很方便。
% main.tex
\documentclass{book}
\usepackage{subfiles}
\begin{document}
\subfile{chapters/ch1}
\end{document}
% chapters/ch1.tex
\documentclass[../main.tex]{subfiles}
\begin{document}
\chapter{はじめに}
\end{document}类似的 standalone package/class 让每个文件 拥有自己的导言区。它更灵活,但写起来也更复杂。它尤其适合 图和 TikZ:把图作为 standalone 文件保存,单独编译时输出裁切好的 PDF/图像,同时也能被主文档引入。
如何选择
先在目录层面设计拆分方式会少很多犹豫。正文章节放在 chapters/,较长的小节或表格放在 sections/ 或 tables/,图放在 figures/,共享设置放在 preamble/。文件名避免空格,统一使用字母、数字、连字符和下划线。之后在 CI 或其他操作系统上构建时,这些朴素的命名规则就会变成可重现性。
- 小片段、共享导言区 →
\input。 - 章节级单位并从新页开始 →
\include(配合\includeonly做部分构建)。 - 每章也要单独编译、共享导言区 →
subfiles。 - 图独立成文件并在正文复用、各自导言区 →
standalone。
另外,latexmk 会把引入的文件也作为依赖来跟踪,因此拆分文件不会破坏自动构建或保存时重新编译。刚拆分后的项目如果报 “file not found”,先检查路径是否是相对于主文件写的,是否不必要地重复了 .tex 扩展名,以及构建命令是否在项目根目录而不是子目录中运行。
另一个常见错误是直接编译子文件。通过 \input 或 \include 引入的文件通常没有 \documentclass,也没有导言区,因此不是 standalone document。需要单独编译某一章时用 subfiles;需要独立的图 PDF 时用 standalone。要明确这个边界,不要强迫普通章节文件单独编译。