Updated latex to build based on new template format

This commit is contained in:
Wryn Wagner 2020-03-09 13:56:44 -06:00
parent 49d75e1ef6
commit df29933d4e

155
zsh/latex
View File

@ -1,3 +1,156 @@
#!/bin/zsh
alias tekclean='rm *.aux *.log *.pdf'
function tek() {
case $1 in
clean)
LATEX_CLEANUP "${@:2}";
;;
new)
LATEX_NEW_DOCUMENT "${@:2}";
;;
compile)
LATEX_COMPILE "${@:2}";
;;
*)
LATEX_COMPILE "${@:1}";
;;
esac
}
_tek () { # autocompletion
local state;
_arguments \
'1: :->primary_command'\
':: :->command_args'\
;
case "$state" in
primary_command)
compadd clean new compile;
;;
command_args)
[ $words[2] == 'clean' ] && _LATEX_NEW_DOCUMENT;
[ $words[2] == 'new' ] && _LATEX_NEW_DOCUMENT;
[ $words[2] == 'compile' ] && _LATEX_COMPILE;
;;
esac
}
compdef _tek tek;
###############################################################################
### HELPERS ###################################################################
###############################################################################
function LATEX_CLEANUP() {
rm *.aux *.log *.pdf *.dvi >/dev/null 2>&1;
echo 'All clean!';
return 0;
}
function LATEX_NEW_DOCUMENT() {
local PARENT_TEMPLATE_DIR="$DOTWRYN/latex";
local FILE_NAME;
[ $2 ] && FILE_NAME="$2" || {
printf '\nInput document title : '
read FILE_NAME; echo;
}
[ ! "$FILE_NAME" ] && { echo "ERROR :: File name required!"; return 1; }
local NEW_FILE="$FILE_NAME.tex";
[ -f "./$NEW_FILE" ] && { echo "ERROR :: File already already exists : $FILE_NAME.tex"; return 2; }
[[ $1 && -d "$PARENT_TEMPLATE_DIR/$1" ]] \
&& local TEMPLATE_DIR="$PARENT_TEMPLATE_DIR/$1" \
|| local TEMPLATE_DIR="$PARENT_TEMPLATE_DIR/default";
cp "$PARENT_TEMPLATE_DIR/template.tex" "./$FILE_NAME.tex";
[ ! -f "./body.tex" ] \
&& cp "$TEMPLATE_DIR/body.tex" "./body.tex" \
|| echo 'WARNING :: `./body.tex` already exists. Template body not copied.' ;
[ ! -f "./imports.sty" ] \
&& cp "$TEMPLATE_DIR/imports.sty" "./imports.sty" \
|| echo 'WARNING :: `./imports.sty` already exists. Template imports not copied.';
[ ! -f "./formatting.sty" ] \
&& cp "$TEMPLATE_DIR/formatting.sty" "./formatting.sty" \
|| echo 'WARNING :: `./formatting.sty` already exists. Template formatting not copied.';
}
_LATEX_NEW_DOCUMENT () {
compadd $(ls $DOTWRYN/latex | grep -v .tex);
}
function LATEX_COMPILE() {
local COMPILE_TYPE='pdf';
[ $1 ] && COMPILE_TYPE="$1";
local COMPILE_ME="$(find -mindepth 0 -maxdepth 1 -name \*.tex | grep -v body.tex)";
[ $(echo "$COMPILE_ME" | wc -l) -gt 1 ] && { echo 'ERROR :: Multiple compatible files detected. Please compile manually.'; return 1; }
[[ ! $COMPILE_ME || $(echo "$COMPILE_ME" | wc -l) -lt 1 ]] && { echo 'ERROR :: No compatible files detected. Please ensure .tex file exists in current direcotory'; return 2;}
case $COMPILE_TYPE in
pdf)
pdflatex --version >/dev/null 2>&1 && {
echo 'Beginning initial compile...';
timeout 3 pdflatex $COMPILE_ME >/dev/null && {
echo 'Beginning secondary compile...';
timeout 3 pdflatex $COMPILE_ME >/dev/null && LATEX_SUCCESS;
} || {
echo 'ERROR :: Failed to compile. Check local log files';
return 1;
}
} || {
echo 'ERROR :: Compiling LaTeX to pdf requires pdflatex: (https://www.tug.org/applications/pdftex)';
return 2;
}
;;
dvi)
latex --version >/dev/null 2>&1 && {
echo 'Beginnint initial compile...';
timeout 3 latex $COMPILE_ME >/dev/null && {
echo 'Beginning secondary compile...';
timeout 3 latex $COMPILE_ME >/dev/null && LATEX_SUCCESS;
} || {
echo 'ERROR :: Failed to compile. Check local log files';
return 1;
}
} || {
echo 'ERROR :: Compiling LaTeX to dvi requires latex: (https://www.latex-project.org/get/)';
return 2;
}
;;
*)
echo "ERROR :: Unsupported LaTeX compile format : $COMPILE_TYPE";
return 2;
;;
esac
}
_LATEX_COMPILE () {
compadd pdf dvi default;
}
function LATEX_SUCCESS() {
local MSG='success';
local MSG_LONG='LaTeX compile successful!';
local FIGLET_SUPPORT=0;
local LOLCAT_SUPPORT=0;
figlet -v >/dev/null 2>&1 && FIGLET_SUPPORT=1;
lolcat -v >/dev/null 2>&1 && LOLCAT_SUPPORT=1;
[ $FIGLET_SUPPORT -ne 0 ] && {
[ $LOLCAT_SUPPORT -ne 0 ] \
&& figlet $MSG | lolcat \
|| figlet $MSG;
} || {
[ $LOLCAT_SUPPORT -ne 0 ] \
&& echo $MSG | lolcat \
|| echo $MSG_LONG;
}
echo;
}