LaTeX処理自動化ツール ClutTeX をリリースした | 雑記帳 (original) (raw)

2年ほど前からマイペースで作っていたLaTeX処理自動化ツールClutTeXだが、ある程度の機能が整ったと判断し、バージョン0.1をリリースした。ClutTeXに関しては2年前にもブログ記事で紹介したが、初のリリースを迎えた今、改めてその機能と使い方を紹介する。

リリースしても、使ってもらえなくては意味がない。このツールをLaTeXユーザーに広く使ってもらうには、TeX Liveへの収録が不可欠である。というわけで、リリースに合わせてCTANへアップロードした(CTANへのアップロードはTeX Liveへの収録の前提条件らしいので)。そして、TeX Liveのメンテナーの方にTeX Liveへ収録していただいた。

(TeX Liveがどういうものかについては、氏による記事が詳しい: TeX Live をホンキで語る ― 「TeX Live ってなんだろう?」 – Acetaminophen’s diary

よって、TeX Live ManagerでTeX Liveを最新版にアップデート(ターミナルからだったら $ sudo tlmgr update –all)すれば、cluttexがインストールされるはずである。

きてますね #cluttex pic.twitter.com/bmDXULK9En

— だめぽラボ@技術書典5 か38 (@mod_poppo) October 11, 2018

これなに?

LaTeXの処理を自動化するツールである。

自動化というのは、具体的には

ことを指す。

その際に、作業ディレクトリを汚さない、つまり .aux だの .log だの .out だのを撒き散らさないことが最大の特徴である。

基本的な使い方

コマンドラインで

platex foo.tex dvipdfmx foo.tex

と打っていたところを

cluttex -e platex foo.tex

に変える。pTeX系でも一発でPDFが生成される。

LuaLaTeXなら

cluttex -e lualatex foo.tex

となる。

cluttexを使わない場合:余計なファイルが大量にできる

cluttexを使った場合:スッキリ!

主なオプションは

である。このほか、 --synctex=1--shell-escape 等のTeX互換オプションを指定できる(いくつかのオプションはデフォルト値が標準と異なる)。

長いオプションを指定する場合、ハイフンは基本的に2つ必要である。ただし、TeX互換オプションに関してはハイフンが1つでも良い(-color は受け付けないが -synctex=1 は受け付ける)。

複数の短いオプションをハイフン1つの後にまとめて書くことはできない。

ファイル名の後にオプションを指定することは今のところできないようになっているが、要望があれば帰るかもしれない。

実装済みの機能と今後の予定

現時点で実装済みの主な機能:

今後実装したい機能:

ドキュメント化:

現時点で判明している問題:

思想

LaTeX文書処理ツールにはそれぞれの思想がある。例えば、「ビルド手順をユーザーが明示するか、ツールが適切に判断するか」「プロジェクトの設定を設定ファイルに書くか、magic commentとしてファイル自体に記述するか」などはツールの設計者によって判断が分かれるところだろう。

cluttexは今のところ、

という方針を取っている。

cluttexでいろんな機能を提供できれば便利かもしれないが、実装の複雑化、作業量の増大のことを考えると、無節操に機能を追加していけるものではない。大事なのは「作業ディレクトリを汚さずに処理をする」ことで、最低限、cluttexはそのための部品として使えたら良い。

例えば、「プロジェクトごとの設定はコマンドラインオプションによって明示する」という方針を取っているが、これが面倒なら、シェルスクリプト(Windowsならバッチファイル)、Makefile や llmk のようなツールを別途利用すれば良い。cluttexはそういうツールから使うための便利なインターフェースを提供したい。

そういう意味では、監視モードつまり「入力ファイルの変更を検知して自動で再処理する」という機能は異色かもしれない。この機能の実現にはソース文書の名前だけではなく、その依存関係(\input, \includeするサブ文書、画像等)のリストも必要となるが、そのリストを得るにはcluttex本体と密結合していた方が良いと考えられたからそういう風にした。しかし、「依存関係を機械可読な方法で吐き出す」機能を実装すれば、監視モードは外付けできるようになるかもしれない。

最後に

「cluttexを使ってみた」「cluttexにこういう機能が欲しい」「こういう状況でうまく動かなかった」などの声をお待ちしています!

何か問題があれば、Twitterで呟く(ハッシュタグ #cluttex 推奨)か、GitHub Issuesに報告してください(後者は日本語でもOKです)。