#!/usr/bin/make -f # # Requires latexmk. # # Maxime Bombar ## This Makefile is used to build pdf from a latex project. Use ```make help``` to display a summary of the rules. ## ## make MyFancyProject.pdf : Builds MyFancyProject.pdf (and auxiliary files) from MyFancyProject.tex and fails if it doesn't exist. ## make MyFancyProject.warn : Displays how many warnings and bad boxes there are when compiling MyFancyProject. ## make MyFancyProject.showwarn : Displays the warnings and bad boxes for MyFancyProject. .PHONY: all help clean cleanall SHELL = /bin/bash # latexmk is a swiss army knife of latex compilation. Option -pdf to output the pdf. PDFLATEX := latexmk -pdf -shell-escape CMD = cat $*.log | grep -iE REGEXBOX := full..hbox WARNINGS := warning TEXDOCS = $(wildcard *.tex) PDF := $(patsubst %.tex,%.pdf, $(TEXDOCS)) OUT := $(patsubst %.tex,%.out, $(TEXDOCS)) LOG := $(patsubst %.tex,%.log, $(TEXDOCS)) # Prevents some intermediate files to be automatically deleted... .PRECIOUS: %.log %.pdf Makefile %.log: %.tex $(PDFLATEX) $< %.warn: %.log @echo "${shell echo 'There are $$(( $$($(CMD) $(WARNINGS) | wc -l)-1 ))' warning\(s\)}" @echo "${shell echo 'There are $$($(CMD) $(REGEXBOX) | wc -l)' bad boxe\(s\)}" %.showwarn: %.log @echo "${shell echo 'There are $$(( $$($(CMD) $(WARNINGS) | wc -l)-1 ))' warning\(s\) for $*:}" @echo "${shell echo '$$( $(CMD) $(WARNINGS) | tail +2)' }" @echo "${shell echo $(\n)}" @echo "${shell echo 'There are $$($(CMD) $(REGEXBOX) | wc -l)' bad boxe\(s\) for $*:}" @echo "${shell echo '$$( $(CMD) $(REGEXBOX))' }" %.pdf: %.log @echo "${shell echo 'There are $$(( $$($(CMD) $(WARNINGS) | wc -l)-1 ))' warning\(s\)}" @echo "${shell echo 'There are $$($(CMD) $(REGEXBOX) | wc -l)' bad boxe\(s\)}" ## make all : Builds every file in the current directory. all: $(TEXDOCS) $(PDFLATEX) $^ ## make rebuild : Cleans and rebuilds every file. rebuild: cleanall all ## make clean : Removes every auto-generated file except for pdf. clean: @echo -n "aux bbl blg dvi fdb_latexmk fls nav snm tdo toc thm vrb"|xargs -t -d ' ' -n 1 -I {} find . -iname "*.{}" -delete rm -f $(OUT) rm -f $(LOG) find . -iname "*flymake*" -delete find . -iname "*~" -delete find . -iname "\#*" -delete find . -type d -iname 'auto' -exec rm -rf {} + ## make cleanall : Removes every auto-generated file. cleanall: clean rm -f $(PDF) ## make help : Displays this help. help: Makefile @sed -n 's/^##//p' $<