背景
-
2010 年以降の W32TeX または TeX Live を使っている。
-
大規模な LaTeX 文書を作成している。1
-
ソースファイル分割を行っていて、かつ大量の画像を使用しているので、文書のコンパイルに必要なファイルが大量にある。
-
そこでファイルを階層ディレクトリに置いて管理したい。
こんな感じthesis/ |-- style/ | |-- thesis.cls | |-- mytools.sty | |-- tcphaistan.sty | `-- ... |-- bib/ | |-- thesis.bib | `-- names.bib |-- image/ | |-- photo/ | | |-- hometown.jpg | | |-- sayaka28.jpg | | `-- ... | |-- misc/ | | |-- network-01.png | | |-- danger-bend.pdf | | |-- smiling.png | | |-- sushi.png | | `-- ... | |-- graph/ | | |-- ex-T13-low-01-c.eps | | |-- ex-T13-high-01-c.eps | | `-- ... | `-- ... |-- part1-ARE/ | |-- graph/ | | |-- ex-T11-base-01.eps | | `-- ... | |-- bib/ | | `-- ARE.bib | |-- tikz/ | | `-- ARE1-workflow.tex | |-- 00lead-ARE.tex | |-- 10introduction-ARE.tex | |-- 11tex-ARE.tex | |-- 13tikz-ARE.tex | |-- 20advanced-ARE.tex | `-- ... |-- part2-SORE/ | |-- 00lead-SORE.tex | `-- ... |-- part3-QORE/ | |-- 00lead-QORE.tex | `-- ... |-- 01acknowledge.tex |-- 02abstract.tex `-- thesis.tex
-
ソース中では次のように相対パスでファイルを指定する。
こんな感じ\include{part1-ARE/00lead-ARE.tex} \includegraphics[width=1em]{image/misc/sushi.png}
問題
- このままだと、ソース中にディレクトリを記述しているので、文書の編集中にファイルを移動させることが自由にできない。
-
カレントディレクトリとその下位にあるファイルが自動的に探索されるようにしたい。
-
つまり、ソース中ではファイル名しか書かないようにしたい。
こんな感じ\include{00lead-ARE.tex} \includegraphics[width=1em]{sushi.png}
-
もちろん、同名のファイルを複数置くことはしない前提。
-
解決法
環境変数 TEXINPUTS
に .//;
という値を指定する。
set TEXINPUTS=.//;
export TEXINPUTS='.//;'
これにより TeX ソースファイル(*.tex
、*.sty
、*.cls
など)および画像ファイル(*.png
、*.pdf
など)について、カレントから再帰的に探索されるようになる。
同様に、環境変数 BIBINPUTS
に .//;
という値を指定すると、文献データベースファイル(*.bib
)について、カレントから再帰的に探索されるようになる。
make 系のツールを使っているのであれば、恐らくそれが持つ環境変数設定の機能を利用できると思われる。
※詳細については以下の記事を参照されたい。
注意点
“ローカルの texmf.cnf”で同様の設定をする(変数 TEXINPUTS
や BIBINPUTS
を設定する)ことで、カレントから再帰的に探索される設定を既定にすることができる。しかし、そのような設定は意図しない副作用を起こす危険性があるので推奨しない。
-
これぐらいの大規模な文書が作れるくらいには LaTeX に習熟しているものとする。 ↩