#!/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 typeset -a beamerAspects beamerAspects=(43 169) beamerAspect="" if [[ $beamerAspects[(i)${2:r:e}] -le $#beamerAspects ]]; then beamerAspect=${2:r:e} 2=${2:r:r}.${2:e} fi base=(${2:r}.(md|lhs|tex)([1])) metadata=${2:r}.meta.yml if ! [[ -e ${metadata} ]] && ! gup --buildable ${metadata}; then metadata="" fi 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 --biblatex) #extraArgs+=(--filter=pandoc-citeproc) compileDir=$(mktemp -d) cleanupList+=("cd /" "rm -rfv ${compileDir}") if [[ -n ${metadata} ]]; then input=$(mktemp) cleanupList+=("rm -v ${input}") typeset -a class class=() [[ ${base:e} == "tex" ]] && class=(-f latex) logged pandoc -f markdown -t native -s ${metadata} | head -n -1 >>${input} logged pandoc -R ${class} -t native ${base} >>${input} extraArgs+=(-f native) bibFiles=$(pandoc -f markdown -t json -s ${metadata} | jq -r '.meta.bibliography.c[] | (.c[0].c)? // .c') gup -u ${(f)bibFiles} for bibFile (${(f)bibFiles}); do targetPath=${compileDir}/$(realpath --relative-to=${base:h} -- ${base:h}/${bibFile:h}) [[ ! -e ${targetPath} ]] && logged mkdir -p ${targetPath} logged cp ${bibFile} ${targetPath}/${bibFile:t} done fi if [[ ${base:t:r} == "presentation" ]]; then gup -u ${buildDir}/beamer-template.tex extraArgs+=(--template=${buildDir}/beamer-template.tex) [[ -n "${beamerAspect}" ]] && extraArgs+=(-M "aspectratio=${beamerAspect}") fi logged pandoc ${extraArgs} -o ${compileDir}/${base:t:r}.tex ${input} >&2 cd ${compileDir} # cat -n ${base:t:r}.tex >&2 max=10 runs=0 run=true while ${run} && [[ ${runs} -lt ${max} ]]; do output=$(mktemp) cleanupList+=("rm -v ${output}") logged lualatex ${base:t:r}.tex >${output}