feat: Initial setup for LaTeX Docker Builder
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
# 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)
|
||||
- [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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
```
|
||||
Reference in New Issue
Block a user