blob: 96f46ca5e8b4c9e73e96c92e0e43ac08d92613d4 (
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
|
#!/usr/bin/env zsh
ret=0
logged() {
printf ">>> ‘%s’ in %s\n" "$*" $(pwd) >&2
${@}
ret=$?
printf ">>> %d\n" $ret >&2
}
typeset -a cleanupList
cleanupList=()
cleanup() {
for cmd in ${cleanupList}; do
eval $cmd
done
}
trap cleanup EXIT
base=(${2%.pdf}.(md|lhs|tex)([1]))
metadata=(${2%.pdf}.meta.yml([1]N))
gup -u ${base} ${metadata} preamble.tex
buildDir=$(pwd)
base=${base:A}
metadata=${metadata:A}
cd ${base:h}
input=${base}
typeset -a extraArgs
extraArgs=(-R -V "geometry=margin=2cm" -V "fontfamily=libertine" -H ${buildDir}/preamble.tex --listings --latex-engine=lualatex --filter=pandoc-citeproc --biblatex)
if [[ -n ${metadata} ]]; then
input=$(mktemp)
cleanupList+=("rm -v ${input}")
logged pandoc -f markdown -t native -s ${metadata} | head -n -1 >>${input}
logged pandoc -R -t native ${base} >>${input}
extraArgs+=(-f native)
fi
# logged pandoc ${extraArgs} -t latex ${base} | cat -n >&2
compileDir=$(mktemp -d)
cleanupList+=("cd /" "rm -rfv ${compileDir}")
logged pandoc ${extraArgs} -t latex -o ${compileDir}/${base:t:r}.tex ${input} >&2
cd ${compileDir}
for f (bib); do
printf "Checking for ‘%s’\n" ${base:h}/${f} >&2
[[ -e ${base:h}/${f} ]] || continue
logged rsync -av ${base:h}/${f} .
done
max=5
runs=0
run=true
while ${run} && [[ ${runs} -lt ${max} ]]; do
output=$(mktemp)
cleanupList+=("rm -v ${output}")
logged lualatex ${base:t:r}.tex >${output} </dev/null
( return $ret ) || { logged cat ${output}; break }
grep -C 2 -i "warning" ${output}
run=false
grep -Eq $'(\\(re\\)run Biber)|(Please rerun LaTeX)' ${output} && run=true
[[ -e ${base:t:r}.bcf && runs -eq 0 ]] && logged biber ${base:t:r}
runs=$((runs + 1))
done
cp -v ${base:t:r}.pdf $1
|