# Route 3: Academic & Scientific PDF via LaTeX Produce publication-grade PDFs from `.tex` source files compiled with Tectonic. Suited for academic papers, theses, mathematical manuscripts, IEEE/ACM-format submissions, and any document where the user explicitly requests LaTeX. **Guiding principle**: when someone asks for "a LaTeX PDF," they expect a polished, professional result — not a bare-minimum compilation. --- ## Environment Preparation The binary of Tectonic lands at `scripts/tectonic`. ### Compilation — Always Use the Wrapper Script All compilations **must** go through `scripts/pdf.py convert.latex`. It handles: - Stripping noisy package-download logs - Filtering progress chatter - Surfacing genuine errors and warnings - Reporting PDF statistics (file size, page count, word estimate, image tally) **Do not invoke Tectonic directly.** ```bash # One-pass build python3 scripts/pdf.py convert.latex main.tex # Two passes (resolves cross-references) python3 scripts/pdf.py convert.latex main.tex --runs 2 # Verbose mode (retains full log output) python3 scripts/pdf.py convert.latex main.tex --keep-logs ``` --- ## Pre-Writing Planning Before touching `.tex` code, determine the document's category and let that shape your approach. ### Recognising the Document Type | Type | Typical outputs | Key concern | |------|----------------|-------------| | **Scholarly** | Journal articles, conference proceedings, regulatory specs | Rigorous adherence to academic conventions; bibliography accuracy | | **Utilitarian** | Technical reports, reference manuals, product specs | Pack maximum information while preserving scannability | | **Persuasive** | Funding proposals, pitch documents, project roadmaps | Clean professionalism throughout, with one or two visual high-points (title page, KPI dashboards) | | **Expressive** | Design portfolios, brand guidebooks, showcases | Bold typographic and chromatic choices; deliberate rule-breaking that amplifies impact | ### Fallback Aesthetic (No Style Specified) When the user gives no visual direction, apply a **measured, high-craft** system: 1. **Contrast** — clear figure-ground separation; headings visually distinct from running text 2. **Hierarchy** — establish reading order through deliberate variation in size, weight, and hue 3. **White space** — ample margins and leading to let the page breathe 4. **Coherence** — one typeface family, one accent colour, one spacing rhythm #### Enrichment Elements (Add Proactively When Appropriate) - **Decorative**: shaded callout boxes, sidebars, comparison panels → `tcolorbox` - **Scholarly**: theorem / definition / proof environments → `amsthm` + `tcolorbox`; process diagrams → TikZ - **Page furniture**: running headers and footers → `fancyhdr`; chapter openers → `titlesec` Introduce these components on your own initiative whenever the content benefits — don't wait to be told. --- ## Mandatory Rules ### Rule 1 — Every Build Diagnostic Demands Attention The wrapper classifies compiler output into three tiers: | Tier | Impact | Required response | |------|--------|-------------------| | **Errors** | Build aborts | Resolve before anything else | | **Layout defects** | Overfull / underfull boxes, unavailable font shapes, missing glyphs | Repair prior to delivery | | **Advisories** | Remaining warnings | Assess individually; fix whenever feasible | **Never acceptable**: shrugging off warnings with "they don't affect the final PDF." Every diagnostic merits investigation. ### Rule 2 — Modular Files for Larger Works A single generation turn can comfortably handle roughly **500 lines** of TeX. **When to split**: - Anticipated output exceeds 5 pages, **or** - Three or more heavyweight elements are present (wide tables, block equations, TikZ graphics) Stitch modules together with `\input{chapter1}`, `\input{chapter2}`, etc. ### Rule 3 — Foundation Preamble ```latex \documentclass{article} % Essentials \usepackage{graphicx} \usepackage{xcolor} \usepackage{geometry} \usepackage{amsmath} % Load before hyperref % hyperref — ALWAYS last among content packages \usepackage[ colorlinks=true, linkcolor=blue, citecolor=darkgray, urlcolor=blue, bookmarks=true, bookmarksnumbered=true, unicode=true ]{hyperref} % Page dimensions \geometry{a4paper, top=2.5cm, bottom=2.5cm, left=3cm, right=2.5cm} % CV variant: \geometry{a4paper, margin=1.5cm} % Superscript citation numbers (scholarly convention) \usepackage[numbers,super,sort&compress]{natbib} \bibliographystyle{unsrtnat} % Commonly needed extras \usepackage{tcolorbox} \usepackage{colortbl} \usepackage{booktabs} \usepackage{enumitem} ``` **hyperref positioning**: it must load after virtually every other package to avoid option clashes. ### Rule 4 — TeX Source Hygiene **Prohibited patterns**: - Emoji glyphs (no native LaTeX engine supports them) - Markdown `*asterisk*` formatting (generates compile-time errors) **Use instead**: ```latex \textbf{bold text} \emph{emphasised text} ``` These are frequent model-generation slips — catch them proactively. ### Rule 5 — Multi-Language & Font Handling - `babel` and `polyglossia` are incompatible — load only one - When using `polyglossia`, ensure `amsmath` appears earlier in the preamble - Tectonic downloads standard LaTeX typefaces automatically (Latin Modern, etc.) - To reference system-installed fonts via `\setmainfont{}`, first probe with `fc-list :lang=ar` - Broadly available choices: DejaVu, Noto typeface families ### Rule 6 — Clickable Navigation Is Non-Negotiable Interactive navigation is a baseline professional expectation. #### 6.1 Table of Contents ```latex \tableofcontents % Entries are auto-linked courtesy of hyperref \listoffigures \listoftables ``` #### 6.2 Internal Cross-References **Attach labels** right after each numbered element: ```latex \section{Background}\label{sec:bg} \begin{figure}[htbp] \includegraphics{...} \caption{Overview diagram}\label{fig:overview} \end{figure} \begin{table}[htbp] \caption{Benchmark results}\label{tab:bench} ... \end{table} \begin{equation}\label{eq:energy} E = mc^2 \end{equation} ``` **Cite these labels** (each produces a live hyperlink): ```latex As noted in Section~\ref{sec:bg}... Figure~\ref{fig:overview} illustrates... Table~\ref{tab:bench} summarises... Equation~\eqref{eq:energy} yields... % \eqref auto-wraps in parentheses See page~\pageref{sec:bg}... ``` **Good habits**: - Place a non-breaking space `~` before `\ref` to avoid orphaned line breaks - Prefer `\eqref{}` for equations (auto-wraps the number in parentheses) - Adopt a consistent label-prefix convention: `sec:`, `fig:`, `tab:`, `eq:`, `lst:` #### 6.3 Bibliography **Superscript numerals (preferred academic style)**: ```latex \usepackage[numbers,super,sort&compress]{natbib} \bibliographystyle{unsrtnat} Prior work\cite{smith2023} shows... % → shows^[1] Several studies\cite{a,b,c} agree... % → agree^[1–3] \bibliography{refs} ``` **Numeric bracket alternative**: ```latex \usepackage[numbers]{natbib} \bibliographystyle{plainnat} \cite{smith2023} % [1] \citep{smith2023} % (Smith, 2023) \citet{smith2023} % Smith (2023) ``` **biblatex pathway**: ```latex \usepackage[backend=biber,style=numeric-comp]{biblatex} \addbibresource{refs.bib} Per~\cite{smith2023}... \printbibliography ``` #### 6.4 External Links ```latex \url{https://example.com} \href{https://example.com}{Visible label} \href{mailto:a@b.com}{a@b.com} ``` #### 6.5 PDF Metadata & Outline ```latex \hypersetup{ pdftitle={Document Title}, pdfauthor={Author Name}, pdfsubject={Topic}, pdfkeywords={keyword1, keyword2} } ``` Bookmark trees are auto-generated from `\section` / `\chapter` hierarchy. #### 6.6 Why Multiple Passes Matter Label resolution requires at least two compilation passes: ```bash # Resolve section / figure / table labels python3 scripts/pdf.py convert.latex main.tex --runs 2 # Also resolves bibliography back-references python3 scripts/pdf.py convert.latex main.tex --runs 3 ``` If `??` placeholders persist after two passes, verify that every `\label` string has an exact `\ref` match. #### 6.7 Navigation Troubleshooting | Observation | Root cause | Resolution | |-------------|-----------|------------| | `??` in place of numbers | Only a single pass was run | Recompile with `--runs 2` | | All links render in black | hyperref colour options omitted | Enable `colorlinks=true` | | TOC items are not clickable | hyperref package missing | Load the package | | `[?]` beside citations | `.bib` path incorrect or biber step skipped | Confirm path; rebuild | | Bookmark pane empty | `bookmarks` option set to false | Switch to `bookmarks=true` | --- ## Package Catalogue ### Foundational - `hyperref` (Rule 3) - `geometry` (Rule 3) - `listings` — `\lstset{basicstyle=\ttfamily\small, numbers=left, backgroundcolor=\color{gray!5}}` - `enumitem` — `\setlist[itemize]{itemsep=0.3em, leftmargin=1.5em}` ### Tabular `booktabs` · `longtable` · `multirow` · `array` · `colortbl` ### Visual & Charting `tikz` · `pgfplots` · `float` · `wrapfig` · `subfig` / `subcaption` ### International & Typography `fontspec` (XeLaTeX / LuaLaTeX) · `ctex` ### Mathematical `amsmath` · `amssymb` · `amsthm` · `natbib` · `biblatex` · `siunitx` ### Algorithmic & Domain-Specific `algorithm` + `algpseudocode` · `chemfig` ### Page Design `tcolorbox` · `fancyhdr` · `titlesec` · `tocloft` · `multicol` · `setspace` · `microtype` · `parskip` · `adjustbox` · `marginnote` ### Code Listings `listings` · `minted` (depends on Pygments) --- ## Scripts & Backends | Script | Purpose | |--------|---------| | `pdf.py convert.latex` | Tectonic wrapper — log sanitisation, error highlighting, PDF metrics | | Engine | Notes | |--------|-------| | Tectonic | Stand-alone LaTeX engine; packages are fetched transparently on demand | --- ## Operational Notes ### CJK Without Manual Font Setup Tectonic resolves CJK font bundles on the fly — zero manual installation: ```latex \usepackage{ctex} % Tectonic pulls the font files automatically ``` ### Cold-Start Latency The very first compilation of a new document triggers package downloads: - Initial build: 1–5 min (depends on network speed) - Repeat builds with warm cache: 10–30 s ### Working Without Internet Previously fetched packages are stored under `~/.cache/Tectonic/`. When offline, only cached packages are available; attempting to use a new one will fail. ### Tectonic vs a Full TeX Live Installation | Dimension | Tectonic | Traditional pdflatex | |-----------|----------|---------------------| | Package acquisition | On-demand, transparent | Manual via `tlmgr` | | Multi-pass compilation | Handled by the engine | Explicit re-invocations required | | Reference resolution | Automatic | Requires bibtex/biber cycles | | Disk footprint | Single binary | Full TeX Live ≈ 4 GB |