Prosty makefile dla LaTeX
Make, jak wiadomo, potrafi zautomatyzować wiele operacji związanych głównie z kompilowaniem oprogramowania. Ale nie tylko. Make (z pewnymi zgrzytami) można wykorzystać do budowania dokumentacji LaTeX.
Cały problem polega na specyfice make, które rekompiluje projekt w oparciu o daty modyfikacja jego składowych (gdy są nowsze niż końcowy plik). No i trochę na specyfice LaTeX, które generuje mnóstwo plików pomocniczych nie będących bezpośrednio zależnościami.
Bez owijania w bawełnę:
OPTS=-recorder -file-line-error -halt-on-error -interaction=errorstopmode -shell-escape
PDFLATEX=@nice -n 19 pdflatex
default: all
clean:
@rm -vf *.toc *.idx *.out *.aux *.ind *.ilg *.pdf *~ *.log *.fls *.rtf *.dvi
@echo "CLEAN"
%.pdf : %.tex
${PDFLATEX} ${OPTS} $<
${INDEX} $*
@echo "pass2"
${PDFLATEX} ${OPTS} $<
@echo "pass3"
${PDFLATEX} ${OPTS} $<
moje_testy: plik1.pdf plik2.pdf
dokumentacja: dokumentacja.pdf testy.pdf
all: dokumentacja moje_testy
Jak się tego używa? Po pierwsze musimy ustalić jak nazywa się nasz plik dokumentacji. Dajmy na to że jest to plik.tex. pdflatex zrobi z niego plik.pdf. Robimy do pliku wpis
plik : plik.pdf
i ... w sumie tyle :] Teraz wystarczy tylko
make plik
i tworzy się dokumentacja.
Resztą zajmie się regułka zapisana w liniach
%.pdf : %.tex
${PDFLATEX} ${OPTS} $<
${INDEX} $*
@echo "pass2"
${PDFLATEX} ${OPTS} $<
@echo "pass3"
${PDFLATEX} ${OPTS} $<
Która robi kolejno :
- pdflatex na pliku .tex
- makeindex na pliku .ind
- dwa razy pdflatex na pliku .tex
Dlaczego trzy razy pdflatex ? Jest to konieczne w sytuacji gdy używamy tabelek w dokumentacji oraz indeksu (generowanego przez makeindex z pliku utworzonego po pierwszym przebiegu pdflatex), konieczne jest kilka przebiegów pdflatex.
Aby sobie oszczędzić dodatkowe 0.5 sekundy wysiłku można zmodyfikować linijkę :
all: plik
co poskutkuje tym, że po wpisaniu samego make (bez parametrów) zrobi nam "plik.pdf" .
Napisane 13 stycznia, 2010 przez yoshi314

