読者です 読者をやめる 読者になる 読者になる

omake+latexdiff-gitで作る最強のTeX環境

デモ

これがぼくのかんがえたさいきょうのてふかんきょうだ。

概要

omakeでディレクトリの変更を監視して、TeXファイルを自動コンパイルする。 コンパイル時にlatexdiff-gitで前回のコミットとの差分を出力し、それもコンパイルする。

はじめに

最近周りでTeXを書いている人があまりいない。Word派の主張を聞いているとどうもコンパイルがイケてないらしい。 実際、TeXを書いているときにいちいちmakeとか叩くのは正直だるい。 (コマンドとか無理という主張はどうしようもないので無視した)

探しているとこんな最高の記事を見つけた。 導入するついでに以前書いたものを合体させて、 自動で本体と差分のpdfを出力するようにする。

  • OMake 0.9.8.5
  • latexdiff 1.0.2

omake

omakeについては、こちらを参考にした。 omakeはなんかよくわからんけど、makeの代わりに使えるもの。 まだ全く調べてないけど、今回使ったディレクトリ監視だけでなく他にも色々できそう。

aptでインストールする。 famというのはディレクトリの監視に必要らしい。

 $ sudo apt-get install omake fam

適当なTeXファイルのあるディレクトリで、

 $ omake --install

とすると、OMakefileとOmakerootというファイルが生成される。

latexdiff

こちらを参考にして日本語に対応する必要がある。

latexdiffについては以前こんなものを書いた。 以前の記事では以下のようなコマンドを叩いて差分ファイルを生成していたが、

git ldiff HEAD~1 > diff.tex

色々いじっているうちに、 latexdiff-gitというコマンドが用意されていることに気づいた。 このコマンドを使うと以下のように簡単に前回のコミットとの差分をTeX形式で出力できる。

latexdiff-git -r -e utf8 test.tex

合体させる

こちらこちらの記事にあるOMakefileにlatexdiffの部分を追記して、以下のようなOmakefileを作った。

TARGET = test
DIFF = test-diff
IMAGE_DIR = figs

LATEX = platex
BIBTEX = pbibtex
DVIPDFM = dvipdfmx
LATEXDIFF = latexdiff-git

DIFFFLAGS = -r -e utf8 --force

# Bounding Box生成コマンド
EBB = extractbb

# グロブ展開に失敗したときに空の文字列を返すようにする
GLOB_OPTIONS = i

# Bounding Boxの生成ルール
.SUBDIRS: $(IMAGE_DIR)
    %.xbb: %.png
        $(EBB) $<
    %.xbb: %.jpg
        $(EBB) $<
    %.xbb: %.pdf
        $(EBB) $<

TEX_FILES = $(glob *.tex */*.tex)
BIB_FILES = $(glob *.bib)
EPS_IMAGE_FILES = $(glob $(IMAGE_DIR)/*.eps)
OTHER_IMAGE_FILES = $(glob $(IMAGE_DIR)/*.png $(IMAGE_DIR)/*.jpg $(IMAGE_DIR)/*.pdf)
IMAGE_FILES = $(EPS_IMAGE_FILES) $(OTHER_IMAGE_FILES)
XBB_FILES = $(addsuffix .xbb, $(removesuffix $(OTHER_IMAGE_FILES)))

# コンパイルに必要なファイル
TEXDEPS[] = $(TEX_FILES) $(BIB_FILES) $(IMAGE_FILES) $(XBB_FILES)

LaTeXDocument($(TARGET), $(TARGET))
LaTeXDocument($(DIFF), $(DIFF))

.DEFAULT: $(TARGET).pdf $(DIFF).pdf

$(DIFF).tex:$(TARGET).tex
  $(LATEXDIFF) $(DIFFFLAGS) $<

.PHONY: clean
clean:
    rm $(glob *.toc *.log *.pdf *.dvi *.fls *.aux *.maf *.mtc *.bbl *.blg) $(XBB_FILES)

Emacsユーザーなら

after-save-hook にmakeを設定するだけでもいいじゃないかという気もする。

参考