Fix compile script

Fixed compile script to not use ifinstalled anymore.

HACK Fixed compile script to correctly pass through output targets to
RMarkdown, through the implementation is very rough currently.
It will look for additional arguments passed through and run RMarkdown
rendering once for each target. It would presumably be faster (and at
the very least more elegant) to pass all arguments through at once, but
I am not sure how to pass arguments through shell surrounded with
quotes.
This commit is contained in:
Marty Oehme 2020-02-08 20:23:55 +01:00
parent 145548c01a
commit b76b3ca4ca
No known key found for this signature in database
GPG key ID: 0CCB0526EFB9611A

View file

@ -11,8 +11,13 @@
# Expects the file to compile as first argument. # Expects the file to compile as first argument.
# Desired output format(s) can be specified in optional arguments following. # Desired output format(s) can be specified in optional arguments following.
file=$(readlink -f "$1") file=$1
if [ ! -f "$file" ]; then
echo "File does not exist."
exit 1
else
printf "file: %s\n" "$file" printf "file: %s\n" "$file"
fi
if [ "$#" -gt 1 ]; then if [ "$#" -gt 1 ]; then
shift shift
@ -25,9 +30,9 @@ base="${file%.*}"
cd "$dir" || exit cd "$dir" || exit
textype() { textype() {
if (sed 5q "$file" | grep -i -q 'xelatex') && ifinstalled xelatex; then if (sed 5q "$file" | grep -i -q 'xelatex') && exist xelatex; then
command="xelatex" command="xelatex"
elif ifinstalled pdflatex; then elif exist pdflatex; then
command="pdflatex" command="pdflatex"
fi fi
$command --output-directory="$dir" "$base" && $command --output-directory="$dir" "$base" &&
@ -38,10 +43,16 @@ textype() {
} }
sendtoRmd() { sendtoRmd() {
# v removed for too much magic that can break; simply input pdf_document if you want it
# formats=$(echo "$formats" | perl -pe 's/([\w-]+)(?<!_document)\b/"\1_document"/gm' | tr ' ' ',')
printf "formats: %s\n" "$formats" printf "formats: %s\n" "$formats"
ifinstalled R && echo "require(rmarkdown); render('$1', c($formats))" | R -q --vanilla ## FIXME this is horribly inefficient, should just pass all formats to R
# but R expects them as "strings" and I don't know how to quote the individual words
if [ -n "$formats" ]; then
for fmt in $formats; do
exist R critical && echo "require(rmarkdown); render('$1', c(\"$fmt\"))" | R -q --vanilla
done
else
exist R critical && echo "require(rmarkdown); render('$1')" | R -q --vanilla
fi
} }
case "$file" in case "$file" in