マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

効率的な LaTeX ファイル分割術、のための docmute パッケージ

背景
  • 大規模な LaTeX 文書の作成において、ソースファイルを分割して管理してる。
  • その上で、“今書いている章だけ”コンパイルするため、大本のファイル(thesis.tex)中の \input\include を適宜コメントアウトしている。あるいは \includeonly を利用している。

ソースファイル分割の例

[thesis.tex]
\documentclass{foo-thesis}
\usepackage{listings}
\usepackage{docmute}
\title{プログラミング教育における\\{\TeX}言語の活用と課題}
\author{匿名 希望}
\begin{document}
\maketitle
\input{abstract}% 要旨など
\include{introduction}% 第1章 はじめに
\include{tex-latex}% 第2章 TeXとLaTeX
%...
\end{document}
[introduction.tex]
\chapter{はじめに}
近年、…………
問題
  • thesis.tex をチョット編集するのすら面倒くさい。
  • \include されている introduction.tex 等のファイルをそのままコンパイルできればよいのに。
    • これらのファイルは \documentclass が含まれないので単体ではコンパイルできない。
    • もちろん、\documentclass を書いてしまうと今度は \include(や \input)ができなくなる。
  • そして、

(あー面倒だから、あとはこの記事でも見てくれ。)

解決法

docmute パッケージを利用する。

すなわち、thesis.tex のプレアンブルに次の 1 行を追加する。

\usepackage{docmute}

これで、thesis.tex から読み込まれるファイルが \documentclass から始まっている場合、\begin{document}〜\end{document} の内部以外の部分が無視されるようになる。つまり、introduction.tex は以下のように書くことができて、単体でコンパイルできるようになる。

\documentclass{foo-thesis}
\begin{document}
\chapter{はじめに}
近年、…………
\end{document}
注意点

当然ながら、introduction.texコンパイルした場合に thesis.tex (特にそのプレアンブル)が参照されるわけではない。従って、例えば introduction.tex で listings が必要なのであれば、そのファイルのプレアンブルで必要な \usepackage を書く必要がある。

大本のファイルと内部読込のファイルで設定を共通化したい場合は、設定を別ファイルに切り出す、という方法を docmute パッケージの作者は奨めている。

[thesis.tex]
\documentclass{foo-thesis}
\usepackage{docmute}
% settings.tex に \usepackage とかを書いておく
\input{settings}
\title{...}
\author{...}
\begin{document}
%...以下略
[introduction.tex]
\documentclass{foo-thesis}
% ここでも同じ設定ファイルを読む
\input{settings}
\begin{document}
\chapter{...}
%...以下略

もっと素敵なモノがほしい場合は

このように docmute パッケージは非常にシンプルな設計となっているため、簡単に使うことができる。その反面、(上の例でみたように)少し複雑な状況に対応するのに相応の工夫が必要になる。

これに対して、subfiles というパッケージを利用すると、ファイル分割に関する通常の状況をもっとスマートに取り扱うことができる。このパッケージの使い方を解説した記事を紹介しておく。


*「あれれ、普段はパッケージの紹介記事とか書かないのにナンデ?」
ZR「いや、ちょっとアレを見てアレな気分になったので……」