TeXコンパイル用のMakefile
もう死んでて、毎週研究室のゼミ資料つくるだけの日常。
hogehoge.texをコンパイルするとして、以下のようなMakefileでコンパイル。dviをつくるときmake、psファイルを作りたいときはmake ps、pdfファイルを作りたいときはmake pdf。BibTeXファイルは~/docs/bibtex/あたりにあるgc.bib, gcbook.bib, embedded.bib。
RESUME = hogehoge
BIBS = gc.bib,gcbook.bib,embedded.bib
TEX = platex
BIB = jbibtex
DVIPS = dvips
DVIPDF = dvipdfmx
.SUFFIXES: .ps .dvi .tex .eps .pdf .bib
all: dvi
dvi: deps bib $(RESUME).dvi
ps: $(RESUME).ps
pdf: $(RESUME).pdf
force:
$(TEX) $(RESUME)
$(BIB) $(RESUME)
$(TEX) $(RESUME)
$(TEX) $(RESUME)
deps:
./texdep.pl $(RESUME).tex >deps
bib:
zsh -c "cp -p $(HOME)/docs/bibtex/{$(BIBS)} ."
clean:
-rm -f *.aux *.toc *.lot *.lof *.dvi *.log *.bbl *.blg *.pdf *.ps
remake: clean all
.tex.dvi:
$(TEX) $(RESUME)
$(BIB) $(RESUME)
$(TEX) $(RESUME)
$(TEX) $(RESUME)
.dvi.ps:
$(DVIPS) $(RESUME)
.dvi.pdf:
$(DVIPDF) $(RESUME)
-include deps依存関係を調べるtexdep.plはこんなの。
#!/usr/bin/perl use strict; use warnings; if(@ARGV == 0) { print "usage: $0 texfile\n"; exit -1; } my $texfile = $ARGV[0]; if($texfile =~ /([^\.]+)\.tex/) { my $texname = $1; print "$texname.dvi: ", join(' ', texdep($texfile)), "\n"; print "$texname.ps: $texname.dvi\n"; print "$texname.pdf: $texname.dvi\n"; } sub texdep { my ($texfile) = @_; my (@depls, @texls); open TEX, $texfile or die "cannot open $texfile"; while(<TEX>) { if(/\\input{([^}]+)}/) { print $1; push @texls, $1; } elsif(/\\verbatiminput{([^}]+)}/ or /\\includegraphics\[.+\]{([^}]+)}/) { push @depls, $1; } elsif(/\\bibliography{([^}]+)}/) { push @depls, map{"$_.bib"}split(',', $1); } } close TEX; for my $input (@texls) { push @depls, texdep($input); } return $texfile, @depls; }