閑話休題

ブログの効能と言わば何ぞ其れ日々の由なし事の記帳に限らんや

TeXで複数のファイルを一つのファイルにまとめる簡単なおまじない(% !TEX root =hoge.tex)

Abstract

たくさんの.texファイルを結合用texファイルでコンパイルするにはたくさんの.texファイルの先頭に

% !TEX root =hoge.tex

というおまじないをかけておく.そうすると,結合用texファイル上でたくさんのtexファイルをコンパイルする事が出来るようになる*1*2
http://www.codepills.net//blog/2012/12/07/the-root-of-all-tex

Preface

卒論を書いていた時,最初は全ての章を一つのファイルにまとめて書いていた(仮ファイル名はcrazy.texとしておく).でもページ数が20頁を超えた辺りから行数は500行を超え,どの辺りに何のファイルがあるのかを把握するのが面倒くさくなってしまった.そこで各セクション毎に別々のファイルを作り(仮ファイル名はsec1.tex, sec2.tex,…secx.texとしておく),¥inputや¥includeを使ってcrazy.texをすっきりさせられないかと考えた.
ところがこれがなかなか厄介.こういう場合,crazy.texの構造は以下のようになる.

\begin{document} 
\input{sec1.tex} 
\input{sec2.tex} 
.
.
.
\input{secx.tex} 
\end{document}

というかたちで¥inputを使うのだが,secx.texコンパイルするときには当然secx.texに対して

\begin{document} 
.
.
.
\end{document}

を付けなければ行けないのに,全体をコンパイルするときにはこれをコメントアウトしないとcrazy.texコンパイルできない.もちろんプリアンブル部分もコメントアウトしなければいけないので,secx.texの数が増えるほどめんどくなってくる… どうしよう.

おまじないの出番

そこでsecx.texにおまじないを使う.まずは天下り的に構造を列挙.

crazy.tex

¥documentclass[11pt]{article}
¥usepackage{hogestyle}
¥usepackage{hogehogestyle}
¥usepackage{Gangnamstyle}
¥begin{document}
¥input{../sec1.tex}
¥input{../sec2.tex}
.
.
.
¥input{../secx.tex}
¥end{document}

プリアンブルのパッケージはsecx.texファイル全てに効いてくる.ただこの部分は普通の結合ファイルっちゃ普通の結合ファイル.

sec1.tex

<b>% !TEX root = ../crazy/crazy.tex</b>
¥section{第一章}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam et nisi tortor. Maecenas non diam id felis tempor fermentum vitae ac lorem. Ut aliquet erat vel tortor condimentum, sed auctor velit tincidunt. 
¥subsection{第一章第一節}
Pellentesque viverra, felis sed mattis porta, libero justo malesuada mauris, a tempus tellus sem eget neque. Aliquam tristique pharetra auctor. Donec tristique massa et arcu pulvinar, eu feugiat dolor suscipit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse et vestibulum nul

太字部分がおまじない.おまじないの右辺はsecx.texファイルから見たcrazy.texへの相対パスを記述する.ちなみに画像挿入などで画像のパスを記入する場合は,crazy.texファイルから見たパスを記入する事に注意.めんどくさければ絶対パスを記入しておけばよいが,ファイルを移動した際に確実にcrazy.texコンパイルできなくなるという難点を抱えている.
おまじないの後にはプリアンブルもbegin documentもなしにbodyすなわち¥section{}を書き始めてよい.
で,上のようにsecx.texファイルを作ってコンパイルすると,crazy.texコンパイルされて,sec1.texからsecx.texまでが連結されたpdfファイルが生成される.

細かい話

ここからはおまじないとはあまり関係ないけど,留意すべき点を列挙する.
目次=¥tableofcontentsはcrazy.texに記述.
¥inputの後には¥new pageを記述しておくとsectionが変わるごとに頁が変えられる.
bibtexを使う場合,¥bibliographystyle{hoge}と,¥bibliography{hogehoge}はcrazy.texに記述する.secx.texファイルでは普通に¥cite{hogekey}とかしておけば,参考文献はcrazy.texで指定した位置でキチンと表示される.

要するに

% !TEX root = crazy.tex
を試してみて下さい,ということです.