Files
Peter Adam ca995a1c1f Add duplex PDF build targets with pdftk page interleaving
- Add pdftk-java to Docker image for PDF page manipulation
- Extend generate_backside() to repeat back content num_pages times so
  front and back PDFs have matching page counts for pdftk shuffle
- Add build-duplex and build-blanko-duplex Makefile targets that combine
  front and back PDFs with alternating pages (front1, back1, front2, back2)
- Document duplex targets in README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 16:16:20 +02:00

126 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Brevetkarten-PDF-Generator
LaTeX-basierter Generator für Audax Randonneurs Allemagne Brevetkarten mit Vorder- und Rückseite für den Duplexdruck.
## Voraussetzungen
- Docker
- Make
## Konfigurationsdateien
Vor dem ersten Build zwei Dateien aus den Beispielen anlegen und befüllen:
```bash
cp export_brevetcard.csv.example export_brevetcard.csv
cp event.yml.example event.yml
```
Beide Dateien sind in `.gitignore` eingetragen und werden nicht ins Repository übernommen.
### event.yml
Enthält alle veranstaltungsspezifischen Daten:
```yaml
event:
title: "Name der Veranstaltung"
km: "200"
date: "1. Januar 2025"
start_location: "Stadt, Ort"
club: "Clubname"
club_nr: "000000"
startzeit: "8:00"
backside:
"1_1": |
\vspace{2mm}
\textbf{Nr. 1:} Km 0 -- Startort\\
...
"1_2": "" # leer = Stempelfeld
...
```
Die `backside`-Sektion belegt die 12 Zellen der Rückseite (3 Zeilen × 4 Spalten, Schlüssel `"Zeile_Spalte"`). Der Inhalt ist freies LaTeX. Leere Zellen (`""`) dienen als Stempelfelder.
### Export Brevetkarte.csv
Teilnehmerdaten im Format:
```
Startnr, Nachname, Vorname, Straße, PLZ, Ort, Land, Medaille
```
Siehe `export_brevetcard.csv.example` für das vollständige Format.
## Verwendung
### Personalisierte Karten erzeugen und bauen
```bash
make build-personalized
```
Führt folgende Schritte aus:
1. `generate_cards.py` liest `Export Brevetkarte.csv` + `event.yml`
2. Erzeugt `brevetkarte-personalized.tex` (Vorderseite, eine Karte pro Teilnehmer)
3. Erzeugt `brevetkarte-rueckseite.tex` (Rückseite mit Kontrollpunkten aus event.yml)
4. Kompiliert beide .tex-Dateien zu PDFs
### Duplex-PDF erzeugen
```bash
make build-duplex # personalisierte Karten
make build-blanko-duplex # Blanko-Karten
```
Erzeugt ein einzelnes PDF mit abwechselnden Vorder- und Rückseiten für den direkten Duplexdruck: Seite 1 Vorderseite, Seite 2 Rückseite, Seite 3 nächste Vorderseite, usw. Erfordert kein manuelles Zusammenführen zweier Dateien.
### Blanko-Karten erzeugen und bauen
```bash
make build-blanko
```
Erzeugt Blanko-Karten ohne Teilnehmerdaten — keine `export_brevetcard.csv` erforderlich. Sinnvoll für Nachmeldungen oder als Reservekarten vor Ort. Die Veranstaltungsdaten aus `event.yml` werden übernommen, die Teilnehmerfelder bleiben leer.
Ausgabe: `brevetkarte-blanko.pdf` (Vorderseite) + `brevetkarte-rueckseite.pdf` (Rückseite)
### Einzelne Schritte
```bash
# Nur tex-Dateien generieren (ohne Docker)
make generate
# Nur Rückseite kompilieren (nach generate)
make build-back
```
### Weitere Befehle
```bash
make build-image # Docker-Image bauen
make shell # Interaktive Shell im Container
make clean # Erzeugte Dateien löschen (.aux, .log, .pdf)
make clean-all # Alles löschen inkl. Docker-Image
make help # Alle Befehle anzeigen
```
## Dateien
| Datei | Beschreibung |
|---|---|
| `event.yml.example` | Vorlage für Veranstaltungsdaten (→ als `event.yml` kopieren) |
| `export_brevetcard.csv.example` | Vorlage für Teilnehmerdaten (→ als `export_brevetcard.csv` kopieren) |
| `brevetkarte-template.tex` | Vorlage Vorderseite (Platzhalter aus CSV + event.yml) |
| `brevetkarte-rueckseite-template.tex` | Vorlage Rückseite (Zellplatzhalter aus event.yml) |
| `generate_cards.py` | Generiert .tex-Dateien aus Templates + Konfiguration |
| `cyclist-logo.png` | Audax Randonneurs Logo |
| `Dockerfile` | Docker-Image-Definition (debian:bookworm-slim + TeX Live) |
| `Makefile` | Build-Automatisierung |
## Duplexdruck
1. `brevetkarte-personalized.pdf` auf einer Seite drucken
2. `brevetkarte-rueckseite.pdf` auf der Rückseite drucken
3. Blatt horizontal in der Mitte schneiden → zwei separate Brevetkarten