# template_first-skyfritt-example.tex Pandoc template for generating PDFs via XeLaTeX. Produces a document with a title page, table of contents, Roboto font, A4 format, 2.5 cm margins, and page numbering. --- ## Requirements - [Pandoc](https://pandoc.org) - A TeX Live installation with XeLaTeX - Homebrew (for installing fontconfig) - Roboto and Roboto Mono fonts --- ## macOS Installation ### 1. Install Homebrew (if not already installed) ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` ### 2. Install Pandoc ```bash brew install pandoc ``` ### 3. Install MacTeX / TeX Live Download and install [MacTeX](https://tug.org/mactex/) from `https://tug.org/mactex/`, or install the lighter BasicTeX: ```bash brew install --cask basictex ``` After installation, open a new terminal session so that `/Library/TeX/texbin` is on your PATH. ### 4. Update tlmgr and install LaTeX packages ```bash sudo tlmgr update --self sudo tlmgr install \ titlesec \ tocloft \ booktabs \ tools \ fancyhdr \ parskip \ float \ listings \ fancyvrb \ caption \ hyperref \ xcolor \ fontspec \ geometry \ babel ``` ### 5. Install fontconfig `fc-list` and `fc-cache` are needed for font verification and are not included on macOS by default: ```bash brew install fontconfig ``` ### 6. Install fonts Download Roboto and Roboto Mono from Google Fonts and install them into `~/Library/Fonts/`: ```bash curl -L "https://fonts.google.com/download?family=Roboto" -o roboto.zip && \ curl -L "https://fonts.google.com/download?family=Roboto+Mono" -o roboto-mono.zip && \ unzip roboto.zip -d ~/roboto && \ unzip roboto-mono.zip -d ~/roboto-mono && \ cp ~/roboto/static/*.ttf ~/Library/Fonts/ && \ cp ~/roboto-mono/static/*.ttf ~/Library/Fonts/ && \ fc-cache -f -v ``` Clean up: ```bash rm -rf roboto.zip roboto-mono.zip ~/roboto ~/roboto-mono ``` ### 7. Verify fonts are available to XeLaTeX ```bash fc-list | grep -i roboto ``` You should see several lines listing the Roboto and Roboto Mono font files. If nothing appears, double-check that the `.ttf` files are present in `~/Library/Fonts/`. ### 8. Verify LaTeX packages are installed ```bash kpsewhich titlesec.sty tocloft.sty fancyhdr.sty caption.sty ``` Each line should return a file path. If any are blank, install the missing package individually: ```bash sudo tlmgr install ``` --- ## Usage Add a YAML front matter block to the top of your Markdown file: ```yaml --- title: "My Document" subtitle: "An optional subtitle" author: "Jane Doe" date: "March 2026" description: "An optional blurb shown at the bottom of the title page." --- ``` Then compile with: ```bash pandoc input.md -o output.pdf \ --pdf-engine=xelatex \ --template=template_first-skyfritt-example.tex \ --shift-heading-level-by=-1 ``` ### Why `--shift-heading-level-by=-1`? Pandoc's `article` class maps `#` → `\section`, `##` → `\subsection`, and so on. If your Markdown has a single `# Document Title` at the top followed by `## 1. Introduction`, `## 2. …`, etc., the title ends up as "Section 1" in the TOC and all real sections become subsections 1.1, 1.2, … Passing `--shift-heading-level-by=-1` shifts every heading up one level before rendering: | Markdown | Without flag | With flag | |----------|-------------|-----------| | `#` | `\section` (appears in TOC) | promotes to document title — invisible in body | | `##` | `\subsection` | `\section` | | `###` | `\subsubsection` | `\subsection` | The `#` heading is absorbed as the top-level title and removed from the body, so your real sections (`##`) become proper `\section` entries. ### Section numbering By default the template **suppresses LaTeX auto-numbering** (`secnumdepth = 0`), because headings written as `## 1. Introduction` already carry their own numbers. Letting LaTeX add its own would produce double-numbering like `1 1. Introduction`. If you prefer LaTeX to number sections automatically (and write headings without embedded numbers, e.g. `## Introduction`), pass `--number-sections`: ```bash pandoc input.md -o output.pdf \ --pdf-engine=xelatex \ --template=template_first-skyfritt-example.tex \ --shift-heading-level-by=-1 \ --number-sections ``` You can also control the depth of numbering with the `secnumdepth` metadata variable: ```yaml --- title: "My Document" secnumdepth: 2 # number sections and subsections only --- ``` --- ## Fonts used | Role | Font | Source | |------------|--------------|-------------------------------------------------| | Main text | Roboto | https://fonts.google.com/specimen/Roboto | | Monospace | Roboto Mono | https://fonts.google.com/specimen/Roboto+Mono | Both fonts are open source and licensed under the Apache License 2.0. --- ## Troubleshooting **`xelatex: createProcess: find_executable: failed`** XeLaTeX is not installed or not on your PATH. Install MacTeX or BasicTeX and open a new terminal session. **`The font "Roboto" cannot be found`** The font is not installed. Follow step 6 above. **`File 'titlesec.sty' not found`** A required LaTeX package is missing. Run the `tlmgr install` command in step 4. **`No counter 'none' defined`** A known pandoc + longtable bug. The template includes a fix for this — make sure you are using the latest version of `template_first-skyfritt-example.tex`. **`fc-list: command not found`** fontconfig is not installed. Run `brew install fontconfig`.