#!/bin/sh

#
# latex2pdf - translate TeX-file to PDF und clean up tempfiles
#

DVI='no'
TEXFILE=''
FILEPREFIX=''
TIMES=x
NUP=1
INDEX='no'
USAGEMSG="USAGE:\n\
\t`basename $0` [-?] [-dvi] [-nup n] <file>\n\
OPTIONS:\n\
\t-?     prints usage message\n\
\t-dvi   convert via dvi format rather than directly with pdflatex\n\
\t-nup n n pages on one\n\
\t<file> name of latex file\n\
\t       extension 'tex' or '.tex' can be omitted"


# argument loop
while [ $# -gt 0 ]
do
	case "$1" in
		-\?)   echo -e "$USAGEMSG"; exit 0;;
		-dvi) DVI='yes';;
		-nup) NUP=$2; shift;;
		*)    TEXFILE="$1";;
	esac
	shift
done
if [ -z "$TEXFILE" ]
then
	echo -e "$USAGEMSG" 1>&2
	exit 1
fi

# find texfile
if [ ! -e $TEXFILE ]
then
	test -e ${TEXFILE}.tex && TEXFILE=${TEXFILE}.tex
	test -e ${TEXFILE}tex && TEXFILE=${TEXFILE}tex
fi
if [ ! -e "$TEXFILE" ]
then
	echo -e "$USAGEMSG" 1>&2
	exit 1
fi

# do we need to call makeindex?
grep -q '^[^%]*\\makeindex' $TEXFILE && INDEX="yes"

# some files need double processing
grep -q '\\makeindex\|\\ref{\|\\cite{\|\\tableofcontents\|{longtable' $TEXFILE && \
	TIMES="x x"

# translate
FILEPREFIX=`basename $TEXFILE .tex`
if [ $DVI = no -a $NUP = 1 ]
then
	if [ "$INDEX" = "yes" ]
	then
		latex $TEXFILE && makeindex $FILEPREFIX && latex $TEXFILE
		RC=$?
	else
		for t in $TIMES
		do
			pdflatex $TEXFILE 
			RC=$?
			test $RC = 0 || break
		done
	fi
else
	if [ "$INDEX" = "yes" ]
	then
		latex $TEXFILE && latex $TEXFILE && makeindex $FILEPREFIX && latex $TEXFILE
		RC=$?
	else
		for t in $TIMES
		do
			latex $TEXFILE 
			RC=$?
			test $RC = 0 || break
		done
	fi
	if [ $NUP -gt 1 ]
	then
		test $RC = 0 && \
			dvips -Ppdf -G0 -o $FILEPREFIX.tmp.ps $FILEPREFIX.dvi && \
			psnup -$NUP -r $FILEPREFIX.tmp.ps $FILEPREFIX.tmp.ps.nup && \
			mv $FILEPREFIX.tmp.ps.nup $FILEPREFIX.tmp.ps && \
			ps2pdf -sPAPERSIZE=a4 $FILEPREFIX.tmp.ps $FILEPREFIX.pdf
	else
		test $RC = 0 && \
			dvips -Ppdf -G0 -o $FILEPREFIX.tmp.ps $FILEPREFIX.dvi && \
			ps2pdf -sPAPERSIZE=a4 $FILEPREFIX.tmp.ps $FILEPREFIX.pdf
	fi
fi

# clean up
rm -f $FILEPREFIX.dvi $FILEPREFIX.log $FILEPREFIX.aux \
	$FILEPREFIX.toc $FILEPREFIX.out $FILEPREFIX.tmp.ps

exit $RC
