Peter Adam b0e1dde22f Add CSV-based personalized card generation
Add template-based system for generating personalized brevet cards
from CSV data. Uses proper separation of concerns with template file
and Python script.

- Add brevetkarte-template.tex with placeholders
- Add generate_cards.py to read CSV and populate template
- Update Makefile with generate-personalized and build-personalized targets
- Update .gitignore to exclude generated files

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 14:47:56 +01:00

Brevet Card PDF Generator

LaTeX-based generator for Audax Randonneurs Deutschland brevet cards with front and back sides for duplex printing.

Quick Start

# Build everything and generate both PDFs
make build

# The PDFs will be created as:
# - brevetkarte.pdf (front side with participant info)
# - brevetkarte-rueckseite.pdf (back side with control points)

Prerequisites

  • Docker
  • Make

Usage

Build Both PDFs

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)

Build Individual Sides

# Just build front side
make build-front

# Just build back side
make build-back

# Build both sides (without rebuilding Docker image)
make build-pdf

Other Commands

# Just build the Docker image
make build-image

# Open interactive shell in container
make shell

# Clean generated files (.aux, .log, .pdf)
make clean

# Clean everything including Docker image
make clean-all

# Rebuild from scratch
make rebuild

# Show help
make help

Files

  • brevetkarte.tex - LaTeX source for the front side (participant info)
  • brevetkarte-rueckseite.tex - LaTeX source for the back side (control points)
  • cyclist-logo.png - Audax Randonneurs logo (extracted from original)
  • Dockerfile - Docker image definition with TeXLive
  • Makefile - Build automation
  • Brevet200km_2025_09_20_Namensseite_blanko.pdf - Original front side template
  • Brevet200km_2025_09_20_Kontrollseite.pdf - Original back side template

Output

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

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

Duplex Printing

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

Customization

Edit brevetkarte.tex to modify front side:

  • Event name, date, and location
  • Distance (200km)
  • Start time
  • Club information
  • Brevet number format

Edit brevetkarte-rueckseite.tex to modify back side:

  • Control point locations
  • Control times (von/bis)
  • Distances
  • Control questions
Description
No description provided
Readme 512 KiB
Languages
TeX 41.3%
Python 37.1%
Makefile 19.9%
Dockerfile 1.7%