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; }