# Eine tolle Idee, das Target zu erraten: ifndef TARGET TARGET=$(basename $(shell egrep -l 'documentclass' *.tex) ) target_guessed=true endif DEPENDS_ON?=$(TARGET).tex EXTENSION?=dvi MAINTARGET:=$(TARGET).$(EXTENSION) #LATEX_FLAGS?=-file-line-error -halt-on-error #LATEX_FLAGS?=-file-line-error -interaction=errorstopmode LATEX_FLAGS?=-file-line-error -interaction=batchmode ifdef LATEX_SRC_SPECIALS LATEX_FLAGS+= --src-specials endif LATEX_CMD?=latex $(LATEX_FLAGS) $< $(LATEX_BE_QUIET) IMAGE_DIR?=imgs VIEWPDF_CMD?=xpdf VIEWDVI_CMD?=kdvi GREP_OPTIONS?="Error\|Undefined\|Missing\|Warning" # wird an den Latexaufruf "dran-geodert" GREP_CMD?=|| grep -s -A9 -e $(GREP_OPTIONS) $(subst .tex,.log,$<) TAIL_CMD?=tail --lines=1 $(TARGET).log .PHONY: run all clean upd bib bilder help view bequiet all: $(MAKE_INDEX) \ $(if $(MAKE_BIB),bib) \ $(if $(MAKE_IMAGES),bilder) \ $(MAINTARGET) # ifdef target_guessed @echo "No Target given in Makefile, guessing: $(TARGET)" endif # Target specific var is only valid for run and its prerequisites. # This means "make all" provides all Infos on verbatim output, # while "make run" only dumps error (in conjunction with grepping the log-file). # The intention is: to use make run from within emacs and make all from the command line # so the emacs compile-buffer in not cluttered with the whole latex-stuff. # Discarding the output speeds up everything when using emacs. # LATEX_BE_QUIET is set to "> /dev/null" when make run is called, # else it is null (i.e. == "") run: LATEX_BE_QUIET=> /dev/null run: all view: all ifeq ($(strip $(EXTENSION)),pdf) $(VIEWPDF_CMD) $(MAINTARGET) endif ifeq ($(strip $(EXTENSION)),dvi) $(VIEWDVI_CMD) $(MAINTARGET) endif clean: # das ifdef/endif darf nicht mit tab beginnen, da es sonst an # die Shell durchgereicht wird ifdef MAKE_IMAGES (cd $(IMAGE_DIR) && make clean) endif rm -rf *.log *.dvi *.pdf *.ps *.toc *.blg *.bbl *.idx *.ilg *.ind *~ *.aux *.out pdf: all $(TARGET).pdf upd: rm -f $(MAINTARGET) make QUIET= all bib: $(TARGET).aux bibtex $(TARGET) bilder: (cd $(IMAGE_DIR)&& make all) help: @echo "Makefile for LaTeX, customization via the following VARS:" @echo " EXTENSION : dvi|pdf|ps" @echo " TARGET : basename of documents main file" @echo " DEPENDS_ON : list of further dependencies" @echo " IMAGE_DIR : where the images are located" @echo " MAKE_IMAGES : if set runs 'make all' in subdir 'IMAGE_DIR'" @echo " MAKE_BIB : if set runs 'make bib' on TARGET" @echo @echo " use make run from IDEs and make all from the commandline" @echo " make run only dumps error, not the usual latex-messages" $(MAINTARGET): $(DEPENDS_ON) # --------------------------------------------- # # tolle Idee die Notwendigkeit eines weiteren LaTeX-Runs zu bestimmen: # RERUN="(There were undefined references|Rerun to get (cross-references|the bars) right)" # RERUNBIB="No file.*\.bbl|Citation.*undefined" # define rerun-latex # egrep -c $(RERUNBIB) $*.log && (bibtex $*;$(LATEX_CMD) $<);true # egrep $(RERUN) $*.log && $(LATEX_CMD) $< ; true # egrep $(RERUN) $*.log && $(LATEX_CMD) $< ; true # # Display relevant warnings # egrep -i "(Reference|Citation).*undefined" $*.log ; true # endef # eine andere Idee ist: # while grep Rerun book.log; do latex book.tex; done # hinter dem latex aufruf auszuführen %.pdf: %.tex pdf$(LATEX_CMD) $(GREP_CMD) $(rerun-latex) @$(TAIL_CMD) %.dvi: %.tex $(LATEX_CMD) $(GREP_CMD) $(rerun-latex) @$(TAIL_CMD) %.ps: %.dvi dvips $< #%.pdf: %.ps # ps2pdf $< %.pdf: %.eps epstopdf $*.eps$ %.aux : %.tex $(LATEX_CMD) $*.tex $(GREP_CMD) %.idx : echo " " > $*.idx %.ind : %.idx makeindex $*.idx ### Local Variables: *** ### mode:Makefile *** ### End: ***