Skip to content

Instantly share code, notes, and snippets.

@mu373
Last active July 3, 2022 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mu373/aad52275cb9eb0eb09512c3646487bd9 to your computer and use it in GitHub Desktop.
Save mu373/aad52275cb9eb0eb09512c3646487bd9 to your computer and use it in GitHub Desktop.
Finalize LaTeX projects for submission

latex-finalize.sh

A script to prepare LaTeX source files for submission

What it does

  • Copies all source files into single destination directory
  • Flattens LaTeX files that were included inline into main.tex
  • Flattens BibTeX bibliography into main.tex
  • Compiles LaTeX to PDF in destination folder
  • Archives and compresses all TeX sources into ZIP file

Requirements

Directory map

project_foobar/
├─ tex/ # working directory
│  ├─ main.tex
│  ├─ mybibfile.bib
│  ├─ nature.bst
│  ├─ chapters/
│  │  ├─ 00-abstract.tex
│  │  ├─ 01-introduction.tex
│  │  ├─ 02-methods.tex
│  ├─ figure/
│  │  ├─ figure-1.pdf
│  │  ├─ figure-2.pdf
│  ├─ scripts/
│  │  ├─ latex-flatten.py
│  │  ├─ latex-finalize.sh
├─ manuscript-for-submission/
│  ├─ 2022-07-03T17-54-56/ # Destination directory
│  │  ├─ tex-sources/
│  │  │  ├─ main.tex # All TeX files and BibTeX are flattened
│  │  │  ├─ figure-1.pdf
│  │  │  ├─ figure-2.pdf
│  │  ├─ manuscript.pdf # Compiled PDF
│  │  ├─ tex-sources.zip
#!/bin/zsh
set -euo pipefail
rootDir='/Users/john/Dropbox/Research/projecct_foobar'
currenttime=$(date +"%Y-%m-%dT%H-%M-%S")
originalTeXDir=$rootDir"/tex" # LaTeX working directory
submissionDir=$rootDir"/manuscript-for-submission/"$currenttime # Target directory
submissionTeXDir=$submissionDir"/tex-sources" # Target directory
# Create directory to store submission
mkdir -p $submissionTeXDir
# Copy source files
cp $originalTeXDir/main.tex $submissionTeXDir
cp $originalTeXDir/*.bst $submissionTeXDir
cp $originalTeXDir/*.bib $submissionTeXDir
cp $originalTeXDir/figure/*.pdf $submissionTeXDir
cp -r $originalTeXDir/chapters/ $submissionTeXDir/chapters/
# Flatten chapters into main.tex
$originalTeXDir/scripts/latex-flatten.py $submissionTeXDir/main.tex $submissionTeXDir/main-flattened.tex
# Remove original TeX file before flattening
rm -rf $submissionTeXDir/chapters/
rm $submissionTeXDir/main.tex
# Rename flattend file as main.tex
mv $submissionTeXDir/main-flattened.tex $submissionTeXDir/main.tex
# Change figure path
# We have moved figures just under the tex-source directory
sed -i '' -e "s%{figure/%{%g" $submissionTeXDir/main.tex
cd $submissionTeXDir
# Prepare for bibtex
pdflatex main.tex
# Generate bibliography (bbl)
bibtex main.aux
# Flatten bibliography
# Remove \bibliography{mybibfile.bib} and include bbl contents in main.tex
sed -i '' -e "s%bibliography{mybibfile}%input{main.bbl}%g" $submissionTeXDir/main.tex
$originalTeXDir/scripts/latex-flatten.py $submissionTeXDir/main.tex $submissionTeXDir/main-flattened.tex
mv $submissionTeXDir/main-flattened.tex $submissionTeXDir/main.tex
# Compile the final PDF
latexmk -pdf main.tex
# Move comipled PDF to parent directory
mv $submissionTeXDir/main.pdf $submissionDir/manuscript.pdf
# Remove .bib from tex-source directory
rm $submissionTeXDir/*.bib
# Remove auxilary files from tex-source directory
rm $submissionTeXDir/*.aux
rm $submissionTeXDir/*.log
rm $submissionTeXDir/*.blg
rm $submissionTeXDir/*.bbl
# Archive and compress tex-source directory
zip -r $submissionDir/tex-sources.zip .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment