LaTeX はネイティブのマルチファイル管理をサポートしていますか?

LaTeX はネイティブのマルチファイル管理をサポートしていますか?

これは実際には実用的な質問ではなく、むしろ学術的な質問です。

私は Emacs を使用して LaTeX ファイルを作成し、複数ファイルのドキュメントを処理するために、各ファイルの末尾にローカル変数を含めます。この変数は、%%% TeX-master: "master"このファイルをコンパイルするときに実際にはファイル「master.tex」をコンパイルすることを Emacs に指示します。

今、私は、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とで囲みます。\fisecondary.tex

最初の制限。パスはセカンダリ ファイルの場所を基準とするため、すべてのファイルが同じディレクトリに存在する必要があります。 を指定し\input{../master}てから をmaster.tex呼び出すことはできません\input{subdir/secondary}

2番目の制限。TeX は、オプション でコマンドラインから上書きされない限り、ジョブ名を最初の入力ファイルと同じに設定します-jobname。そのため、エディター/フロントエンドの協力がなければ、 や は得られず、 が得られますmaster.logmaster.pdfこれは TeX の組み込み動作であり、変更できません。TeX が起動して入力用のファイル (この場合は)secondary.logを開くとすぐに、そのファイルまたはコマンドライン オプションから派生した名前でファイルが開かれます。secondary.tex.log-jobname

したがって、このようなアプローチは、エディターまたはフロントエンドの機能を使用してメイン ファイルが何であるかを指定するよりも優れているわけではありません。多くのエディターまたはフロントエンドにはこの機能があるため、これが推奨される方法です。

arara回答で概説した方法は、arara: 章ファイルからメインファイルをコンパイルするルールの作成これらは、使用されているエディターやフロントエンドから独立しているため、一見の価値があります。

関連情報