\input
, \include
によるファイル分割の問題点
学位論文など大規模な LaTeX 文書では,次のようにファイルを分割するのが一般的だと思います.
\documentclass{jsarticle}
\usepackage[dvipdfmx]{graphicx}
\graphicspath{{images/}}
\title{分割した{\LaTeX}ファイルを\texttt{subfiles}を使ってコンパイルする}
\author{sankichi92}
\date{2016年12月30日}
\begin{document}
\maketitle
\input{introduction}
\end{document}
\section{\texttt{input}, \texttt{include} によるファイル分割の問題点}
分割した{\LaTeX}ファイルを個別にコンパイルできない.
しかし,この方法では introduction.tex
を単体でコンパイルすることができません.
私の場合,LaTeX ファイルを保存するたびに chktex
と latexmk
が走るようエディタで設定しているので,introduction.tex
を編集するたびにエラーが返されてしまいます.
また,introduction.tex
の変更を確認するために,main.tex
を毎回コンパイルするのは非効率的です.
そこで,パッケージ等を利用することで1,分割した LaTeX ファイルを個別にコンパイルできるようにすることを考えます.
subfiles
を用いたファイル分割
ここでは,subfiles
を紹介します.
subfiles
はパッケージファイルとクラスファイルがセットになったもので,TeX Live に含まれています.
subfiles
を用いると,ファイルの分割は次のようになります.
(sections
というサブディレクトリに分割したファイルをまとめることにします.)
\documentclass{jsarticle}
\usepackage{subfiles}
\usepackage[dvipdfmx]{graphicx}
\graphicspath{{images/}{../images/}}
\title{分割した{\LaTeX}ファイルを\texttt{subfiles}を使ってコンパイルする}
\author{sankichi92}
\date{2016年12月30日}
\begin{document}
\maketitle
\input{introduction}
\subfile{sections/body}
\end{document}
\documentclass[../main]{subfiles}
\setcounter{section}{1}
\begin{document}
\section{\texttt{subfiles}を用いたファイル分割}
\texttt{subfiles}を用いると,プリアンブルを共有したうえで,分割した{\LaTeX}ファイルを個別にコンパイルすることができる.
\end{document}
親になる main.tex
で subfiles.sty
を読み込み,\include
や \input
ではなく,\subfile
を用いて分割した LaTeX ファイルを指定します.
\subfile
を用いることで,子の \begin{document}...\end{document}
の外側を無視することができます.
そして,子の body.tex
では,ドキュメントクラスに subfiles.cls
を読み込み,そのオプションとして親を指定します.
これにより,子を個別にコンパイルできるうえ,親のプリアンブルを子に共有することができます.
より詳しい使い方はドキュメントを確認してください.
$ texdoc subfiles
ただし,subfiles
を用いても,ファイル間でラベルや文献を共有できないという問題が残ります.
たとえば,子で \ref
や \cite
を用いると,??
や [?]
のように出力されてしまいます.
よい解決策をご存知の方がいらっしゃいましたら,教えていただけると助かります.
ファイル分割のためのその他のパッケージ
CTAN の subdocs
というトピックにまとめられています.
以下,LaTeX ファイルの分割について調べる中でよく見かけたものを簡単に紹介します.
docmute
docmute
は,\input
, \include
を拡張して,読み込むファイルに \begin{document}...\end{document}
があればその内側のみを読み込むようにするシンプルなパッケージです.
分割した LaTeX ファイルのコンパイルについて日本語で調べると,docmute
を紹介している記事を多く見かけます.
しかし,docmute
ではプリアンブルの共有はサポートされていません.
個々の独立した LaTeX ファイルを include するのであれば docmute
は良いかもしれませんが,大規模な1つの LaTeX 文書を分割するのであれば,subfiles
の方が便利です.
standalone
子のプリアンブルを親で読み込んだり,一つの LaTeX ファイルを複数箇所で利用したりといった,より複雑な LaTeX ファイル分割を行うのであれば,standalone
を使うと良さそうです.
Multi-file LaTeX projects というタイトルの ShareLaTeX のドキュメントで,subfiles
とともに簡単な使い方が紹介されています.
この記事では,import
パッケージと組み合わせて,ネストした LaTeX ファイルの読み込みを行っています.
-
パッケージ等を利用せずに,分割した LaTeX ファイルを個別にコンパイルする方法は,効率的な LaTeX ファイル分割術 という記事で紹介されています. ↩