Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
🧰 Useful CLI one-liners for LaTex
# Show all errors, warnings, and undefined messages in log file after compilation with location in log file for further analysis
grep -iHEn "error|warning|undefined" *.log
# Find all the duplicated labels in a directory
grep -ERh "\\\\label\{\w*:\w*\}" --include="*.tex" | tr -d " " | sort | uniq -c | awk '$1>1 {print $0}'
# Validate references.bib using https://github.com/Pezmc/BibLatex-Check
curl https://raw.githubusercontent.com/Pezmc/BibLatex-Check/master/biblatex_check.py 2>/dev/null | python - -b $(find ./ -maxdepth 1 -name "*.bib" | head -n1) -a $(find ./ -maxdepth 1 -name "*.aux" | head -n1)
# Find all the unused labels
# Calling this one a "one-liner" is pushing it, but it's very useful nonetheless so it's being included
REF=($(IFS=;grep -ERoh "\\\\\w*ref\{\w*:\w*\}" . | sort | uniq | awk -F{ '{print $2}' | tr -d '}'));LABEL=($(IFS=;grep -ERoh "\\\\label\{\w*:\w*\}" . | sort | uniq | awk -F{ '{print $2}' | tr -d '}'));for i in $LABEL;do;echo $REF | grep -iq " $i ";if [[ $? -eq 1 ]];then;printf "\033[0;31mUNUSED LABEL: \033[0;32m$i\033[0m\n";fi;done;
# Get document (rough) wordcount. Doesn't exclude referencing etc. but accurate enough
pdftotext main.pdf - | grep -ohE "\b[a-zA-Z]{2,}\b" | tr '[:upper:]' '[:lower:]' | sort | uniq > /tmp/words.txt; pdftotext main.pdf - | grep -ohFf /tmp/words.txt | wc -w
# Spell checker - 2 options (requires `aspell-en`):
# 1) Non-interactive - list of misspelled words
pdftotext main.pdf - | grep -ohE "\b[a-zA-Z]{2,}\b" | tr '[:upper:]' '[:lower:]' | sort | uniq | aspell list -t | sort | uniq -c
# 2) Interactive spell-check - file by file
aspell -c -t main.tex # Replace main.tex with whatever tex file you're checking
# Pages between start of intro to start of appendix (only useful in my use case for MEng diss)
echo $(($(pdfgrep "A. Appendix" main.pdf -n | awk -F: '{print $1}')-$(pdfgrep "1. Introduction" main.pdf -n | awk -F: '{print $1}')))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment