Getting Started#
From clone to a built document and the docs site.
1) Prerequisites#
nerdctl(or docker: the scripts takeCONTAINER_RUNTIME=docker)BuildKit running for local image builds:
systemctl --user status buildkit.serviceGit with submodule support
Optional:
makefor shortcut targets
2) Clone the Repository#
git clone --branch develop --recurse-submodules https://github.com/Kataglyphis/DocumANTation.git
cd DocumANTation
Cloned without submodules:
git submodule update --init --recursive
3) Build the Container Image#
nerdctl build . -t pandoc_all
The pandoc_all image (Dockerfile)
carries everything the PDF pipeline needs; the host never installs TeX:
Ubuntu 26.04 with the full TeX Live distribution and LuaLaTeX
Pandoc (pinned via the
PANDOC_VERSIONbuild arg)ImageMagick, Ghostscript, and a
uv-managedmd2pdfvirtualenvthe
awesome-beamerandsmileLaTeX themes baked intotexmf
The build pulls
texlive-full, so the first build is large and slow. Check out the beamer/smile submodules first (step 2): the image copies them in.
4) Build the Documentation Site#
This site builds on the host with Sphinx, not in the pandoc_all container:
uv run --extra docs sphinx-build -W -b html docs docs/_build/html
The HTML lands in docs/_build/html/. The published site is
kataglyphis.github.io/DocumANTation: docs.yml
builds it on every push and deploys it from develop.
5) Build a Document Target#
Every output lands in data/out/.
Book#
./scripts/build_in_container.sh book
Presentation#
./scripts/build_in_container.sh beamer # PDF slides
./scripts/build_in_container.sh pptx # PowerPoint deck, same sources
./scripts/build_in_container.sh demo # the slide primitives showcase
beamer and pptx build data/presentation/; demo builds data/presentation/demo/ as a deck
of its own (why a separate target).
Starter document#
./scripts/build_in_container.sh example
Writes data/out/example_output.pdf from data/example/chapters/ in one Pandoc call, with no
bibliography, glossary or nomenclature pass. Replace its Markdown with your own to start a
project.
CV#
./scripts/build_in_container.sh cv # English
CV_LANG=german ./scripts/build_in_container.sh cv # German
CV_PROFILE=parallel-ai ./scripts/build_in_container.sh letter # data/cv/letters/<CV_PROFILE>.tex
The CV lands as CV_Jonas_Heinle_<language>.pdf. CV_PROFILE selects a tailored section set
from data/cv/profiles/, and letter typesets that profile’s cover letter
(data/cv/letters/<CV_PROFILE>.tex) in the same class; data/cv/README.md in the repository has
both.
With make installed:
make book
make beamer
make demo
make example
make pptx
make cv
make cv CV_LANG=german
make cv-all # both published CV variants
6) Enable Strict Warning Checks#
STRICT_WARNINGS=1 ./scripts/build_in_container.sh book
STRICT_WARNINGS=1 ./scripts/build_in_container.sh cv
What fails the build: Build Pipeline § Strict Warning Checks.
7) Live Demo Mode#
The PDF rebuilds on every source change:
make watch-beamer # rebuilds on every .md change
make watch-book # same for the book
It watches with entr; pair it with a PDF viewer that reloads by itself (zathura, evince, or
skim on macOS). watch-cv, watch-demo and watch-example exist too (WATCH_TARGETS in the
Makefile); the CV one watches the .tex sources in data/cv/.
Running the Container Manually#
build_in_container.sh and make wrap a plain nerdctl run. To debug or run a one-off
command, mount md2pdfLib/ and data/ yourself:
nerdctl run --rm --entrypoint "" \
-v "$(pwd)/md2pdfLib:/md2pdfLib" \
-v "$(pwd)/data:/data" \
pandoc_all sh -c '. md2pdf/bin/activate && uv run python /md2pdfLib/build.py beamer'
--entrypoint ""is optional. The image has had noENTRYPOINTsince 2026-05-22 (23734a7), only aCMDthat opens an interactive shell, so a command after the image name replaces thatCMDwith or without the flag (measured 2026-09-25). The wrapper scripts still pass it; it is harmless.
An interactive shell in the container:
nerdctl run --rm -it \
-v "$(pwd)/md2pdfLib:/md2pdfLib" \
-v "$(pwd)/data:/data" \
pandoc_all
Next Steps#
Repository structure and shared components: Overview
TeX and Pandoc compilation stages: Build Pipeline
Rules and quick commands for agents/contributors: AGENTS.md