lrcgfのブログ

趣味としてプログラミングを始めたので、そのあたりの話を中心に書いていくつもりです。

texファイルを分割して管理、ファイルごとにコンパイルできるようにする。

OS:windows7 tex:?

http://www.geocities.jp/kimukimuojisan/tex.htmlhttp://www.geocities.jp/kimukimuojisan/tex.htmlに従って、

  • texファイルをsectionごとなどに分割して作業する、
  • さらに、分割された部分ファイルごとにコンパイルして中身を確認できるようにする

とできるようにした。しかし、ファイルをフォルダごとにまとめてみやすくしたところ、ファイルの相対パス指定のときに

\include{../foldername/filename}

と親フォルダを参照するとコンパイルがうまくいかないエラーが生じた。

I can't write on file `filename.aux'. \@include ...\immediate \openout \@partaux #1.aux \immediate \write \@partau..

ぐぐってみると、セキュリティー上の理由で親フォルダ以下にあるファイルを編集することがデフォルトでは禁止されているようだ。\includeは.auxファイルを書き換えるらしく、この禁止規定に引っかかる。しかし\inputを使うとファイルの書き換えが起きないらしく、問題がない。そこで次のような工夫でこの問題を回避した。

一番上のディレクトリには

  • begin_and_endフォルダ
  • mainフォルダ
  • file1フォルダ
  • file2フォルダ ・・・

をつくる。 begin_and_endフォルダには参照先サイトにあるbegin.tex, end.texをおく。

mainフォルダ内には参照先サイトにあるmain.texをおく(ただし、正しい相対パスを指定する)。main.tex内で他のファイルを読み込む部分はすべて

\input{..\begin_and_end\begin}

等のように\inputを使っているので問題は起こらない。

file1フォルダ内にfile1.texをおく。file1.tex内で例えばbegin.texを読み込みたいときは、一度file1フォルダ内にbegin_escape.texを作る。begin_escape.texには

\input{..\begin_and_end\begin}

とだけ書く。 file1.texでは

\include{begin_escape}

と記述する。

これで、\includeを使うときは親フォルダを参照せずいったん避難先ファイルを参照させて、そこから親フォルダ以下にある本当に読み込みたいファイルを\inputで読み込めるようになる。 file1のなかで直接\inputを使うとmain.texのコンパイル時にエラーになるので、このような方法を用いた。