v2.3.0
===================================================================== --- New Scripts -------------------------- zsh ) latex + latex template engine - latex/build-pdf - latex/cleanup - latex/create-new - latex/get-pdf - latex/open-pdf beta SQL script -- got tired of floating this; works, but only OK - db/run-sql/postgres --- Changes ------------------------------ - Added 'math', 'basic', and 'times-new-roman' templates to latex - Added 'readlink' to list of required coreutils - Added __INPUT to read into a variable with prompt (zsh/utils/io) - Added $EXECUTION_DIR to interact with the user's working directory --- Bug Fixes ---------------------------- - subscwrypts no longer force stdout/stderr to tty
This commit is contained in:
31
zsh/latex/build-pdf
Executable file
31
zsh/latex/build-pdf
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=(
|
||||
pdflatex
|
||||
rg
|
||||
)
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#####################################################################
|
||||
|
||||
PDFLATEX() {
|
||||
[ ! $1 ] && __FAIL 1 'must provide filename'
|
||||
local FILENAME=$(GET_MAIN_LATEX_FILENAME "$1")
|
||||
|
||||
local ARGS=(-interaction=nonstopmode)
|
||||
ARGS+=("$FILENAME")
|
||||
|
||||
cd "$(dirname $FILENAME)"
|
||||
|
||||
__STATUS 'running compile (1/2)'
|
||||
pdflatex ${ARGS[@]} \
|
||||
|| __FAIL 2 'first compile failed (see above)'
|
||||
|
||||
__STATUS 'running compile (2/2)'
|
||||
pdflatex ${ARGS[@]} >/dev/null 2>&1 \
|
||||
|| __FAIL 3 'second compile failed :c'
|
||||
|
||||
__SUCCESS "created '$(echo $FILENAME | sed 's/\.[^.]*$/.pdf/')'"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
PDFLATEX $@
|
20
zsh/latex/cleanup
Executable file
20
zsh/latex/cleanup
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#####################################################################
|
||||
|
||||
CLEAN_LATEX_LOGFILES() {
|
||||
local DIRECTORY=$(__GET_PATH_TO_RELATIVE_ARGUMENT ".")
|
||||
[ $1 ] && DIRECTORY="$(dirname "$(GET_MAIN_LATEX_FILENAME "$1")")"
|
||||
[ $DIRECTORY ] && [ -d $DIRECTORY ] \
|
||||
|| __FAIL 1 'unable to parse valid directory'
|
||||
|
||||
cd $DIRECTORY
|
||||
rm $(ls | grep '\.\(aux\)\|\(log\)\|\(pdf\)\|\(out\)\|\(dvi\)$')
|
||||
|
||||
__SUCCESS "cleaned up latex artifacts in '$DIRECTORY'"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
CLEAN_LATEX_LOGFILES $@
|
34
zsh/latex/common.zsh
Normal file
34
zsh/latex/common.zsh
Normal file
@ -0,0 +1,34 @@
|
||||
_DEPENDENCIES+=(
|
||||
rg
|
||||
)
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/../common.zsh
|
||||
#####################################################################
|
||||
|
||||
GET_MAIN_LATEX_FILENAME() {
|
||||
local FILENAME=$(__GET_PATH_TO_RELATIVE_ARGUMENT "$1")
|
||||
local DIRNAME="$FILENAME"
|
||||
|
||||
for _ in {1..3}
|
||||
do
|
||||
CHECK_IS_MAIN_LATEX_FILE && return 0
|
||||
DIRNAME="$(dirname "$FILENAME")"
|
||||
__STATUS "checking '$DIRNAME'"
|
||||
[[ $DIRNAME =~ ^$HOME$ ]] && break
|
||||
FILENAME=$(
|
||||
rg -l --max-depth 1 'documentclass' "$DIRNAME/" \
|
||||
| grep '\.tex$' \
|
||||
| head -n1 \
|
||||
)
|
||||
__STATUS "here is '$FILENAME'"
|
||||
done
|
||||
|
||||
__WARNING 'unable to find documentclass; pdflatex will probably fail'
|
||||
echo "$1"
|
||||
}
|
||||
|
||||
CHECK_IS_MAIN_LATEX_FILE() {
|
||||
[ ! $FILENAME ] && return 1
|
||||
grep -q 'documentclass' $FILENAME 2>/dev/null && echo $FILENAME || return 3
|
||||
}
|
||||
|
63
zsh/latex/create-new
Executable file
63
zsh/latex/create-new
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=(
|
||||
pdflatex
|
||||
rg
|
||||
)
|
||||
_REQUIRED_ENV+=()
|
||||
|
||||
TEMPLATE_DIR="${0:a:h}/templates"
|
||||
|
||||
source ${0:a:h}/common.zsh
|
||||
#####################################################################
|
||||
|
||||
CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE() {
|
||||
local DOCUMENT_DIR="$EXECUTION_DIR"
|
||||
local TEMPLATE=$(GET_TEMPLATES | __FZF 'select a template')
|
||||
[ ! $TEMPLATE ] && __ABORT
|
||||
__SUCCESS "selected template '$TEMPLATE'"
|
||||
|
||||
__INPUT DOC_TITLE 'document title' || __ABORT
|
||||
|
||||
local DOCUMENT_FILE="$DOCUMENT_DIR/$(SLUGIFY_TITLE).tex"
|
||||
[ -f "$DOCUMENT_FILE" ] && __FAIL 1 "'$(basename $DOCUMENT_FILE)' already exists"
|
||||
|
||||
__INPUT DOC_ID 'document id/subtitle'
|
||||
__INPUT AUTHOR 'author name'
|
||||
__INPUT AUTHOR_ID 'author id/title'
|
||||
|
||||
{
|
||||
PRINT_TITLE_INFO
|
||||
cat "$TEMPLATE_DIR/$TEMPLATE/template.tex"
|
||||
} > "$DOCUMENT_FILE"
|
||||
cp "$TEMPLATE_DIR/gitignore" "$DOCUMENT_DIR/.gitignore"
|
||||
for FILE in $(find "$TEMPLATE_DIR/$TEMPLATE" -type f | grep -v '/template.tex$')
|
||||
do
|
||||
cp "$FILE" "$DOCUMENT_DIR/" || return 2
|
||||
done
|
||||
[[ ! $TEMPLATE =~ ^basic$ ]] \
|
||||
&& mkdir "$DOCUMENT_DIR/sections" "$DOCUMENT_DIR/graphics"
|
||||
|
||||
__SUCCESS "finished generating '$(basename $DOCUMENT_FILE)' from '$TEMPLATE'"
|
||||
}
|
||||
|
||||
GET_TEMPLATES() {
|
||||
find "$TEMPLATE_DIR" -type d | sed "s^$TEMPLATE_DIR/*^^; /^$/d"
|
||||
}
|
||||
|
||||
PRINT_TITLE_INFO() {
|
||||
local DATESTRING=$(date '+%B %_d, %Y' | sed 's/ \{1,\}/ /g')
|
||||
sed "
|
||||
s^LATEX-DOC-TITLE^$DOC_TITLE^
|
||||
s^LATEX-DOC-DATE^$DATESTRING^
|
||||
s^LATEX-DOC-ID^$DOC_ID^
|
||||
s^LATEX-AUTHOR-NAME^$AUTHOR^
|
||||
s^LATEX-AUTHOR-ID^$AUTHOR_ID^
|
||||
" "$TEMPLATE_DIR/main.tex"
|
||||
}
|
||||
|
||||
SLUGIFY_TITLE() {
|
||||
echo $DOC_TITLE | sed "s^['\"\\/,\!@#\$%^&*()]*^^g; s^\s\+^-^g;"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE $@
|
15
zsh/latex/get-pdf
Executable file
15
zsh/latex/get-pdf
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#####################################################################
|
||||
|
||||
GET_PDF() {
|
||||
local FILENAME=$(GET_MAIN_LATEX_FILENAME "$1" | sed 's/\.[^.]*$/.pdf/')
|
||||
[ $FILENAME ] && [ -f $FILENAME ] || __FAIL 1 "no compiled pdf found for '$1'; have you run 'build-pdf'?"
|
||||
__SUCCESS 'found main pdf'
|
||||
echo $FILENAME
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
GET_PDF $@
|
15
zsh/latex/open-pdf
Executable file
15
zsh/latex/open-pdf
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/zsh
|
||||
_DEPENDENCIES+=()
|
||||
_REQUIRED_ENV+=()
|
||||
source ${0:a:h}/common.zsh
|
||||
#####################################################################
|
||||
|
||||
OPEN_PDF() {
|
||||
local PDF=$(__RUN_SCWRYPT latex/get-pdf -n -- $1)
|
||||
[ ! $PDF ] && return 1
|
||||
|
||||
__OPEN "$PDF"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
OPEN_PDF $@
|
37
zsh/latex/templates/basic/template.tex
Normal file
37
zsh/latex/templates/basic/template.tex
Normal file
@ -0,0 +1,37 @@
|
||||
\usepackage[margin=.75in,bottom=0.5in,top=1.0in]{geometry}
|
||||
|
||||
\usepackage{enumitem}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{lastpage}
|
||||
|
||||
\newcommand{\headerL} {\documentTitle: \documentDate}
|
||||
\newcommand{\headerC} {\documentId}
|
||||
\newcommand{\headerR} {\authorName\ (\authorId)}
|
||||
\newcommand{\pageOfTotal} {\thepage\ of~\pageref{LastPage}}
|
||||
|
||||
\pagestyle{fancy}
|
||||
\fancypagestyle{plain}{%
|
||||
\fancyhf{}
|
||||
\fancyhead[L]{\headerL}\fancyhead[R]{\headerR}\fancyhead[C]{\headerC}
|
||||
\fancyfoot[C]{\pageOfTotal}
|
||||
}
|
||||
|
||||
\renewcommand{\baselinestretch}{1}
|
||||
\setlength{\parskip}{0em}
|
||||
\hyphenpenalty=5000%
|
||||
|
||||
\fancyhf{}
|
||||
\fancyhead[L]{\headerL}\fancyhead[R]{\headerR}\fancyhead[C]{\headerC}
|
||||
\fancyfoot[C]{\pageOfTotal}
|
||||
|
||||
\title{\documentTitle}
|
||||
\author{\authorName\ \\ \authorId}
|
||||
\date{\documentDate}
|
||||
|
||||
\begin{document}
|
||||
\maketitle%
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
\end{document}
|
5
zsh/latex/templates/gitignore
Normal file
5
zsh/latex/templates/gitignore
Normal file
@ -0,0 +1,5 @@
|
||||
*.aux
|
||||
*.log
|
||||
*.out
|
||||
*.pdf
|
||||
*.dvi
|
9
zsh/latex/templates/main.tex
Normal file
9
zsh/latex/templates/main.tex
Normal file
@ -0,0 +1,9 @@
|
||||
\documentclass[letterpaper]{article}
|
||||
|
||||
\newcommand{\documentTitle} {LATEX-DOC-TITLE}
|
||||
\newcommand{\documentDate} {LATEX-DOC-DATE}
|
||||
\newcommand{\documentId} {LATEX-DOC-ID}
|
||||
|
||||
\newcommand{\authorName} {LATEX-AUTHOR-NAME}
|
||||
\newcommand{\authorId} {LATEX-AUTHOR-ID}
|
||||
|
11
zsh/latex/templates/math/code.sty
Normal file
11
zsh/latex/templates/math/code.sty
Normal file
@ -0,0 +1,11 @@
|
||||
\ProvidesPackage{code}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\clispsnippet}[2]{%
|
||||
\lstinputlisting[%
|
||||
caption=#1,
|
||||
language=Lisp,
|
||||
showstringspaces=false,
|
||||
numbers=left,
|
||||
]{#2}
|
||||
}
|
46
zsh/latex/templates/math/formatting.sty
Normal file
46
zsh/latex/templates/math/formatting.sty
Normal file
@ -0,0 +1,46 @@
|
||||
\ProvidesPackage{formatting}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\headerLeft} {\documentTitle: \documentDate}
|
||||
\newcommand{\headerCenter} {\documentId}
|
||||
\newcommand{\headerRight} {\authorName\ (\authorId)}
|
||||
\newcommand{\pageOfTotal} {\thepage\ of~\pageref{LastPage}}
|
||||
|
||||
\newtheorem{theorem}{Theorem}[section]
|
||||
\newtheorem{lemma}[theorem]{Lemma}
|
||||
\newtheorem{corollary}{Corollary}[theorem]
|
||||
|
||||
\RequirePackage[margin=1in,bottom=.5in,includefoot]{geometry}
|
||||
\RequirePackage{lastpage}
|
||||
\RequirePackage{fancyhdr}
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
% Page 1
|
||||
|
||||
\pagestyle{fancy}
|
||||
\fancypagestyle{plain}{%
|
||||
\fancyhf{}
|
||||
\fancyhead[L]{\headerLeft}
|
||||
\fancyhead[R]{\headerRight}
|
||||
\fancyhead[C]{\headerCenter}
|
||||
\fancyfoot[C]{\pageOfTotal}
|
||||
}
|
||||
|
||||
\renewcommand{\baselinestretch}{1}
|
||||
\setlength{\parskip}{0em}
|
||||
\setlength{\parindent}{0em}
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
% Pages 2+
|
||||
|
||||
\fancyhf{}
|
||||
\fancyhead[L]{\headerLeft}
|
||||
\fancyhead[R]{\headerRight}
|
||||
\fancyhead[C]{\headerCenter}
|
||||
\fancyfoot[C]{\pageOfTotal}
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\title{\documentTitle}
|
||||
\author{\authorName\ \\ \authorId}
|
||||
\date{\documentDate}
|
0
zsh/latex/templates/math/gitignore
Normal file
0
zsh/latex/templates/math/gitignore
Normal file
16
zsh/latex/templates/math/imports.sty
Normal file
16
zsh/latex/templates/math/imports.sty
Normal file
@ -0,0 +1,16 @@
|
||||
\ProvidesPackage{imports}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\RequirePackage{amssymb} % "bold" math letters (e.g. set of integers ℤ)
|
||||
\RequirePackage{amsmath} % advanced math symbols
|
||||
|
||||
\RequirePackage{listings} % code snippet styling block
|
||||
|
||||
\RequirePackage{tikz} % graphic drawing / generation
|
||||
\usetikzlibrary{arrows,automata}
|
||||
\usetikzlibrary{trees}
|
||||
|
||||
\RequirePackage{graphicx} % include images
|
||||
\graphicspath{{./graphics/}}
|
||||
|
||||
\RequirePackage[english]{babel} % -- English compilation rules
|
13
zsh/latex/templates/math/shorthand.sty
Normal file
13
zsh/latex/templates/math/shorthand.sty
Normal file
@ -0,0 +1,13 @@
|
||||
\ProvidesPackage{shorthand}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\egfcoefficient}{\ensuremath{\left[\frac{x^n}{n!}\right]}}
|
||||
\newcommand{\ogfcoefficient}{\ensuremath{\left[x^n\right]}}
|
||||
\newcommand{\falling}[1]{^{\underline{#1}}}
|
||||
\newcommand{\divides}{\ensuremath{\;\backslash\;}}
|
||||
|
||||
\newcommand{\sumgz}{\ensuremath{\sum_{n\geq 0}}}
|
||||
\newcommand{\sumdiv}{\ensuremath{\sum_{d\divides n}}}
|
||||
|
||||
\newcommand{\union}{\ensuremath{\cup}}
|
||||
\newcommand{\intersect}{\ensuremath{\cap}}
|
12
zsh/latex/templates/math/template.tex
Normal file
12
zsh/latex/templates/math/template.tex
Normal file
@ -0,0 +1,12 @@
|
||||
\usepackage{imports}
|
||||
\usepackage{formatting}
|
||||
\usepackage{shorthand}
|
||||
\usepackage{code}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
% ---------------------------------------------------------------------
|
||||
% \input{sections/01.introduction.tex}
|
||||
% \includegraphic{graphics/diagram-a.png}
|
||||
% ---------------------------------------------------------------------
|
||||
\end{document}
|
@ -0,0 +1,7 @@
|
||||
\ProvidesPackage{custom-headers}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\firstH}[1] {\begin{large}\textbf{#1}\end{large}\par}
|
||||
\newcommand{\secondH}[1] {\textbf{#1}\par}
|
||||
\newcommand{\thirdH}[1] {\textbf{#1}. }
|
||||
\newcommand{\fourthH}[1] {\textbf{\textit{#1}}. }
|
31
zsh/latex/templates/times-new-roman-12/formatting.sty
Normal file
31
zsh/latex/templates/times-new-roman-12/formatting.sty
Normal file
@ -0,0 +1,31 @@
|
||||
\ProvidesPackage{formatting}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\horizontalHeader} {%
|
||||
\authorName\hfill
|
||||
\authorId\hfill
|
||||
\documentId\hfill
|
||||
\documentDate%
|
||||
}
|
||||
|
||||
\RequirePackage[margin=1in]{geometry}
|
||||
\RequirePackage{fancyhdr}
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\pagestyle{fancy}
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\fancyhead[C]{\horizontalHeader}
|
||||
\fancyfoot[C]{\thepage}
|
||||
|
||||
\renewcommand{\baselinestretch}{1}
|
||||
\setlength{\parskip}{1em}
|
||||
\setlength{\parindent}{0em}
|
||||
\raggedright%
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\newcommand{\insertTitle} {%
|
||||
\centerline{\begin{large}\textbf{\documentTitle}\end{large}}
|
||||
}
|
||||
|
11
zsh/latex/templates/times-new-roman-12/imports.sty
Normal file
11
zsh/latex/templates/times-new-roman-12/imports.sty
Normal file
@ -0,0 +1,11 @@
|
||||
\ProvidesPackage{imports}
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
\RequirePackage{times} % "Times New Roman" font
|
||||
|
||||
\RequirePackage{kantlipsum} % generate Kantian lorem ipsum
|
||||
|
||||
\RequirePackage{graphicx} % include images
|
||||
\graphicspath{{./graphics/}}
|
||||
|
||||
\RequirePackage[english]{babel} % -- English compilation rules
|
15
zsh/latex/templates/times-new-roman-12/template.tex
Normal file
15
zsh/latex/templates/times-new-roman-12/template.tex
Normal file
@ -0,0 +1,15 @@
|
||||
\usepackage{imports}
|
||||
\usepackage{formatting}
|
||||
\usepackage{custom-headers}
|
||||
|
||||
\begin{document}
|
||||
\insertTitle%
|
||||
% ---------------------------------------------------------------------
|
||||
|
||||
% \input{sections/abstract.tex}
|
||||
% \includgraphics{graphics/table-a.png}
|
||||
\firstH{First-level Header}
|
||||
\kant%
|
||||
|
||||
% ---------------------------------------------------------------------
|
||||
\end{document}
|
Reference in New Issue
Block a user