222 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |