#!/usr/bin/env bash # # This script builds every document in this repo, # (handout and solutions, if they exist), and creates # a zip of all resulting files. # Where we're running this script run_dir=$(pwd) # Output files target_dir="${run_dir}/output" target_zip="${run_dir}/output.zip" # Clean up previous build rm -drf "${target_dir}" rm -f "${target_zip}" # Build one document. # Args: # target_dir: move output pdf to this directory # job_name: name of this document. Output is saved as job_name.pdf # doc_dir: cd here before building. # main_file: build this tex file. Usually main.tex function build() { local target_dir="${1}" local job_name="${2}" local doc_dir="${3}" local main_file="${4}" echo "|> Building ${job_name}..." cd "${doc_dir}" # Build handout echo "\\def\\argNoSolutions{1}\\input{${main_file}}" | \ tectonic \ --outfmt pdf \ --chatter minimal \ - stat=$? if [[ $stat == 0 ]]; then mkdir -p "${target_dir}" mv texput.pdf "${target_dir}/${job_name}.pdf" else rmdir --ignore-fail-on-non-empty "${target_dir}" rm -f texput.pdf echo "|> Handout build failed" echo "" fi # Build solutions echo "\\def\\argYesSolutions{1}\\input{${main_file}}" | \ tectonic \ --outfmt pdf \ --chatter minimal \ - stat=$? if [[ $stat == 0 ]]; then mkdir -p "${target_dir}" mv texput.pdf "${target_dir}/${job_name}.sols.pdf" else rmdir --ignore-fail-on-non-empty "${target_dir}" rm -f texput.pdf echo "|> Solution build failed" fi # Clean up if files contents are identical if cmp --silent -- "${target_dir}/${job_name}.sols.pdf" "${target_dir}/${job_name}.pdf"; then echo "|> Versions identical, removing ${job_name}.sols.pdf" rm "${target_dir}/${job_name}.sols.pdf" fi echo "" cd "${run_dir}" } for d in "${run_dir}/Misc/Warm-Ups"/*.tex ; do file="$(basename "${d}")" build \ "${target_dir}/Warm-Ups" \ "${file%.*}" \ "${run_dir}/Misc/Warm-Ups" \ "${file}" done for d in "${run_dir}/Advanced"/*/ ; do doc_dir=$(realpath "${d}") job_name="$(basename "${doc_dir}")" build \ "${target_dir}/Advanced" \ "${job_name}" \ "${doc_dir}" \ "main.tex" done for d in "${run_dir}/Intermediate"/*/ ; do doc_dir=$(realpath "${d}") job_name="$(basename "${doc_dir}")" build \ "${target_dir}/Intermediate" \ "${job_name}" \ "${doc_dir}" \ "main.tex" done # cd so paths in zip are relative cd "${target_dir}" zip -FSr "${target_zip}" .