#!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' initial_pwd=$(pwd) filename="" dirname="" mupdf_pid="0" input_suffix=".tex" probe_suffix="tex" output_suffix=".pdf" get_filename() { local 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() { if [ ! -x /usr/bin/pdflatex ]; then echo "/usr/bin/pdflatex not available. Exiting..." exit 1 fi if [ ! -x /usr/bin/bibtex ]; then echo "/usr/bin/bibtex not available. Exiting..." exit 1 fi if [ ! -x /usr/bin/mupdf ]; then echo "/usr/bin/mupdf not available. Exiting..." exit 1 fi return 0 } create_pdf() { cd "${dirname}" set +e pdflatex \ -interaction=nonstopmode \ -shell-escape \ "${filename}${input_suffix}" > /dev/null bibtex "${filename}.aux" makeglossaries "${filename}" pdflatex \ -interaction=nonstopmode \ -shell-escape \ "${filename}${input_suffix}" > /dev/null pdflatex \ -interaction=nonstopmode \ -shell-escape \ "${filename}${input_suffix}" set -e cd "${initial_pwd}" return 0 } check_mupdf_pid() { set +e mupdf_pid="$(ps aux | grep "mupdf ${dirname}/${filename}${output_suffix}" | grep -v "grep" | awk '{print $2}')" set -e } show_pdf() { check_mupdf_pid echo "mupdf: ${dirname}/${filename}${output_suffix}." if [ -n "$mupdf_pid" ]; then kill -SIGHUP "${mupdf_pid}" else 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,log,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,log,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,log,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,log,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 -z -A "${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