$\LaTeX$で文書を作成する際,.texファイルの見通しをよくするために複数の.texファイルに分けて執筆する方法があります.
しかし,この方法だと,1つの.texファイルにまとめて提出しなければならない状況で困ります.例えばarXivに投稿するには,1つの.texファイルで提出する必要があります.
そこで作ったのがこれです!
これは,\input
や\subfile
によって複数ファイルで作成されている$\LaTeX$プロジェクトを,1つの.texファイルにまとめるプログラムです〜
使い方は簡単.例えばmain.tex
が出発点にある$\LaTeX$プロジェクトなら,
python3 mergelatex.py main.tex
とやればおーけー.\input
と\subfile
の参照先を再帰的に渡っていきます.
ちょっと詰まった点
実は,\input
と\subfile
とで引数の仕様がちょっと違います.
-
\input
:参照先ファイルは,常に出発点にある.texファイルから見たパスで書きます. -
\subfile
:参照先ファイルは,当該コマンドが書かれた.texファイル(自分自身)から見たパスで書きます.
なので,ちょっとだけ実装が難しかったですね.
安全性
1つにまとめた後のファイル名は,初期設定では,出発点として指定されたファイル名に対し,merged_
を先頭に付けたものとしています.
また,書き出し先のファイルが既にあった場合は,上書きをしてよいかどうかの確認が出ます.
せっかく書いた.texファイルが無駄にならないように(といっても自分の書いたものが完全に消えることはないですけど)安全策を講じています.
動作例
次のような$\LaTeX$プロジェクトを考えます(詳細は当該GitHubのexampleを参照).
📄entry.tex
📄input_sub.tex
📄subfile_sub.tex
📄subfile_nest.tex
📂subfile_dir
📄subfile_dir_sub.tex
📄subfile_dir_nest.tex
📂input_dir
📄input_dir_sub.tex
📄input_dir_nest.tex
このプロジェクトはentry.tex
を起点としています.これを指定して本プログラムを実行すると,▼こんなのがでます.
\documentclass{article}
\usepackage{subfiles}
\begin{document}
Entry\\
% > input_sub.tex > : LaTeX Merger
Input Sub\\
% < input_sub.tex < : LaTeX Merger
% > subfile_sub.tex > : LaTeX Merger
Subfile Sub\\
% >> subfile_nest.tex >> : LaTeX Merger
Subfile Sub - Nest\\
% << subfile_nest.tex << : LaTeX Merger
% < subfile_sub.tex < : LaTeX Merger
% > input_dir/input_dir_sub.tex > : LaTeX Merger
Dir Sub\\
% Note that the entry file's directory - based relative path is required for \input.
% >> input_dir/input_dir_nest.tex >> : LaTeX Merger
Input Dir Sub - Nest\\
% << input_dir/input_dir_nest.tex << : LaTeX Merger
% < input_dir/input_dir_sub.tex < : LaTeX Merger
% > subfile_dir/subfile_dir_sub.tex > : LaTeX Merger
Subfile Dir Sub\\
% >> subfile_dir/subfile_dir_nest.tex >> : LaTeX Merger
Subfile Dir Sub - Nest\\
% << subfile_dir/subfile_dir_nest.tex << : LaTeX Merger
% < subfile_dir/subfile_dir_sub.tex < : LaTeX Merger
\end{document}
見事,全てのファイルが1つになりました.また,ネスト先まで正しく参照されていることも分かります.