export PATH := /Library/TeX/texbin:$(PATH) TEMPLATE := templates/sm-template.tex DEFAULTS := templates/sm-defaults.yaml FILENAME_TPL := templates/filename.tpl META_FILE ?= abgaben/metadata.yaml PANDOC := pandoc ABS_TEMPLATE := $(abspath $(TEMPLATE)) ABS_DEFAULTS := $(abspath $(DEFAULTS)) ABS_META := $(abspath $(META_FILE)) ABS_FILENAME_TPL := $(abspath $(FILENAME_TPL)) SOURCES := $(shell find abgaben -name "*.md" 2>/dev/null) .PHONY: all render clean help # -- Alle Abgaben ------------------------------------------------------------- all: @for src in $(SOURCES); do \ $(MAKE) --no-print-directory render FILE=$$src || exit 1; \ done # -- Einzeldatei (VSCode-Task / manuell) -------------------------------------- # PDF-Dateiname wird aus den Metadaten ermittelt: Gruppe0_SM-1b_Vorbereitung.pdf # Aufruf: make render FILE=abgaben/irgendwas.md render: ifndef FILE $(error Bitte FILE angeben: make render FILE=abgaben/datei.md) endif $(eval SRCDIR := $(dir $(abspath $(FILE)))) $(eval OUTNAME := $(shell $(PANDOC) \ --template=$(ABS_FILENAME_TPL) \ --metadata-file=$(ABS_META) \ -t plain "$(FILE)" 2>/dev/null | tr -d '\n\r')) @if [ -z "$(OUTNAME)" ]; then \ echo "FEHLER: PDF-Name konnte nicht aus Metadaten ermittelt werden."; \ echo " Pflichtfelder in Frontmatter: gruppe, aufgabenkennung"; \ exit 1; \ fi @echo "Baue $(FILE) --> $(SRCDIR)$(OUTNAME)..." cd "$(SRCDIR)" && $(PANDOC) "$(notdir $(FILE))" \ --defaults=$(ABS_DEFAULTS) \ --template=$(ABS_TEMPLATE) \ --metadata-file=$(ABS_META) \ -o "$(OUTNAME)" @echo " => $(SRCDIR)$(OUTNAME)" # -- Aufraeumen --------------------------------------------------------------- clean: find abgaben -name "*.pdf" -delete 2>/dev/null; true @echo "PDFs geloescht." # -- Hilfe -------------------------------------------------------------------- help: @echo "Verwendung:" @echo " make Alle Abgaben bauen" @echo " make render FILE=abgaben/.md Einzelne Datei rendern" @echo " make META_FILE=abgaben/x.yaml ... Andere Metadaten-Datei" @echo " make clean Alle PDFs loeschen" @echo "" @echo "PDF-Name aus Metadaten: Gruppe0_SM-1b_Vorbereitung.pdf" @echo "VSCode: Cmd+Shift+B rendert die aktuell geoeffnete Datei."