
これは実際には実用的な質問ではなく、むしろ学術的な質問です。
私は 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
とで囲みます。\fi
secondary.tex
最初の制限。パスはセカンダリ ファイルの場所を基準とするため、すべてのファイルが同じディレクトリに存在する必要があります。 を指定し\input{../master}
てから をmaster.tex
呼び出すことはできません\input{subdir/secondary}
。
2番目の制限。TeX は、オプション でコマンドラインから上書きされない限り、ジョブ名を最初の入力ファイルと同じに設定します-jobname
。そのため、エディター/フロントエンドの協力がなければ、 や は得られず、 が得られますmaster.log
。master.pdf
これは TeX の組み込み動作であり、変更できません。TeX が起動して入力用のファイル (この場合は)secondary.log
を開くとすぐに、そのファイルまたはコマンドライン オプションから派生した名前でファイルが開かれます。secondary.tex
.log
-jobname
したがって、このようなアプローチは、エディターまたはフロントエンドの機能を使用してメイン ファイルが何であるかを指定するよりも優れているわけではありません。多くのエディターまたはフロントエンドにはこの機能があるため、これが推奨される方法です。
arara
回答で概説した方法は、arara: 章ファイルからメインファイルをコンパイルするルールの作成これらは、使用されているエディターやフロントエンドから独立しているため、一見の価値があります。