222 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			222 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #!/bin/bash | ||
|  | # | ||
|  | # Automate running LaTeX | ||
|  | 
 | ||
|  | program=`basename $0` | ||
|  | tex=latex | ||
|  | format=dvi | ||
|  | rerun='Rerun to get cross-references right' | ||
|  | maxruns=4 | ||
|  | quiet=false | ||
|  | 
 | ||
|  | function texclean | ||
|  | { rm -f *.idx *.ind *.ilg *.aux *.log *.lof *.out *.toc *.blg | ||
|  | } | ||
|  | 
 | ||
|  | # make runtex --clean work without GNU getopt | ||
|  | case "$1" in | ||
|  | 	--clean) | ||
|  | 	texclean | ||
|  | 	exit 0 | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | appbase=`dirname $0` | ||
|  | case "$appbase" in | ||
|  |     /*) | ||
|  | 	;; | ||
|  |     .)  appbase=`pwd` | ||
|  |         ;; | ||
|  |     ./*|../*) | ||
|  | 	appbase="`pwd`/$appbase" | ||
|  | 	clean=false | ||
|  | 	while [ $clean = false ]; do | ||
|  | 	  b=`echo $appbase | sed -e 's@/\./@/@g' -e 's@/[a-z]*/\.\./@/@g'` | ||
|  | 	    if [ "x$b" = "x$appbase" ]; then | ||
|  | 	      clean=true | ||
|  | 	    else | ||
|  | 	      appbase="$b" | ||
|  | 	    fi | ||
|  | 	done | ||
|  | 	;; | ||
|  |     *)  echo "ERROR: runtex must be called with relative or absolute path" | ||
|  |         exit 1 | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | echo "runtex application base = $appbase" | ||
|  | 
 | ||
|  | function addinput | ||
|  | { if [ -z "$TEXINPUTS" ]; then | ||
|  |     export TEXINPUTS="$1::" | ||
|  |   else | ||
|  |     export TEXINPUTS=$TEXINPUTS:$1:: | ||
|  |   fi | ||
|  | } | ||
|  | 
 | ||
|  | function addbstinput | ||
|  | { if [ -z "$BSTINPUTS" ]; then | ||
|  |     export BSTINPUTS="$1::" | ||
|  |   else | ||
|  |     export BSTINPUTS=$BSTINPUTS:$1:: | ||
|  |   fi | ||
|  | } | ||
|  | 
 | ||
|  | function addbibinput | ||
|  | { if [ -z "$BIBINPUTS" ]; then | ||
|  |     export BIBINPUTS="$1::" | ||
|  |   else | ||
|  |     export BIBINPUTS=$BIBINPUTS:$1:: | ||
|  |   fi | ||
|  | } | ||
|  | 
 | ||
|  | function usage | ||
|  | { echo "Usage:" | ||
|  |   echo "" | ||
|  |   echo "    $program [options] file" | ||
|  |   echo "" | ||
|  |   echo "Options:" | ||
|  |   echo "" | ||
|  |   echo "    --pdf        Use pdflatex and make .pdf images" | ||
|  |   echo "    --dvi        Use latex" | ||
|  |   echo "    --help       Print this message" | ||
|  |   echo "    --maxruns=#  Specify maximum # runs" | ||
|  |   echo "    --clean      Just remove TeX temporary files" | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if [ -d $appbase ]; then | ||
|  |   addinput $appbase | ||
|  |   addbstinput $appbase | ||
|  |   addbibinput $appbase | ||
|  | fi | ||
|  | 
 | ||
|  | argp=true | ||
|  | while [ $argp = true ] ; do | ||
|  |     case "$1" in | ||
|  |         --pdf) | ||
|  | 	    tex=pdflatex | ||
|  | 	    format=pdf | ||
|  | 	    shift ;; | ||
|  |         --dvi) | ||
|  | 	    tex=latex | ||
|  | 	    format=dvi | ||
|  | 	    shift ;; | ||
|  | 	--quiet) | ||
|  | 	    quiet=true; | ||
|  | 	    shift ;; | ||
|  | 	--maxruns=*) | ||
|  | 	    maxruns="`echo $1 | sed 's/--maxruns=//'`" | ||
|  | 	    shift ;; | ||
|  | 	--inputs=*) | ||
|  | 	    addinput "`echo $1 | sed 's/--inputs=//'`" | ||
|  | 	    shift ;; | ||
|  | 	--help) | ||
|  | 	    usage | ||
|  | 	    exit 0 ;; | ||
|  | 	--clean) | ||
|  | 	    texclean | ||
|  | 	    exit 0 | ||
|  | 	    ;; | ||
|  |         --*) | ||
|  | 	    usage | ||
|  | 	    exit 1 ;; | ||
|  | 	*) | ||
|  | 	    argp=false; | ||
|  | 	    ;; | ||
|  |     esac | ||
|  | done | ||
|  | 
 | ||
