# Markdown → IHK Chemnitz PDF Converter Converts Markdown files into compliant project documentation for **IHK Chemnitz** IT vocational exams (Verordnung 2020). --- ## IHK Formatting Requirements All rules below are enforced automatically. Deviating from them can lead to grade deductions (*"kann zu Punktabzug bei der Bewertung führen"*). | Rule | Value | Note | |---|---|---| | Font | Helvetica / Arial, black | PDF-safe equivalent | | Body size | 12 pt | | | Heading size | 14 pt, bold | | | Caption / footnote size | 10 pt | | | Line spacing | 1½ lines (6.35 mm) | | | Alignment | Justified (Blocksatz) | | | Left margin | 3.0 cm | | | **Right margin** | **4.0 cm** | **Korrekturrand** — examiners write feedback here | | Top margin | 2.0 cm | | | Bottom margin | 2.5 cm | | | Paper | DIN A4, single-sided | | | Front-matter numbering | Roman, starting at **II** | Title page is unnumbered | | Body numbering | Arabic, starting at **1** | Centered at the bottom | ## Document Structure The tool produces all required sections in the mandatory IHK order: ``` 1. Title page · no page number 2. Table of contents · Roman II 3. List of abbrev. · Roman (optional, from YAML) 4. Foreword / body · Roman → Arabic via Markdown headings 5. Bibliography · Arabic (auto-sorted A–Z) 6. List of tables · Arabic (auto-generated) 7. List of figures · Arabic (auto-generated) 8. Appendix · Arabic (via @Anhang: directives) 9. Glossary · Arabic (optional, from YAML) 10. Declaration · no page number (pre-written legal text) ``` ## Installation Requires [Go](https://golang.org/) 1.22 or newer. ```bash git clone cd MarkdownToIHKChemnits go mod tidy ``` ## Usage ```bash go run . -i report.md -o projektarbeit.pdf ``` | Flag | Default | Description | |---|---|---| | `-i` | `report.md` | Input Markdown file | | `-o` | `projektarbeit.pdf` | Output PDF file | ## YAML Front Matter Every Markdown file starts with a YAML block that drives the title page, abbreviation list, and glossary: ```yaml --- student: name: "Max Mustermann" profession: "Fachinformatiker Fachrichtung Anwendungsentwicklung" company: "Musterfirma GmbH" supervisor: "Sabine Supervisor" project: title: "Title of the project" period: "Summer 2026" # Optional — generates Abkürzungsverzeichnis abbreviations: - abbr: "API" meaning: "Application Programming Interface" - abbr: "DIN" meaning: "Deutsches Institut für Normung" # Optional — generates Glossar glossary: - term: "Goldmark" definition: "A CommonMark-compliant Markdown parser written in Go." --- ``` ## Markdown Directives Special directives inside paragraphs control bibliography, appendix, and diagrams: ```markdown # Vorwort This section uses Roman page numbers. # 1. Problem Statement Any numbered or unknown heading switches to Arabic numbering. # Inline formatting **Bold** and *italic* text are preserved in the PDF output. # Bibliography entries @Quelle: Author, Title, Publisher, Year > Quelle: Alternative blockquote syntax also works # Appendix images @Anhang: Description | /path/to/image.png # UML diagram as appendix (rendered via Kroki) @AnhangUML: Sequence Diagram Title ` ``puml @startuml A -> B: request @enduml ` `` # Inline diagrams (rendered via Kroki, embedded in body) ` ``mermaid graph TD A --> B ` `` ``` Diagrams are rendered via [Kroki.io](https://kroki.io) and cached locally using the SHA-256 hash of the diagram source as the cache key. ## Project Structure ``` MarkdownToIHKChemnits/ │ ├── main.go Entry point; two-pass rendering pipeline ├── config.go Config struct (student, project, abbreviations, glossary) │ ├── markdown_parser.go Goldmark AST walker; inline span extraction; directives ├── diagram.go Kroki.io integration (Mermaid, PlantUML, …) │ ├── pdf_renderer.go IHKRenderer struct; DIN 5008 constants; core helpers ├── pdf_numbering.go NumberingType enum; toRoman() ├── pdf_toc.go Table of contents; list of tables; list of figures ├── pdf_pages.go Title, declaration, bibliography, appendix, abbrev., glossary └── pdf_content.go Headings, paragraphs, tables, images, list items ``` ## License MIT