[LaTex] 多文件编译 | 分段编译

如果所有的页面都编译的话花费时间较长,因此将文章的不同部分分成不同的文件,分别编译,提高效率,也便于书写,理清逻辑。

多文件编译(主文件、子文件划分)

拿到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会另外起一页插入内容;根据不同使用场景进行选择。

分段编译

  1. 上述\inupt,相当于替换文本,通常用于放置document前部(导言区)的一些包导入,格式定义的内容。
  2. \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}

参考:

  1. 多文件Latex的整体结构与子文件的独立编译方法:https://www.bilibili.com/video/BV1d3411T7q6?spm_id_from=333.337.search-card.all.click
  2. Latex之input()与include():https://blog.csdn.net/qq_41156733/article/details/105191697
  3. Latex技巧——分段编译(input,includeonly,include的使用):https://blog.csdn.net/x_1203/article/details/105615355
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值