|  | if [ -z "$1" ]; then | ||
|  |   usage | ||
|  |   exit 1 | ||
|  | fi | ||
|  | 
 | ||
|  | file="$1" | ||
|  | 
 | ||
|  | # ensure .tex suffix | ||
|  | 
 | ||
|  | if [ ${file%.tex} = $file ]; then | ||
|  |     file=$file.tex | ||
|  | fi | ||
|  | 
 | ||
|  | doc=${file%.tex} | ||
|  | 
 | ||
|  | if [ -r Makefile ] && grep -q '^tex:' Makefile; then | ||
|  |     make tex | ||
|  | fi | ||
|  | 
 | ||
|  | cont=yes | ||
|  | done=0 | ||
|  | while [ $cont != "no" ]; do | ||
|  |     cont=maybe | ||
|  | 
 | ||
|  | 					# fix index problems | ||
|  |     if [ -r $doc.idx ]; then | ||
|  | 	cp $doc.idx $doc.idx.$$ | ||
|  |         if [ -x $appbase/correctindex ]; then | ||
|  | 	    $appbase/correctindex $doc.idx | ||
|  | 	fi | ||
|  | 	if [ -r $appbase/makeindex.ist ]; then | ||
|  | 	    makeindex -s $appbase/makeindex.ist $doc | ||
|  | 	else | ||
|  | 	    makeindex $doc | ||
|  | 	fi | ||
|  |     fi | ||
|  |     if test -r $doc.aux && grep -qw bibdata $doc.aux; then | ||
|  | 	if [ -f $doc.bbl ]; then cp $doc.bbl $doc.bbl$$; fi | ||
|  | 	echo "%%% Running Bibtex" | ||
|  |         bibtex $doc | ||
|  | 	if [ -r $doc.bbl -a -r $doc.bbl.$$ ]; then | ||
|  | 	   if cmp -s $doc.bbl $doc.bbl.$$; then | ||
|  | 	      true | ||
|  | 	   else | ||
|  | 	      cont=yes | ||
|  | 	      echo "*** Bibtex output changed.  Rerunning $tex ***" | ||
|  | 	   fi | ||
|  | 	fi | ||
|  | 	rm -f $doc.bbl$$ | ||
|  |     fi | ||
|  |     if [ `basename $tex` = pdflatex -a -r $appbase/Makefile.pdf ]; then | ||
|  |         make -f $appbase/Makefile.pdf | ||
|  |     fi | ||
|  |     rm -f $doc.log | ||
|  |     if [ $quiet == true ]; then | ||
|  |         $tex $doc -file-line-error -halt-on-error >/dev/null | ||
|  |     else | ||
|  | 	$tex $doc | ||
|  |     fi | ||
|  |     if [ $? != 0 ]; then | ||
|  |         rm -f $doc.idx.$$ | ||
|  |         exit $?; | ||
|  |     fi | ||
|  |     if grep -q "$rerun" $doc.log; then | ||
|  |         echo "*** Cross-references changed.  Rerunning $tex ***" | ||
|  | 	cont=yes | ||
|  |     else | ||
|  |         if [ -r $doc.idx -a -r $doc.idx.$$ ]; then | ||
|  | 	   if cmp -s $doc.idx $doc.idx.$$; then | ||
|  | 	      true | ||
|  | 	   else | ||
|  | 	      ls -l $doc.idx $doc.idx.$$ | ||
|  | 	      cont=yes | ||
|  | 	      echo "*** Index changed.  Rerunning $tex ***" | ||
|  | 	   fi | ||
|  |         fi | ||
|  |     fi | ||
|  |     rm -f $doc.idx.$$ | ||
|  |     done=$(($done+1)) | ||
|  |     if [ $done = $maxruns ]; then cont=no; fi | ||
|  |     if [ $cont = maybe ]; then cont=no; fi | ||
|  | done | ||
|  | 
 | ||
|  | 
 | ||
|  | if grep -q Warning $doc.log; then | ||
|  |    echo "" | ||
|  |    echo "*****************************" | ||
|  |    echo "The following warnings remain" | ||
|  |    echo "*****************************" | ||
|  |    grep Warning $doc.log | ||
|  | fi |