はじめに
TeXファイルを章ごとに分割して書きたかった時に見つけて作ったテンプレートについて,つらつら書きます.参考にしたサイトは以下の3つです.
-Subfiles and Referencing
-分割した LaTeX ファイルを subfiles を使ってコンパイルする
-How to use \graphicspath?
作ったテンプレ―トは,チャプターや章ごとにコンパイルでき,全体をまとめたファイルでもコンパイルできます.参考文献もつきます.
環境
subfileとprovidecommand,graphicspathという基本的な関数を使っているだけなので,古すぎない TeXLive を入れていれば大体できるかと思います.一応書いておくと,自分は更新してないので TeXLive2018 が入ってます.
自分の所属しているところでは,TeXLiveを皆が入れていてパスがまちまちなので,指定は相対パスで動かします.ほかの人に送って動くことを意識したので,.latexmkrc や bibファイル等をプロジェクトフォルダの中で完結させています.
フォルダ構成
フォルダ構成は以下のようになっています.
template <- ここを今回 homedir として指定している
│ Bib.bib
│ latexmkrc
│ main.tex
├─chapter
│ ├─conclusion
│ │ conclusion.tex
│ │ latexmkrc
│ └─ ...(上と同じ構成のもの)
├─content
│ └─conclusion
└─layout
mytemplate.sty
※ mytemplate.sty は,usepackage を並べて自分用の関数等をいれたもので今回は関係ないです.
今回のキモ
ドキュメントクラスは,プリアンブルの最初に書かなくても動くらしいです.これを使うことで,パスを指定する関数を作って \providecommand で上書きをしないようにすれば相対パスを使えます.
\documentclass[11pt, a4paper, twocolumn]{ltjsarticle}
\providecommand{\homedir}{.} % \homedir ってのはここを指すよっていう宣言
\providecommand{\subBiblio}{}
\usepackage{subfiles}
\graphicspath{{\homedir/content/}{\homedir/content/principle/}}
% (プリアンブル略)
\begin{document}
\subfile{\homedir/chapter/conclusion/conclusion}
% (他チャプターのsubfile)
\bibliographystyle{junsrt}
\bibliography{\homedir/Bib}
\end{document}
% subfile単体で実行した場合のやつ
\providecommand{\homedir}{../../} % `\homedir/'から始まるのは,上の上のフォルダだよって宣言
\providecommand{\subBiblio}{
\bibliographystyle{junsrt}
\bibliography{\homedir/Bib}} % 参考文献用
% subfileにより本体のプリアンブルを呼び出す
\documentclass[\homedir/main.tex]{subfiles}
\begin{document}
% (省略)
\subBiblio
\end{document}
\homedir という関数がキモで,conclusion.tex をコンパイルするときも main.tex をコンパイルするときも main.tex のあるフォルダを指します.また,biblio 関数も main.tex と同じ場所の Bib.bib を指してbibliography を呼び出します.
また,graphicspathを,\homedir/content にしているので,画像を入れるときはファイル名だけで動くはずです.
簡単な説明(補足)
graphicspathとは
指定したフォルダを画像を呼び出すときのパスに追加するコマンドです.追加しておけば,いままで \includegraphics{ ./folder/... /hoge.pdf } としていたものを\in(略){ hoge.pdf }だけで呼び出せるようになります.
\grahpicspath{{dir1}{dir2}....{dirN}}
prvidecommandとは
既に同名の関数が定義されている場合は定義しない関数です.基本的には \newcommand 等と同じ使い方です.
subfileとは
subfileコマンドは,親のプリアンブル(宣言したコマンド等)を読みだせるものです.使い方は\begin{document}から\end{document}の間に
\subfile{子のファイルへのパス}
と入れて,子のファイルのドキュメントクラスの定義のときに
\documentclass[親のファイルへのパス]{subfile}
という形で使います.