这实际上不是一个实际问题,而是一个学术问题:
我使用 emacs 来编写我的 LaTeX 文件,为了处理多文件文档,我在每个文件的末尾都包含一个局部变量%%% TeX-master: "master"
,告诉 emacs 当我编译此文件时,我实际上想要编译文件“master.tex”。
现在我只是想知道是否有办法在 LaTeX 中做到这一点,\setmaster{master}
或者\includedin{master}
可以简单地将其放在文件的开头,然后直接告诉编译器它应该首先开始查看另一个文件。
答案1
这是可能的,但有重大限制。假设我们有master.tex
和secondary.tex
。
首先,应该如何\setmaster
定义?这很简单:
\makeatletter
\newcommand{\setmaster}[1]{%
% Make all later \setmaster commands to be no-ops
\global\let\setmaster\@gobble
% Start reading the master file
\input{#1}%
% When it's finished, don't read from this file any more
\endinput}
\makeatother
但在哪里应该\setmaster
定义什么?可以在文档本身中定义,也可以在个性化格式文件中定义。在第一种情况下,将定义括在\ifdefined\setmaster\else
和之间\fi
,因为我们不想在secondary.tex
输入 时读取它。
第一个限制。路径将相对于辅助文件的位置,因此所有文件都必须位于同一目录中:您不能\input{../master}
先master.tex
调用\input{subdir/secondary}
。
第二个限制。如果没有从命令行使用选项 覆盖,TeX 将作业名称设置为第一个输入文件-jobname
。因此,如果没有编辑器/前端的配合,您将无法获得master.log
或master.pdf
,但secondary.log
。这是 TeX 的内置行为,无法修改:一旦 TeX 启动并打开文件进行输入(在本例中为),它就会使用从中或从命令行选项中得出的名称secondary.tex
打开文件。.log
-jobname
因此,这种方法并不比使用编辑器或前端的功能来说明主文件是什么更好。它们中的许多都有此功能,因此这应该是首选方法。
arara
答案中概述的方法arara:制定规则,从章节文件编译主文件值得一看,因为它们独立于正在使用的编辑器/前端。