#!/bin/bash set -e LATEXFLAGS="-file-line-error -halt-on-error" docs=( thesis presentation ) log(){ echo $1 >&2 } deps(){ [[ "$1" != *.tex && "$1" != *.pre ]] && fn="$1.tex" || fn="$1" echo "$fn" grep -Po '(?<=\\input{).*(?=})|(?<=\\include{).*(?=})' $fn |\ while read l; do deps "$l"; done } graphicdeps(){ grep -Pzo '\\includegraphics[%\t\n ]*(\[.*\])?[%\t\n ]*\{.*?\}' $1 |\ tr '\0' '\n' | grep -Po '(?<=\{).*?(?=\})' |\ while read l; do echo "$2/$l"; done } graphicspath(){ : } recompile(){ for dep in $(deps "$1"); do if [ "$dep" -nt "$2" ]; then log "$dep is newer than $2, thus recompiling" return 0 fi done return 1 } preamble(){ pdflatex $LATEXFLAGS -ini -jobname="$2" "&pdflatex $1\dump" ret=$? rm -f $2.pdf [ $ret -ne 0 ] && exit 1 } compile(){ pdflatex $LATEXFLAGS $1 || exit 1 if grep -q '^\\bibdata{' $1.aux then bibtex $1 || exit 1 fi if grep -q '\@istfilename' $1.aux then makeglossaries $1 || exit 1 fi if [ -f $1.idx ] then makeindex $1 || exit 1 fi tmpf=$(mktemp) pdflatex $LATEXFLAGS $1 | tee $tmpf || exit 1 if grep -Fiq "Rerun" $tmpf then pdflatex $LATEXFLAGS $1 || exit 1 fi rm -vf $tmpf } pipeline(){ log "Processing $1" if [ ! -f $1.tex ]; then log "Skipping $1, no tex available" else # Check for preamble [ -f preamble.tex ] && pre=preamble.tex [ -f $1.pre ] && pre=$1.pre if [ ! -z $pre ]; then log "preamble found" recompile $pre $1.fmt\ && preamble $pre $1\ || log "preamble up to date" fi # Compile document recompile "$1.tex" "$1.pdf"\ && compile $1\ || log "document up to date" fi } clean(){ while [ $# -ne 0 ]; do log "Clean $1" rm -fv $1.{acn,acr,alg,aux,bbl,blg,idl,idx,ilg,ind,fmt,glg,glo,gls,\ ist,loa,lof,log,lol,lot,nav,out,pdf,snm,tdo,toc,vrb} shift done } if [ $# -eq 0 ]; then for doc in "${docs[@]}"; do pipeline $doc log "" done else while [ $# -ne 0 ]; do if [ $1 = "clean" ]; then if [ $# -eq 2 ]; then clean $d else clean "${docs[@]}" fi else pipeline $1 fi shift done fi