LaTeX 是否支持原生多文件管理?

LaTeX 是否支持原生多文件管理?

这实际上不是一个实际问题,而是一个学术问题:

我使用 emacs 来编写我的 LaTeX 文件,为了处理多文件文档,我在每个文件的末尾都包含一个局部变量%%% TeX-master: "master",告诉 emacs 当我编译此文件时,我实际上想要编译文件“master.tex”。

现在我只是想知道是否有办法在 LaTeX 中做到这一点,\setmaster{master}或者\includedin{master}可以简单地将其放在文件的开头,然后直接告诉编译器它应该首先开始查看另一个文件。

答案1

这是可能的,但有重大限制。假设我们有master.texsecondary.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.logmaster.pdf,但secondary.log。这是 TeX 的内置行为,无法修改:一旦 TeX 启动并打开文件进行输入(在本例中为),它就会使用从中或从命令行选项中得出的名称secondary.tex打开文件。.log-jobname

因此,这种方法并不比使用编辑器或前端的功能来说明主文件是什么更好。它们中的许多都有此功能,因此这应该是首选方法。

arara答案中概述的方法arara:制定规则,从章节文件编译主文件值得一看,因为它们独立于正在使用的编辑器/前端。

相关内容