在 LaTeX 的使用过程中,往往需要多个文件,甚至大量文件相互支持和协作,以完成最终 PDF 的编译。这些文件经过 LaTeX 编译引擎,按一定的规则编译后,生成最终的一个独立的 PDF 文件。
这与其他一些常见软件(如 Word、Powerpoint 等)的工作模式完全不同,在这些软件中,往往是将所有工作都集中在一个文件中进行处理。因此,LaTeX 中使用到的文件的命名、组织与管理都需要有更多细节需要考虑。
所有*.tex
、*.bib
、*.sty
、*.cls
等纯文本文件源代码文件,请务必使用 UTF-8 编码。否则,可能在打开文件后或编译后的 log 文件中会出现著名的“烫烫烫”、“屯屯屯”、“锟斤拷”乱码问题。
由于排版一个PDF往往需要用到多个,甚至大量其他支持文件,并且在 LaTeX 的编译过程中也会产生*.aux
、*.toc
、*.log
等辅助文件和日志文件。因此,强烈每当开始一个新的排版任务,就建立一个独立文件夹来存储该任务相关的所有文件。由于 LaTeX 发行版是开源免费软件,类似 TeXStudio 的编辑器IDE也是开源免费软件,一般在处理文件名及其路径名时,往往无法正确解析带有空格和非英文的名称。因此,强烈建议在文件名及其路径中不要使用空格和中文。
另外,文件命名一定要具备自明性,禁止使用类似“a.tex”、“b.tex”、“c.bib”、“d.png”等这不知所云的文件命名。同时,文件名也不宜过长,个人建议使用“8.3 规则”命名,即 8 个字符构成主文件名,3 个字符构成后缀名。
建议:在多文件结构中,请将主控文件命名为 main.tex。
为便于进行各类文件的管理和处理,应该将 tex 子文件、插图文件、文献数据库 bib 文件等按不同类别存储在不同的文件夹中。例如,对于一篇毕业学位论文的排版,一个建议的目录结构如下:
在使用这些文件时,一般需同时指定该文件的路径。需要强调的是绝对不能使用绝对路径,只使用当前文件夹及其子文件夹中的文件。
如果需要的文件在子文件夹中,则需要用“/”分割路径中的各级文件夹(禁止使用“\\”分割),如:
% 插入图片
\includegraphics[width=0.5\textwidth]{figs/chap01/fig01-01.png}
...
% 插入代码,用minted宏包排版C语言代码
\inputminted{c}{codes/chap01/01helloworld.c}
对于插图,如果使用了graphicx 宏包,则可以使用graphicspath{{figs/}{pics/}}
指定插图所在的文件夹,如:
% 子文件中
% 插入图片
\includegraphics[width=0.5\textwidth]{chap01/fig01-01.png}
在文档编写过程中,将复杂的内容切分成不同的子文件,然后用 input 或 include 载入子文件是一种常用的操作。这样,可以在每个子文件中仅关注少量内容,便于集中精力进行撰写,如:
% 导言区
% 载入需要的宏包
\input{settings/packages.tex}
% 进行必要的设置
\input{settings/format.tex}
...
\begin{document}
\include{contents/chap00-abs.tex}
\include{contents/chap01-intro.tex}
...
\include{contents/app03-resume.tex}
\end{document}
同时,可以通过用“%”注释操作,将暂时不关注的 input 或 include 语句注释,以减少当前参与编译的内容,加快编译速度或是用“注释大法”缩小错误定位范围,以定位错误、分析错误和解决错误,如:
...
\begin{document}
\include{contents/chap00-abs.tex}
%\ include{contents/chap01-intro.tex}
% ...
% \include{contents/app03-resume.tex}
\end{document}
注释后后,则只需要关注“chap00-abs.tex”文件中的内容,
在多文件结构的子文件中,可以使用魔法注释指定主文件,从而实现多带带打开子文件也能编译的目的,如:
% 其它内容
...
% 魔法注释,指定主控文件为上一级文件夹中的“main.tex”文件
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../main.tex"
%%% End:
显然,如果主控文件采用“main.tex”命名,在各类子文件中用魔法注释指定主控文件及路径,则可以构造一个万能的 LaTeX 撰写文件结构框架。以后,每创建一个新的项目,只需要将该框架拷贝一下就可以了。
Happy LaTeXing!