🤔

分割TeX fileを単一TeX fileに統合する

2021/11/12に公開
2

はじめに

論文など長めの文章を\LaTeXを用いて作成する場合, fileを複数に分けてtypesetすることが多いと思います.
preprint serverのarXivは単一\TeXfileしか受け付けていないので分割した\TeXfileを統合する必要があります[1].
2021/11/13追記:できました(Akio Taniguchiさん, ありがとうございます)
また, 投稿に際して他人には見せられない余計なcommentを削除してほしい, 画像などの外部fileも圧縮用に適切にまとまってほしいという思いもあると思います.
そのような要望に応えるものとして, CTANにも入っていて比較的使いやすそうなlatexpandtexdirflattenを紹介したいと思います.

なおどちらもdefaultでcommentを削除します.
latexpandのみoptionでcommentを残したものを出力することができます.

latexpand

基本的な使い方

\inputなどが記載されている親input.tex内の内容を展開してsubmit.texに出力する:

latexpand -o submit.tex input.tex

あるいは

latexpand input.tex > submit.tex

latexpandはsubmit用のdirectoryを作成しません.
したがって, 依存fileをまとめたsubmit用のdirectoryは自分で作る必要があります.
submit用のdirectoryを作成してくれるのは次に紹介するtexdirflattenです.

他のoptionや詳細については以下のCTANなどを確認してください.

詳細

https://ctan.org/pkg/latexpand?lang=en

texdirflatten

基本的な使い方

\inputなどが記載されている親input.texを適切に展開し, 依存fileをsubmit directory下に出力, copyします.
なお出力\TeXfileはinputと同一file名になりsubmit/input.texとなります.

texdirflatten -1 -f input.tex -o submit

理想的にはsubmitdirectoryがarXivにupload出来るようなものになっているはずです.
実際は.bblfileを処理してくれないため.bblfileがある場合(つまりsubmitする\TeXsourceに文献情報を展開しない場合)はそのままではsubmitできません.

option summary

option 別名 説明
--file FILE -f FILE 入力\TeXfileをFILEとして指定します
--onetex -1 \input{...}\include{...}を展開します.
--output DIR -o DIR 指定したDIR下に出力されます. 指定しない場合flat directory下に作成されます.
--imgexts EXTENSIONS 画像fileを探索する際に, 参照する拡張子の順番です. 該当する拡張子が見つかった場合その時点で探索を停止します.指定しない場合, 拡張子なし, .eps, .pdf, .pstexの順で探索します. 指定しない場合, 同名のeps fileとpdf fileがある場合, eps fileが読み込まれることに注意してください[2].
--debug debug mode
--version -V versionの表示
--help -? helpの表示

詳細

https://ctan.org/pkg/texdirflatten?lang=en

参考文献

latexpandtexdirflatten以外にも色々なscriptなどが紹介されています.
https://tex.stackexchange.com/questions/21838/replace-inputfilex-by-the-content-of-filex-automatically

脚注
  1. 分割したままsubmitする方法があれば誰か教えてください ↩︎

  2. source内で拡張子込みでfileを指定していればこのoptionを指定しなくても問題は起きない気がしますが... ↩︎

Discussion

Akio TaniguchiAkio Taniguchi

分割したままsubmitする方法があれば誰か教えてください

以下のようにディレクトリ構造がフラットであれば、特に問題なく投稿できると思います。
(手前味噌で恐縮ですが、投稿例がこちらにあります)

.
├── main.tex # 親ファイル
├── figure_1.pdf
├── figure_2.pdf
├── section_1.tex
└── section_2.tex

ちなみに、個人的にはインプットファイルや図表などはディレクトリに入れて管理したいので、
main.texのプリアンブルに以下のようなコマンドを書いています。

\makeatletter
\def\input@path{{./}{sections/}}
\makeatother
\graphicspath{{./}{figures/}}

こうすることで、執筆時は以下のようなディレクトリ構造にしておくことができて便利です。
(ファイルが././sections/のどちらにあっても\input{section_1}で呼び出せます)

.
├── main.tex
├── figures
│   ├── figure_1.pdf
│   └── figure_2.pdf
└── sections
    ├── section_1.tex
    └── section_2.tex
ultimatileultimatile

コメントありがとうございます.
以前flat構造でtypesetできなかった原稿でやり直してみたところ, 分割fileのままarXivでtypesetできました.
以前試したとき(2021年2月)はできなかった気がするのですが, 仕様が変わったのですかね.
こういう記述があるので僕の気のせいではないとは思うのですが...