
這其實不是一個實際問題,而更像是一個學術問題:
我使用 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:制定從章節文件編譯主文件的規則值得一看,因為它們獨立於正在使用的任何編輯器/前端。