1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数のLaTeXファイルを1つにまとめる

Last updated at Posted at 2024-05-21

$\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つになりました.また,ネスト先まで正しく参照されていることも分かります.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?