#!/usr/bin/bash set -eu initial_pwd=$(pwd) filename="" dirname="" input_suffix=".tex" probe_suffix="tex" output_suffix=".pdf" get_filename() { local base base="$(basename "${1}")" filename="${base%.*}" } get_dirname() { dirname="$(dirname "${1}")" } probe_extension() { local extension="${1##*.}" if [ "${extension}" != "${probe_suffix}" ]; then echo "File extension (${extension}) is not ${probe_suffix}. Exiting..." exit 1 fi return 0 } probe_tools() { local tools=( pdflatex bibtex mupdf ) local tool for tool in "${tools[@]}"; do if ! command -v "$tool" > /dev/null; then printf "%s not available. Exiting...\n" "$tool" exit 1 fi done return 0 } create_pdf() { cd "${dirname}" set +e xelatex -interaction=nonstopmode "${filename}${input_suffix}" xelatex -interaction=nonstopmode "${filename}${input_suffix}" set -e cd "${initial_pwd}" return 0 } show_pdf() { echo "mupdf: ${dirname}/${filename}${output_suffix}." if ! pkill -u "$(whoami)" -f "mupdf ${dirname}/${filename}${output_suffix}" --signal SIGHUP; then DISPLAY=':0' mupdf "${dirname}/${filename}${output_suffix}" & fi } cleanup() { rm -f "${dirname}/"*.{acn,acr,alg,aux,bbl,bcf,blg,dvi,glg,glo,gls,glsdefs,idx,ist,lof,lol,lot,nav,out,run.xml,snm,toc,upa,upb,vrb,xdy} \ "${dirname}/"*/*.{acn,acr,alg,aux,bbl,bcf,blg,dvi,glg,glo,gls,glsdefs,idx,ist,lof,lol,lot,nav,out,run.xml,snm,toc,upa,upb,vrb,xdy} \ ./*.{acn,acr,alg,aux,bbl,bcf,blg,dvi,glg,glo,gls,glsdefs,idx,ist,lof,lol,lot,nav,out,run.xml,snm,toc,upa,upb,vrb,xdy} \ ./*/*.{acn,acr,alg,aux,bbl,bcf,blg,dvi,glg,glo,gls,glsdefs,idx,ist,lof,lot,nav,out,run.xml,snm,toc,upa,upb,vrb,xdy} } render_diags() { echo "Rendering diagrams to pdfs." if [ -d "${dirname}/diag/" ] && [ -x /usr/bin/seqdiag ] ; then for _diag in "${dirname}/diag/"*.diag; do seqdiag -T 'pdf' "${_diag}" done fi } render_svgs() { echo "Rendering SVGs to pdfs." for dir in "${dirname}/images" "${dirname}/../images"; do if [ -d "${dir}" ]; then for svg in "${dir}/"*.svg; do if [ -f "${svg}" ]; then inkscape -D -o "${svg%\.svg}".pdf "${svg}" fi done fi done } probe_extension "$1" get_filename "$1" get_dirname "$1" render_diags render_svgs echo "tex2pdf: Converting $filename$input_suffix to $filename$output_suffix." probe_tools create_pdf cleanup show_pdf exit 0