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

3.7 KiB
Raw Permalink Blame History

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:

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:

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

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

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

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

# Nur tex-Dateien generieren (ohne Docker)
make generate

# Nur Rückseite kompilieren (nach generate)
make build-back

Weitere Befehle

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