下の階層以外のディレクトリにあるファイルに対して\includeを用いる時のエラー回避
LaTeXのソースを分割して編集する時に\includeコマンドを用いると、階層以下に無いディレクトリのファイルではエラーが出ます。その理由を調べてみました。
(How) can I include the file somedir/file.tex in the file somedir/subdir/anotherfile.tex (TeX – LaTeX Stack Exchange ) によれば、セキュリティ上、texはファイルの書き込みをパスの階層構造の下のみに制限しています。これが、同レベル以下ではない外部ファイルに対して、\inputは成功して\includeが失敗する理由のようです。。
このセキュリティ上の制限を解除するにはtexmf.cnfで
openout_any=a
とすればよいです。(ただしセキュリティ上の制限を解除していることを理解して、自己責任でお願いします。このようにして何か不具合が起きても当方は責任を持ちません。)
ただ、ユーザーレベルに対してはディレクトリ階層の制限は許可して欲しいですね。ファイル・ディレクトリのパーミッションは別に設定しているのだから。
\input vs \include
When should I use \input vs. \include? によれば
- \input
- low levelなmacroで、LaTeXソース中のどこでも使える(preambleなど)
- ネストできる
- 外部ファイルを読み込むだけ。副作用の心配もないが、さほどすばらしい効果もない
- \include
- やっていること
- ファイルの前後に\clearpageを入れる(ページが変わる)
- 新しい.auxファイルを作る
- 内部で\inputコマンドを用いてファイルを読み込む
- 主な特徴
- document内だけで使える。そしてpage breakして良い箇所だけ。
- ネストできない。つまりincludeしているファイル中でincludeは使えない。
- includeしたファイルの中で実際にコンパイル(LaTeX処理)したいファイルを\includeonly{filename1,filename2,…}で指定できる。
- やっていること