# Makefile für Markdown-eBook-Projekt Rust Handbuch mit Pandoc # (C) 2025 - Adam Skotarczak - 19/06/2025 # === Allgemeine Konfiguration === # === Titel des eBooks === TITLE := Vorlage_eBook # === Verzeichnis mit Markdown-Dateien === MANUSCRIPT := manuscript # === Ausgabeordner für Builds === OUTPUT := build # === Metadaten für das eBook === METADATA := metadata/ebook.yaml # === CSS-Datei für das eBook === CSS := styles/ebook.css # === LaTeX-Vorlage für das eBook === TEX_EBOOK := styles/ebook-template.tex # === LaTeX-Vorlage für den Druck === TEX_PRINT := styles/print-template.tex # === Logo für das eBook === LOGO := media/logo/logo.png # === Pfad zu Hilfswerkzeugen === TOOLPATH := tools # === LaTeX Geometrie-Einstellungen (z.B. A5-Papier) === GEOMETRY := geometry:a5paper # === Schriftart für LaTeX === FONT := Noto Sans CJK SC # === Python Index für make toc === INDEXFILE := INHALT # === Verzeichnistiefe im eBook === TOCDEPTH := 3 # === Automatische Konfiguration === VERSION := $(shell cat VERSION) PYTHON := $(shell command -v python3 || command -v python) # === Nur wsl oder Linux === # ifeq ($(OS),Windows_NT) set_codepage: @if [ "$(OS)" = "Windows_NT" ]; then chcp 65001 >nul; fi $(error [⚠] Windows wird nicht unterstützt. Bitte WSL oder Linux verwenden.) exit(1) endif # === Quelldateien (geordnet nach Nummerierung) === # Standard: prod, falls nicht durch CLI überschrieben MODE ?= prod MD_ALL = $(wildcard $(MANUSCRIPT)/*.md) # Dateien auslassen im MODE prod MD_FILES_prod = $(filter-out \ $(MANUSCRIPT)/00_Deckblatt.md, \ $(MD_ALL)) MD_FILES_dev = $(MD_ALL) # Dynamische Auswahl je nach MODE define set_md_files $(eval MD_FILES := $(MD_FILES_$(MODE))) $(eval MD_SORTED := $(sort $(MD_FILES))) endef # === Standardziel: Setze Codepage und führe alle Builds aus === .DEFAULT_GOAL := all # === Abhängigkeiten prüfen === check-deps: check-python check-fonts .PHONY: check-deps # === Standardziel: Alles bauen === all: clean plain epub pdf html docx toc # === Hier ist geplant make zu missbrauchen, die notwendigen Abhängigkeiten zu installieren === install: @echo "\n⚠ - Noch nicht implementiert!\n" # === EPUB-Ausgabe === epub: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --toc-depth=$(TOCDEEP) \ --css=$(CSS) \ --epub-chapter-level=1 \ --epub-cover-image=$(LOGO) \ -o $(OUTPUT)/$(TITLE).epub # === PDF über LaTeX (Print-Version) === # --highlight-style= #| Stilname | Beschreibung / Anmutung | #| ------------ | --------------------------------------------- | #| `pygments` | Klassischer Stil, angelehnt an Pygments | #| `tango` | Kontrastreich, an das Tango-Theme angelehnt | #| `kate` | Stil des Kate-Editors (KDE) | #| `monochrome` | Schwarzweiß, ohne Farben (druckfreundlich) | #| `espresso` | Dunkler Hintergrund, helles Code-Highlighting | #| `zenburn` | Weicher, augenfreundlicher Dunkelstil | #| `haddock` | Stil von Haddock-Dokumentation | #| `breezedark` | KDE-Breeze-Dark-inspiriert (dunkel, modern) | # === PDF Generierung === pdf: $(OUTPUT) $(call set_md_files) @echo "Verwende MODE=$(MODE)" @echo "Dateien: $(MD_FILES)" @pandoc $(MD_SORTED) \ --columns=1000 \ --metadata-file=$(METADATA) \ --metadata version="$(VERSION)" \ --resource-path=media \ --toc --number-sections --toc-depth=$(TOCDEPTH) \ --template=$(TEX_PRINT) \ --pdf-engine=xelatex \ --highlight-style=tango \ -V toc-depth=$(TOCDEPTH) \ -V $(GEOMETRY) \ -V buildmode=$(MODE) \ -o $(OUTPUT)/$(TITLE).pdf # === HTML-Vorschau oder Export === html: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --number-sections \ --css=$(CSS) \ -o $(OUTPUT)/$(TITLE).html # === Word-Version (Lektorat etc.) === docx: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --toc --number-sections \ -o $(OUTPUT)/$(TITLE).docx plain: $(OUTPUT) $(call set_md_files) pandoc $(MD_SORTED) \ --metadata-file=$(METADATA) \ --resource-path=media \ --wrap=none \ -t plain \ -o $(OUTPUT)/$(TITLE)_reintext.txt # === Vorschau im Terminal (reines Markdown) === preview: cat $(MD_SORTED) | less # === Sicherstellen, dass der Ausgabeordner existiert === $(OUTPUT): @mkdir -p $(OUTPUT) @echo "[i] Verzeichnis $(OUTPUT) erstellt!" # === Python-Check === check-python: @$(PYTHON) --version || (echo "❌ Python nicht gefunden, wsl gestartet?" && exit 1) # === Fonts testen === check-fonts: @fc-match "$(FONT)" >/dev/null || (echo "❌ Schriftart $(FONT) nicht gefunden!" && exit 1) # === Erstellt aus einem vordefinierten Verzeichnis mit Markdown-Dateien einen Inhaltsverzeichnis === toc: @echo "📚 Generiere Inhaltsverzeichnis in .\$(INDEXFILE).md ..." @$(PYTHON) $(TOOLPATH)/tocgen.py -d $(MANUSCRIPT) -o $(INDEXFILE).md @echo "📚 Inhaltsverzeichnis in .\$(INDEXFILE).md erstellt." @echo "✅ Fertig." # === Bereinigen der Ausgaben === clean: @rm -rf $(OUTPUT)/* @echo "🧹 alle Builds unter $(OUTPUT)\ gelöscht." @rm -f $(INDEXFILE).md @echo "🧹 $(INDEXFILE).md gelöscht." clear: clean # === Hilfe === help: @echo "\n⚠ - Noch nicht implementiert!\n" .PHONY: all toc epub check-python pdf html docx preview clean