LaTeX-Dokumente lokal mit Docker bauen

Die Grundidee ist wie folgt: Statt die LaTeX-Umgebung direkt in das eigene System zu installieren, wird eine Software namens Docker verwendet, die sogenannte “Container” erstellt. Diese Container sind vom eigenen System getrennt und können nach Belieben erstellt und wieder gelöscht werden. In den LaTeX-Containern befindet sich eine komplette LaTeX-Umgebung inklusive aller verfügbaren Plugins. So können zum Beispiel auch LaTeX-Dokumente im Corporate Design der TU Darmstadt schnell und einfach gebaut werden.

Zuerst muss Docker installiert werden. Unter Debian, Ubuntu und verwandten Betriebssystemen funktioniert das wie folgt:

sudo apt install docker.io

Anschließend kann das sogenannte “Image” des LaTeX-Containers heruntergeladen werden. Der folgende Befehl startet einen Download von ca. 1,7 GB:

sudo docker pull registry.gitlab.com/islandoftex/images/texlive:latest

Nun kann man direkt damit starten, ein LaTeX-Dokument zu bauen. Wer seine LaTeX-Dokumente normalerweise mit pdflatex essay.tex baut, kann diesen Befehl benutzen:

sudo docker run -i --rm --name latex -v "$PWD":/usr/src/app:z -w /usr/src/app registry.gitlab.com/islandoftex/images/texlive:latest pdflatex essay.tex

Wie gewöhnlich muss dieser Befehl zwei Mal ausgeführt werden. Etwas schöner geht es mit dem LaTeX-Automatisierungstool arara. Ein einfaches Beispiel ist diese Vorlage der TU Darmstadt, die in eine Datei namens essay.tex gespeichert werden kann. Beachte, dass Du hierfür das Logo der TU Darmstadt herunterladen musst.

% arara: pdflatex
% arara: pdflatex
\documentclass[
	english,
	accentcolor=9c,
	type=intern,
	marginpar=false
	]{tudapub}

\usepackage[english, main=english]{babel}
\usepackage[babel]{csquotes}
\usepackage{mathtools}

\begin{document}


\title{Build LaTeX locally with Docker}
\author{Nico Alt}
%\date{} % Ohne Angabe wird automatisch das heutige Datum eingefügt

\maketitle

\section{Introduction}

To calculate velocity, start like this:

\begin{equation*}
v = \frac{s}{t}
\end{equation*}

\end{document}

Das Dokument lässt sich nun mit folgendem Befehl bauen:

sudo docker run -i --rm --name latex -v "$PWD":/usr/src/app:z -w /usr/src/app registry.gitlab.com/islandoftex/images/texlive:latest arara -v essay.tex

Dieser Befehl muss nur noch einmal ausgeführt werden, da wir arara am Anfang unseres Dokuments angewiesen haben, pdflatex zwei Mal auszuführen. Dies kann ganz einfach erweitert werden, um so zum Beispiel auch BibTeX-Literatur automatisch mitzubauen.

Da es ein bisschen umständlich ist, diese Befehle immer einzutippen, habe ich mir zwei Alias in der Datei ~/.bashrc erstellt:

alias latex-build='sudo docker run -i --rm --name latex -v "$PWD":/usr/src/app:z -w /usr/src/app registry.gitlab.com/islandoftex/images/texlive:latest arara -v essay.tex'
alias latex-watch='latex-build; inotifywait -r -e close_write,moved_to,create -m . | while read -r directory events filename; do latex-build; done'

Nun kann ich mit latex-build Dokumente einmalig bauen und mit latex-watch sogar immer dann, sobald es Änderungen an der .tex-Datei gibt. Für letzteren Befehl muss das Paket inotify-tools installiert sein.

Hinweis: Statt Docker auf dem eigenen Computer zu installieren, kann man auch GitLab CI verwenden, um LaTeX-Dokumente bauen zu lassen. Wie das geht, habe ich im Blog-Post LaTeX-Dokumente mit GitLab CI rendern beschrieben.