aboutsummaryrefslogtreecommitdiffstats
path: root/bin/tex2pdf
blob: aea0d56eb1ebfa62388ccd1228c33b02805ee0c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/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"

function get_filename()
{
  local base=$(basename ${1})
  filename="${base%.*}"
}

function get_dirname()
{
  dirname="$(dirname ${1})"
}

function probe_extension()
{
  local extension="${1##*.}"
  if [ ${extension} != ${probe_suffix} ]; then
    echo "File extension (${extension}) is not ${probe_suffix}. Exiting..."
    exit 1
  fi
  return 0
}

function 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
}

function 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
}

function check_mupdf_pid()
{
  set +e
  mupdf_pid=$(ps aux | grep "mupdf ${dirname}/${filename}${output_suffix}" | grep -v "grep" | awk '{print $2}')
  set -e
}

function show_pdf()
{
  check_mupdf_pid
  echo "mupdf: ${dirname}/${filename}${output_suffix}."
  if [ ! -z $mupdf_pid ]; then
    kill -SIGHUP ${mupdf_pid}
  else
    mupdf ${dirname}/${filename}${output_suffix} &
  fi
}

function 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
        inkscape -D -z -A "${svg%\.svg}".pdf "${svg}"
      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