同时使用`chapterbib`及`subfile`
同时使用chapterbib
及subfile
在LaTeX中使用subfile
使用LaTeX的subfile包可以方便地将一个大型LaTeX工程分割成独立文件。例如我在写博士论文时将各个章节分割成单个文件,这样每次预览时就只需要编译单个章节。
例如,在主tex文件main.tex
中添加chapter1
,chapter2
等章节文件:
1
2
3
4
5
6
% main.tex
\usepackage{subfiles}
\begin{document}
\subfile{chapter1}
\subfile{chapter2}
\end{document}
章节的文件chapter1.tex
:
1
2
3
4
5
6
7
% chapter1.tex
\documentclass[main.tex]{subfiles}
\begin{document}
\chapter{A Good Chapter}
Hello world.
\bibliography{references}
\end{document}
之后按照通常情况编辑每个章节的内容即可。 每个章节的tex文件都可以单独编译,最后编译main.tex
就可以输出整个文件。
在LaTeX中使用chapterbib
chapterbib
非常适合用来自定义引用,包括直接给每个章节添加独立的参考文献列表。许多大学的论文格式(包括硕士论文和博士论文)都要求每个章节都有独立的参考文献。
由chapterbib
的机能所限,需要在main.tex中使用include
来添加章节内容:
在main.tex
中:
1
2
3
4
5
6
% main.tex
\usepackage{subfiles}
\begin{document}
\include{chapter1}
\include{chapter2}
\end{document}
同时,每个章节的文件都只能有文件本体(不包括preamble),甚至不能包含\begin{document}
和\end{document}
:
例如,在章节文件chapter1.tex
中:
1
2
3
4
% chapter1.tex
\chapter{A Good Chapter}
Hello world.
\bibliography{references}
所以要同时使用chapterbib
和 subfile
,不得不在两个版本之间切换,十分痛苦。
这时宏的强大之处就体现出来了:
在LaTeX中同时使用chapterbib
和subfile
首先,在main.tex
的document中定义一个宏\BuildingFromMainFile
,用来标记是从main.tex
编译的,然后将subfile
改为include
:
1
2
3
4
5
6
7
% main.tex
\usepackage{subfiles}
\begin{document}
\newcommand*{\BuildingFromMainFile}{}
\subfile{chapter1}
\subfile{chapter2}
\end{document}
下一步,在章节文件中检查是否定义了上述宏\BuildingFromMainFile
。 如果没有定义的话,说明是从章节文件编译的,那么会自动添加preamble:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% beginning of chapter1.tex
\ifdefined\BuildingFromMainFile
\else
\documentclass[main.tex]{subfiles}
\begin{document}
\fi
\chapter{A Good Chapter}
Hello world.
\bibliography{references}
\ifdefined\BuildingFromMainFile
\else
\end{document}
\fi
完工。