"""Build the illustration and PDFs. Requires a TeX distribution on PATH. Copyright 2026 Hatim Naqos. LPPL 1.3c or later. Usage: python build.py [--engine pdflatex|xelatex|lualatex] """ import argparse from pathlib import Path import shutil import subprocess import tempfile root = Path(__file__).resolve().parent parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--engine', choices=['pdflatex', 'xelatex', 'lualatex'], default='xelatex') args = parser.parse_args() def compile_source(engine, source, output, passes=3): if shutil.which(engine) is None: raise SystemExit(f'Required compiler not on PATH: {engine}') for _ in range(passes): result = subprocess.run( [engine, '-interaction=nonstopmode', '-halt-on-error', f'-output-directory={output}', source], cwd=root, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if result.returncode: print(result.stdout.decode('utf-8', errors='replace')) raise SystemExit(f'Compilation failed: {source}') with tempfile.TemporaryDirectory(prefix='juniamaroc-beamer-build-') as temp: scratch = Path(temp) compile_source('pdflatex', 'juniamaroc-beamer-figure.tex', scratch, passes=1) shutil.copy2(scratch / 'juniamaroc-beamer-figure.pdf', root / 'assets') for stem in ['juniamaroc-beamer-doc', 'juniamaroc-beamer-demo', 'juniamaroc-beamer-starter']: compile_source(args.engine, stem + '.tex', scratch) shutil.copy2(scratch / (stem + '.pdf'), root / (stem + '.pdf')) print('Built ' + stem + '.pdf')