Files
latex-docker/README.md
T

320 lines
8.7 KiB
Markdown

# LaTeX Docker Builder
Docker-Image und Build-Umgebung zum plattformunabhängigen, reproduzierbaren Kompilieren von LaTeX-Dokumenten (wie der Seminararbeit oder Masterthesis an der Fachhochschule Burgenland).
- **Git-Repository:** [https://git.djnizz.at/Nizz05/latex-docker.git](https://git.djnizz.at/Nizz05/latex-docker.git)
- **Basis-Image:** `texlive/texlive:latest` (Vollständige TeX Live Distribution inkl. `latexmk`, `biber`, `biblatex`, `koma-script`, `mathpazo`, `tikz` etc.)
---
## Inhaltsverzeichnis
- [Voraussetzungen](#voraussetzungen)
- [Schnellstart](#schnellstart)
- [1. PowerShell (Windows)](#1-powershell-windows)
- [2. Bash / Linux / macOS / WSL](#2-bash--linux--macos--wsl)
- [3. Docker Compose](#3-docker-compose)
- [4. Reines Docker CLI](#4-reines-docker-cli)
- [5. Makefile](#5-makefile)
- [Nutzung durch Mitstudierende (Beliebige Ordnerstrukturen)](#nutzung-durch-mitstudierende-beliebige-ordnerstrukturen)
- [VS Code Integration](#vs-code-integration)
- [Variante A: Mit der Extension "LaTeX Workshop" (Auto-Build bei Speichern)](#variante-a-mit-der-extension-latex-workshop-auto-build-bei-speichern)
- [Variante B: Über VS Code Tasks (Strg + Shift + B)](#variante-b-%C3%BCber-vs-code-tasks-strg--shift--b)
- [Image selbst bauen](#image-selbst-bauen)
- [Git Remote & Image Registry](#git-remote--image-registry)
- [Code ins Git-Repo pushen](#code-ins-git-repo-pushen)
- [Image zur Registry pushen (optional)](#image-zur-registry-pushen-optional)
- [Beispiel für CI/CD (Gitea Actions / Woodpecker)](#beispiel-f%C3%BCr-cicd-gitea-actions--woodpecker)
---
## Voraussetzungen
- [Docker Desktop](https://www.docker.com/products/docker-desktop/) (oder Docker Engine unter Linux) läuft auf Ihrem System.
- Keine lokale TeX-Live- oder MiKTeX-Installation auf dem Host erforderlich!
---
## Schnellstart
### 1. PowerShell (Windows)
Das mitgelieferte Skript `build-seminar.ps1` vereinfacht alle Abläufe:
```powershell
# Seminararbeit kompilieren
.\build-seminar.ps1
# Bereinigen (löscht temporäre Dateien im out/-Ordner)
.\build-seminar.ps1 -Clean
# Kontinuierlicher Watch-Modus (baut bei jeder Dateiänderung neu)
.\build-seminar.ps1 -Watch
# Anderes Dokument kompilieren
.\build-seminar.ps1 -File "meinDokument.tex"
```
### 2. Bash / Linux / macOS / WSL
```bash
# Ausführbar machen
chmod +x build-seminar.sh
# Kompilieren
./build-seminar.sh
# Bereinigen
./build-seminar.sh ../Seminar_Arbeit_BITI_Gruber clean
# Watch-Modus
./build-seminar.sh ../Seminar_Arbeit_BITI_Gruber watch
```
### 3. Docker Compose
```bash
# Bauen
docker compose run --rm builder
# Bereinigen
docker compose run --rm clean
# Watch-Modus
docker compose run --rm watch
```
### 4. Reines Docker CLI
Direkt ohne Hilfsskripte:
```bash
# Windows PowerShell:
docker run --rm -v "${PWD}/../Seminar_Arbeit_BITI_Gruber:/workspace" -w /workspace latex-docker:latest
# Linux / macOS / WSL:
docker run --rm -v "$(pwd)/../Seminar_Arbeit_BITI_Gruber:/workspace" -w /workspace latex-docker:latest
```
Beliebige LaTeX-Befehle übergeben:
```bash
# Bereinigen
docker run --rm -v "${PWD}/../Seminar_Arbeit_BITI_Gruber:/workspace" latex-docker:latest clean
# Spezifischen latexmk-Befehl ausführen
docker run --rm -v "${PWD}/../Seminar_Arbeit_BITI_Gruber:/workspace" latex-docker:latest latexmk -pdf seminararbeit.tex
```
### 5. Makefile
```bash
make image # Image bauen
make build # Seminararbeit kompilieren
make clean # Temporäre Dateien löschen
make watch # Kontinuierlich bauen
make shell # Interaktive Bash-Shell im Container öffnen
```
---
## Nutzung durch Mitstudierende (Beliebige Ordnerstrukturen)
**Ja!** Das Docker-Image ist so konzipiert, dass es für **jede beliebige Ordnerstruktur und Dateinamen** funktioniert:
### Automatische Erkennung
Das Image erkennt automatisch das Hauptdokument im übergebenen Ordner:
1. Typische Dateinamen: `seminararbeit.tex`, `thesis.tex`, `main.tex`, `bachelorarbeit.tex`, `masterarbeit.tex`, `arbeit.tex`, `document.tex`.
2. Findet es keinen dieser Namen, sucht es automatisch nach der Datei, die `\documentclass` enthält.
3. Hat das Projekt eine `.latexmkrc` (z. B. für Ausgabe nach `out/`), wird diese automatisch beachtet. Falls keine vorhanden ist, kompiliert es im Hauptverzeichnis.
### 1-Zeiler für Mitstudierende (ohne dieses Repo clonen zu müssen)
Mitstudierende müssen nur in ihren eigenen Projektordner wechseln und folgenden Befehl ausführen:
**Windows PowerShell:**
```powershell
docker run --rm -v "${PWD}:/workspace" latex-docker:latest
```
**Linux / macOS / WSL:**
```bash
docker run --rm -v "$(pwd):/workspace" latex-docker:latest
```
Falls die Datei einen unüblichen Namen hat (z. B. `mein_projekt.tex`):
```bash
docker run --rm -v "${PWD}:/workspace" latex-docker:latest build mein_projekt.tex
```
### Mit dem Skript für andere Pfade
```powershell
.\build-seminar.ps1 -ProjectPath "C:\Pfad\Zu\Beliebigem\Projekt"
```
---
## VS Code Integration
### Variante A: Mit der Extension "LaTeX Workshop" (Auto-Build bei Speichern)
Wenn Sie oder Ihre Kollegen die beliebte Extension **LaTeX Workshop** (`James-Yu.latex-workshop`) nutzen, kann Docker als Standard-Compiler hinterlegt werden. Bei jedem **`Strg + S`** baut Docker das PDF automatisch und aktualisiert die Vorschau in VS Code.
Fügen Sie dazu in Ihrem LaTeX-Projekt in `.vscode/settings.json` Folgendes ein:
```json
{
"latex-workshop.latex.outDir": "%DIR%/out",
"latex-workshop.latex.tools": [
{
"name": "docker-latexmk",
"command": "docker",
"args": [
"run",
"--rm",
"-v",
"%DIR%:/workspace",
"-w",
"/workspace",
"latex-docker:latest",
"build",
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "Docker LaTeX",
"tools": [
"docker-latexmk"
]
}
],
"latex-workshop.latex.recipe.default": "Docker LaTeX",
"latex-workshop.latex.autoBuild.run": "onSave"
}
```
---
### Variante B: Über VS Code Tasks (`Strg + Shift + B`)
Funktioniert komplett ohne spezielle LaTeX-Erweiterung über die integrierte Task-Funktion von VS Code.
Erstellen Sie im LaTeX-Projekt die Datei `.vscode/tasks.json`:
```json
{
"version": "2.0.0",
"tasks": [
{
"label": "Build LaTeX (Docker)",
"type": "shell",
"command": "docker",
"args": [
"run",
"--rm",
"-v",
"${workspaceFolder}:/workspace",
"-w",
"/workspace",
"latex-docker:latest",
"build"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$latex"]
},
{
"label": "Clean LaTeX (Docker)",
"type": "shell",
"command": "docker",
"args": [
"run",
"--rm",
"-v",
"${workspaceFolder}:/workspace",
"-w",
"/workspace",
"latex-docker:latest",
"clean"
],
"problemMatcher": []
}
]
}
```
- **Bauen:** Tastenkombination `Strg + Shift + B`
- **Bereinigen:** Menü `Terminal` -> `Run Task...` -> `Clean LaTeX (Docker)`
---
## Image selbst bauen
Das Image lokal bauen und mit Tags versehen:
```bash
docker build -t latex-docker:latest -t git.djnizz.at/nizz05/latex-docker:latest .
```
---
## Git Remote & Image Registry
### Code ins Git-Repo pushen
Der Ordner ist bereits mit der Remote-URL `https://git.djnizz.at/Nizz05/latex-docker.git` verknüpft:
```bash
git add .
git commit -m "feat: Initial commit of latex docker builder environment"
git push -u origin main
```
### Image zur Registry pushen (optional)
Falls Ihre Gitea/Forgejo-Instanz die Docker-Container-Registry aktiviert hat:
```bash
docker login git.djnizz.at
docker push git.djnizz.at/nizz05/latex-docker:latest
```
---
## Beispiel für CI/CD (Gitea Actions / Woodpecker)
### Gitea / GitHub Actions (`.gitea/workflows/build.yml`)
```yaml
name: Build Seminararbeit
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
container:
image: texlive/texlive:latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Compile LaTeX
run: |
latexmk -pdf seminararbeit.tex
- name: Upload PDF Artifact
uses: actions/upload-artifact@v4
with:
name: seminararbeit-pdf
path: out/seminararbeit.pdf
```