如何优雅地使用LaTeX(LaTeX分段编译技巧)
前言
众所周知,在使用Overleaf编写LaTeX的时候,免费版的编译速度和时间限制非常让人不爽,如果想用Beamer做PPT做不了两页就会出现超时,那么有没有办法能够优雅地编写超长文本呢?
答案是有的,本文提供一种通过分段的方式实现分块编译,并且每次可以只编译你正在写的部分,节约免费编译时间提高编译速度的方法。
LaTeX分段编译API简介
最简单的LaTeX分段编译API就是 \include{xxx.tex}
和 \input{xxx.tex}
这两个命令,他们的区别引用一段GPT4
的回答:
在 LaTeX 中,
\include{}
、\input{}
和\includeonly{}
是用来管理和组织大型文档的三个非常有用的命令。它们各自有不同的特点和用途:
\input{filename}
- 用途:
\input{}
命令用于将指定文件的内容在当前位置直接插入。它适合用于引入格式设置、自定义命令、较短的文本片段等。- 特点:
\input{}
不会启动新的一页,它就像是把被引入文件的内容直接复制到\input{}
命令的位置一样。你可以在文档的任何地方使用\input{}
,包括序言中。
\include{filename}
- 用途:
\include{}
命令主要用于引入较大的文档分块,如章节。它非常适用于书籍和报告等大型文档的章节管理。- 特点: 每次使用
\include{}
时,LaTeX 都会在新的一页开始插入指定文件的内容,这是它与\input{}
的主要区别。另外,\include{}
还可以与\includeonly{}
配合使用,这对于大型文档的编译非常有帮助,因为它允许你仅编译文档中的特定部分。
\includeonly{filename1,filename2,...}
- 用途:
\includeonly{}
命令用于指定在当前的编译过程中只编译\include{}
命令引用的某些文件。这在编辑长文档时非常有用,可以显著减少编译时间,尤其是当你只需要关注文档的一部分时。- 特点:
\includeonly{}
需要放在序言区(\begin{document}
之前)。它不会影响其他\include{}
命令的内容包含,但只有列在\includeonly{}
中的文件会被重新编译。其他不在列表中的\include{}
引入的文件将被忽略,但它们之前编译的内容(如页码和交叉引用)仍然会被保留。使用这些命令可以有效地管理和控制大型文档的结构和编译过程,使得文档维护更加高效和简单。
需要注意的是,这里的 \input
的作用和 C
语言里面的 #include
是一样的,只是把你目标文件里面的内容复制过来,并不会触发分段编译,但是这个命令可以在\ \begin{document}
之前使用,便于引入一些文本的设置和宏包的导入
另外这两个命令如果引入的是 .tex
文件,是不需要带 .tex
后缀的。如果包含目录,用正斜线 \
来表示
注意:在 Beamer
下面,如果要使用 lstlisting
环境展示代码,一定要把这一页标记为[fragile]
即:
1 | \begin{frame}[fragile]{title} |
一套可行的分段编译LaTeX模板
本部分展示了一个可行的可以分段编译的LaTeX模板
项目结构
我的项目结构如下:
1 | |--chapters //这个文件夹下面放各个章节的内容 |
config.tex
设置相关内容
在这个文件里面需要完成文档类别的定义和宏包的引入,如果你是在已有的项目上进行改进,可以直接把你的 \begin{document}
之前的部分 剪切 到这个文件里面,接下来给出我的 NJU beamer
的 config.tex
注意在这个文件里面我们定义了 \makecover
和 \makeref
两个命令,这两个命令分别用于生成封面和引用页,必须在 \begin{document}
和 \end{document}
之间使用。
1 | \documentclass{beamer} |
这样就可以了
cover.tex
模板
标题文件可以这么写:
1 | \begin{frame} |
里面的图标可以自己换
refpage.tex
模板
引用页和致谢页如下:
1 | \section{参考文献} |
main.tex
的模板
在main.tex
的开头就需要定义这个是主文件,加上一句话
1 | \def\allfiles{} |
就可以了。
不要忘记引入文档设置
1 | \input{config} |
总结一下主文件应该长这样:
1 | %% ---DO NOT MODIFY BEGIN--- |
就可以了
各个chapter的设置
接下来就是分章节书写了,每个章节应该是一个独立的 chapter_xxx.tex
,这个 chapter_xxx.tex
的格式如下:
1 | %% ---DO NOT MODIFY BEGIN--- |
这样就可以了
如何编译
本部分主要介绍如何使用上面的方法编译出你需要的部分
编译完整文档
如果你正确书写了开头和结尾,那么你是可以直接在Overleaf里面选择编译文件 main.tex
直接得到完整的文档的,如果出错看看是不是改了不应该修改的部分
如果你发现编译还是超时了,可以考虑在Overleaf上面只分章节编译,到最后需要出成品的时候把整个项目下载到本地,用本地的套件编译
编译特定章节
如果你只想编译某个章节,比如说 chapter_1
,那么你可以在左边的目标文件里面选择 chapters/chapter1.tex
然后点击重新编译,就可以只编译这个章节了