diff --git a/README.md b/README.md index 4f5e446..4f3c6c5 100644 --- a/README.md +++ b/README.md @@ -1,139 +1,139 @@ -# Brevet Card PDF Generator +# Brevetkarten-PDF-Generator -LaTeX-based generator for Audax Randonneurs Deutschland brevet cards with front and back sides for duplex printing. +LaTeX-basierter Generator für Audax Randonneurs Allemagne Brevetkarten mit Vorder- und Rückseite für den Duplexdruck. -## Quick Start +## Schnellstart ```bash -# Build everything and generate both PDFs +# Alles bauen und beide PDFs erzeugen make build -# The PDFs will be created as: -# - brevetkarte.pdf (front side with participant info) -# - brevetkarte-rueckseite.pdf (back side with control points) +# Die PDFs werden erstellt als: +# - brevetkarte.pdf (Vorderseite mit Teilnehmerinfos) +# - brevetkarte-rueckseite.pdf (Rückseite mit Kontrollen) ``` -## Prerequisites +## Voraussetzungen - Docker - Make -## Usage +## Verwendung -### Build Both PDFs +### Beide PDFs bauen ```bash make build ``` -This will: -1. Build the Docker image with TeXLive -2. Compile `brevetkarte.tex` to `brevetkarte.pdf` (front side) -3. Compile `brevetkarte-rueckseite.tex` to `brevetkarte-rueckseite.pdf` (back side) +Dies führt folgende Schritte aus: +1. Docker-Image mit TeX Live bauen +2. `brevetkarte.tex` zu `brevetkarte.pdf` kompilieren (Vorderseite) +3. `brevetkarte-rueckseite.tex` zu `brevetkarte-rueckseite.pdf` kompilieren (Rückseite) -### Build Individual Sides +### Einzelne Seiten bauen ```bash -# Just build front side +# Nur Vorderseite bauen make build-front -# Just build back side +# Nur Rückseite bauen make build-back -# Build both sides (without rebuilding Docker image) +# Beide Seiten bauen (ohne Docker-Image neu zu bauen) make build-pdf ``` -### Personalized Cards from CSV +### Personalisierte Karten aus CSV ```bash -# 1. Copy the example CSV and fill in participant data +# 1. Beispiel-CSV kopieren und Teilnehmerdaten eintragen cp "Export Brevetkarte.csv.example" "Export Brevetkarte.csv" -# Edit "Export Brevetkarte.csv" with your participants +# "Export Brevetkarte.csv" mit den Teilnehmern befüllen -# 2. Generate and build personalized cards +# 2. Personalisierte Karten erzeugen und bauen make build-personalized -# Output: brevetkarte-personalized.pdf +# Ausgabe: brevetkarte-personalized.pdf ``` -The CSV file `Export Brevetkarte.csv` is not tracked by git (it may contain personal data). The file `Export Brevetkarte.csv.example` shows the expected format. +Die CSV-Datei `Export Brevetkarte.csv` wird nicht von git erfasst (sie kann personenbezogene Daten enthalten). Die Datei `Export Brevetkarte.csv.example` zeigt das erwartete Format. -### Other Commands +### Weitere Befehle ```bash -# Just build the Docker image +# Nur das Docker-Image bauen make build-image -# Open interactive shell in container +# Interaktive Shell im Container öffnen make shell -# Clean generated files (.aux, .log, .pdf) +# Erzeugte Dateien löschen (.aux, .log, .pdf) make clean -# Clean everything including Docker image +# Alles löschen inkl. Docker-Image make clean-all -# Rebuild from scratch +# Von Grund auf neu bauen make rebuild -# Show help +# Hilfe anzeigen make help ``` -## Files +## Dateien -- `brevetkarte.tex` - LaTeX source for the front side (two identical blank cards) -- `brevetkarte-template.tex` - Template for personalized cards (placeholders replaced from CSV) -- `brevetkarte-rueckseite.tex` - LaTeX source for the back side (control points) -- `Export Brevetkarte.csv.example` - Example CSV with participant data format -- `generate_cards.py` - Generates `brevetkarte-personalized.tex` from CSV and template -- `cyclist-logo.png` - Audax Randonneurs logo -- `Dockerfile` - Docker image definition (debian:bookworm-slim + TeX Live packages) -- `Makefile` - Build automation +- `brevetkarte.tex` - LaTeX-Quelle für die Vorderseite (zwei identische Blanko-Karten) +- `brevetkarte-template.tex` - Vorlage für personalisierte Karten (Platzhalter werden aus CSV ersetzt) +- `brevetkarte-rueckseite.tex` - LaTeX-Quelle für die Rückseite (Kontrollen) +- `Export Brevetkarte.csv.example` - Beispiel-CSV mit dem Teilnehmerdatenformat +- `generate_cards.py` - Erzeugt `brevetkarte-personalized.tex` aus CSV und Vorlage +- `cyclist-logo.png` - Audax Randonneurs Logo +- `Dockerfile` - Docker-Image-Definition (debian:bookworm-slim + TeX-Live-Pakete) +- `Makefile` - Build-Automatisierung -## Output +## Ausgabe -### Front Side (brevetkarte.pdf) -Contains two identical brevet cards that can be cut in half. Each card includes: -- Participant information fields (Name, Address, etc.) -- Event details (200km "Auf eine Pommes nach Belgien") -- Randonneur Mondiaux rules -- Homologation section -- Start time: 8:30 +### Vorderseite (brevetkarte.pdf) +Enthält zwei identische Brevetkarten, die in der Mitte geschnitten werden können. Jede Karte enthält: +- Teilnehmerinformationen (Name, Adresse usw.) +- Veranstaltungsdetails (200 km „Auf eine Pommes nach Belgien") +- Randonneur-Mondiaux-Regeln +- Homologationsbereich +- Startzeit: 8:30 -### Back Side (brevetkarte-rueckseite.pdf) -Contains control points table (4 columns × 6 rows): -- **Rows 1-3**: Control points for upper card - - Nr. 1: Start (Km 0 - Unisport, Bonn) - - Nr. 2: Km 57 - Nationalpark-Tor, Heimbach - - Nr. 3: Km 100 - Friterie "Au Petit Creux", Waimes - - Nr. 4: Km 165 - Mahlberg - - Nr. 5: Km 205 - Finish (Unisport, Bonn) -- **Rows 4-6**: Control points for lower card (same as above, but Nr. 5: Km 214) -- Empty columns for stamps/signatures -- Control question for verification +### Rückseite (brevetkarte-rueckseite.pdf) +Enthält die Kontrollentabelle (4 Spalten × 6 Zeilen): +- **Zeilen 1–3**: Kontrollen für die obere Karte + - Nr. 1: Start (Km 0 – Unisport, Bonn) + - Nr. 2: Km 57 – Nationalpark-Tor, Heimbach + - Nr. 3: Km 100 – Friterie „Au Petit Creux", Waimes + - Nr. 4: Km 165 – Mahlberg + - Nr. 5: Km 205 – Ziel (Unisport, Bonn) +- **Zeilen 4–6**: Kontrollen für die untere Karte (wie oben, aber Nr. 5: Km 214) +- Leere Spalten für Stempel/Unterschriften +- Kontrollfrage zur Verifikation -## Duplex Printing +## Duplexdruck -The PDFs are designed for duplex (double-sided) printing: -1. Print `brevetkarte.pdf` on one side -2. Print `brevetkarte-rueckseite.pdf` on the reverse side -3. The columns and rows are aligned so that: - - Front side columns match back side columns - - Upper card (rows 1-3) aligns with front side upper card - - Lower card (rows 4-6) aligns with front side lower card -4. Cut the sheet in half horizontally to create two separate brevet cards +Die PDFs sind für den Duplexdruck (beidseitiger Druck) ausgelegt: +1. `brevetkarte.pdf` auf einer Seite drucken +2. `brevetkarte-rueckseite.pdf` auf der Rückseite drucken +3. Spalten und Zeilen sind so ausgerichtet, dass: + - Vorderseitenspalten mit Rückseitenspalten übereinstimmen + - Obere Karte (Zeilen 1–3) mit der oberen Vorderseitenkarte fluchtet + - Untere Karte (Zeilen 4–6) mit der unteren Vorderseitenkarte fluchtet +4. Blatt horizontal in der Mitte schneiden, um zwei separate Brevetkarten zu erhalten -## Customization +## Anpassung -Edit `brevetkarte.tex` to modify front side: -- Event name, date, and location -- Distance (200km) -- Start time -- Club information -- Brevet number format +`brevetkarte.tex` bearbeiten für die Vorderseite: +- Veranstaltungsname, Datum und Ort +- Distanz (200 km) +- Startzeit +- Vereinsinformationen +- Brevetformat -Edit `brevetkarte-rueckseite.tex` to modify back side: -- Control point locations -- Control times (von/bis) -- Distances -- Control questions +`brevetkarte-rueckseite.tex` bearbeiten für die Rückseite: +- Kontrollpunkte +- Kontrollzeiten (von/bis) +- Distanzen +- Kontrollfragen