如果所有的页面都编译的话花费时间较长,因此将文章的不同部分分成不同的文件,分别编译,提高效率,也便于书写,理清逻辑。
多文件编译(主文件、子文件划分)
拿到Latex模板后,不同模板具有不同的格式要求。我们要做的是在【主文件开头】加上如下代码,来声明这是编译的主文件:
\def\allfiles{}
在各个【子文件】中,【开头】加上下述代码,表明如果主文件已经存在声明,那么直接开始document编写。
\ifx\allfiles\undefined
% 如果有这一部分另外的package,在这里加上
% 没有的话不需要
\begin{document}
\else
\fi
【子文件】中,【结尾】加上和开头同样的部分,表明这是子文件的结束。
\ifx\allfiles\undefined
% 如果有这一部分的参考文献的话,在这里加上
% 没有的话不需要
% 因此各个部分的参考文献可以分开放置
% 也可以统一放在主文件末尾。
% bibfile.bib是放置参考文献的文件,可以用zotero导出。
% \bibliography{bibfile}
end{document}
\else
\fi
input vs. include
再在主文件中,原来放置子文件内容的地方,加上:
\input{fileName}
# 或者
\include{fileName}
【博主使用的是\input
】
其中fileName
是子文件fileName.tex
的名字,也可以与内容中的fileName相同(便于区分,实际可以与内容的fileName不同)。
\begin{fileName}
% 内容
\end{fileName}
完成上述步骤后,可以实现主文件编译,也可以实现单独子文件进行编译啦。
注意,\input会在原位置直接插入内容;而\include会另外起一页插入内容;根据不同使用场景进行选择。
分段编译
- 上述
\inupt,相当于替换文本
,通常用于放置document前部(导言区)
的一些包导入,格式定义的内容。 \include和\includeonly相当于链接库
,使用:
\include{file}、\includeonly{filelist}
通常二者搭配使用,
\includeonly
规定编译范围,可以在导言区使用\include
把文件包含进去,只能在正文区使用。
例如:
\includeonly{qianyan,end}
\begin{document}
\include{qianyan}
\include{end}
\end{document}
后续,可以开始分段编译。
有两种形式:
1、主文件(开头)和子文件(开头、结尾)都已经添加了\ifx\allfiles\undefined
这部分内容;只需要在主文件中直接\input{}各个部分的文件即可;【编译主文件,但是只显示子文件中的部分内容】
2、没有\ifx\allfiles\undefined
这部分内容,只用开头结尾的document;需要去掉主文件中的\include{},还需要去掉子文件开头和结尾的\document部分。【编译子文件,子文件自己本身成为一个文件】
比如,只想编译前言的时候,在主文件中将\include{qianyan}
注释掉,在子文件中,将\input{Config}和\begin{document}、\end{document}注释掉
,然后单独编译qianyan.tex子文件
。
因为进行单独编译的时候,应该让前言这个子文件,形成一个单独的document,并且插入导言区的内容,形成一个单独的文档,进行单独编译;并且保证主文件中没有这部分内容,避免重复编译。
当确保这部分没有问题的时候,应该在主文件中,恢复\include{qianyan},并且在子文件中去掉document的部分,让它重新成为一个\section,即可。
【二者展示形式略有不一致,可以都试一下。】
(博主为了方便,直接选择第一种,即每次编译的都是主文件,只修改某部分子文件的时候,就只保留主文件中的相应\input{fileNmae}
即可,全部写完之后全部显示。所有的操作都在主文件,非常方便。)
分段编译的时候:
- 第一种保留了原始模板形式
- 第二种没有保留
当然,整体编译的时候,结果是一样的。
Note:
另外,abstract可以用\input,并且一定要在\maketitle
前面。
\input{abstract}
\maketitle
abstract单独作为子文件的格式应该是:
\begin{abstract}
% 内容
\end{abstract}
与正文区中使用\section
不同
\section{qianyan}
% 内容
总结
主文件:
\def\allfiles{}
\input{Config}
% 选择第一种方法的(没有也可运行)
\includeonly{introduction,related work,model,experiments,conclusion}
\begin{document}
\begin{sloppypar}
\input{abstract}
\maketitle % 这一句要在abstract之后
% 下述内容
\input{introduction}
\input{related work}
\input{model}
\input{experiments}
\input{conclusion}
\bibliographystyle{ACM-Reference-Format}
\bibliography{reference_base}
\end{sloppypar}
\end{document}
摘要:
\ifx\allfiles\undefined
\begin{document}
\else
\fi
\begin{abstract}
pass
\end{abstract}
\keywords{xx,xx,xx}
\ifx\allfiles\undefined
end{document}
\fi
各个子文件:
\ifx\allfiles\undefined
\begin{document}
\else
\fi
\section{Introduction}
pass
\ifx\allfiles\undefined
end{document}
\else
\fi
补充:
上述比较复杂,实际上,
- 将模板的\begin{document}之前内容分一个子文件(存放需要使用的包、标题等内容)
- 将abstract.tex分一个子文件
- 将introduction.tex、related work.tex、model.tex、experiment.tex、conclusion.tex各分子文件。
在主文件中,将各个子文件都\input进来即可,实际编译时只有首次编译花费时间较长,后续略微改动时,就算整个文件一起编译,也不会花费太长时间。
(各子文件直接\section{xxx}即可,无需增加新的\begin{document})
\usepackage{style} # style.sty 格式文件
\begin{document}
\input{introduction}
\input{related work}
\input{model}
\input{experiment}
\input{conclusion}
\bibliographystyle{xxx} # xxx.bst 参考格式文件
\bibliography{reference} # reference.bib 参考文献
\end{document}
参考:
- 多文件Latex的整体结构与子文件的独立编译方法:https://www.bilibili.com/video/BV1d3411T7q6?spm_id_from=333.337.search-card.all.click
- Latex之input()与include():https://blog.csdn.net/qq_41156733/article/details/105191697
- Latex技巧——分段编译(input,includeonly,include的使用):https://blog.csdn.net/x_1203/article/details/105615355