% or_pdf_header.tex % Gemeinsame LaTeX-Zusatzpraeambel fuer den PDF-Bau der Arbeitskopie UND % der Version 02. Einbindung per pandoc --include-in-header . % --- SVG-Grafiken auf die Textbreite begrenzen ----------------------------- % Pandoc setzt \setkeys{Gin}{width=\maxwidth,...}, damit zu breite Bilder % automatisch verkleinert werden. Das wirkt aber nur auf \includegraphics. % SVG-Bilder bindet pandoc als \includesvg{...} OHNE Breitenangabe ein; das % Paket svg rendert sie dann in ihrer natuerlichen Groesse - und alles, was % breiter als der Textblock ist, laeuft ueber den rechten Rand hinaus. % % Der folgende Wrapper stellt das pandoc-Verhalten fuer \includesvg her: % Bilder werden auf \linewidth verkleinert, wenn sie breiter sind, und % ansonsten unveraendert gesetzt (also nie kuenstlich vergroessert). % % \LetLtxMacro statt \let ist noetig, weil \includesvg ein optionales % Argument hat; ein einfaches \let wuerde zu einer Endlosrekursion fuehren. % % Die Abfrage auf \includesvg ist wichtig: Pandoc laedt das Paket svg nur % dann, wenn das Dokument ueberhaupt SVG-Bilder enthaelt. Ohne die Abfrage % scheitert der Lauf bei Dokumenten ohne SVG mit "Undefined control sequence". \usepackage{letltxmacro} \makeatletter \@ifundefined{includesvg}{}{% \LetLtxMacro\origincludesvg\includesvg \renewcommand*{\includesvg}[2][]{% \begingroup \sbox0{\origincludesvg[#1]{#2}}% \ifdim\wd0>\linewidth \resizebox{\linewidth}{!}{\usebox0}% \else \usebox0 \fi \endgroup}% } \makeatother % --- Lange Codezeilen umbrechen statt ueber den Rand laufen lassen ---------- % fvextra erweitert die von pandoc verwendete fancyvrb-Umgebung um % Zeilenumbruch. Ohne das werden Zeilen jenseits der Textbreite abgeschnitten. \usepackage{fvextra} \fvset{ breaklines=true, % lange Zeilen umbrechen breakanywhere=true, % notfalls auch mitten im Wort (lange Strings) breaksymbolleft={\tiny\ensuremath{\hookrightarrow}}, % Fortsetzungszeichen fontsize=\small, } % Auch fuer die von pandoc erzeugte Highlighting-Umgebung wirksam machen % (das sind die Bloecke mit Sprachangabe, z. B. ```python). \DefineVerbatimEnvironment{Highlighting}{Verbatim}{ commandchars=\\\{\}, breaklines=true, breakanywhere=true, breaksymbolleft={\tiny\ensuremath{\hookrightarrow}}, fontsize=\small } % Bloecke OHNE Sprachangabe (```) erzeugt pandoc als klassisches verbatim. % Das kennt keinen Zeilenumbruch und laeuft daher ebenfalls ueber den Rand - % betroffen sind hier vor allem die abgedruckten Programmausgaben. % \RecustomVerbatimEnvironment baut verbatim auf fancyvrbs Verbatim um. \RecustomVerbatimEnvironment{verbatim}{Verbatim}{ breaklines=true, breakanywhere=true, breaksymbolleft={\tiny\ensuremath{\hookrightarrow}}, fontsize=\small } % --- Tabellen etwas kompakter, damit breite Tabellen besser passen --------- \usepackage{array} \renewcommand{\arraystretch}{1.08} % --- Umbruchverhalten fuer lange URLs und Bezeichner ----------------------- % Lange Bezeichner wie Kap_05_MILP_Portfolio_Fixgebuehren.py setzt pandoc als % \texttt{...}. LaTeX trennt darin nicht und laesst solche Namen ueber den % rechten Rand laufen, wenn sie ans Zeilenende geraten. Ein \allowbreak nach % jedem Unterstrich erlaubt einen Umbruch an genau diesen Stellen. % Bewusst OHNE Trennstrich: Ein Bindestrich waere hier irrefuehrend, weil er % wie ein Bestandteil des Dateinamens aussaehe. \let\origtextunderscore\_ \renewcommand{\_}{\origtextunderscore\allowbreak} \sloppy % lieber grosszuegigere Wortabstaende als Ueberhang \emergencystretch=3em % --- Stichwortregister (Phase 4) -------------------------------------------- % Begriffe werden im Markdown mit {idx:Begriff} bzw. fuer Unterbegriffe mit % {idx:Oberbegriff!Unterbegriff} markiert (siehe resolve_index() in % build_version_03.py) und dort zu einem rohen `\index{...}`{=latex}-Block % aufgeloest. Fuer HTML wird dieser Rohblock von Pandoc automatisch verworfen % (kein Seitenzahlen-Konzept dort) - kein Sonderfall im Buildskript notwendig. % Sortierung uebernimmt texindy (xindy mit German-Modul) statt makeindex, % damit Umlaute korrekt einsortiert werden (ä nach a, ö nach o, ü nach u), % ohne dass Autor:innen von Hand ASCII-Sortierschluessel angeben muessen. \usepackage{makeidx} \makeindex % --- Modernes Layout: Ueberschriften, Kopfzeile, Umbruch (Phase 5) ---------- % Farben aus der Titelseiten-Palette (bilder/titelseite.svg), damit das PDF % und das Deckblatt als ein zusammenhaengendes System wirken. \usepackage{xcolor} \definecolor{ORindigo}{HTML}{4338CA} \definecolor{ORcyan}{HTML}{0891B2} \definecolor{ORviolett}{HTML}{7C3AED} \definecolor{ORslate}{HTML}{1A1A2E} % --- Witwen-/Waisenstrafen (e-TeX) --- % Schusterjungen (erste Zeile eines Absatzes allein am Seitenende) und % Hurenkinder (letzte Zeile allein am Seitenanfang) weitgehend unterdruecken. % \widows=1/\orphans=1 waeren zusaetzlich, sind aber in der article-Klasse % nicht definiert (KOMA/widows-Paket-Syntax) - \widowpenalty/\clubpenalty % reichen als Strafen. \widowpenalty=10000 \clubpenalty=10000 % --- titlesec: modernere Ueberschriften + keine Waisenueberschriften --- % Option nobottomtitles: rutscht eine Ueberschrift ans Seitenende, ohne dass % noch ausreichend Folgeplatz (Default: ~2\baselineskip) bleibt, wird sie auf % die naechste Seite geschoben. explicit: ermoeglicht #1 (Titeltext) im after- % code, um \sectionmark fuer die Kopfzeile manuell zu setzen (noetig, weil % Pandoc \section* verwendet, das \rightmark nicht automatisch befuellt). \usepackage[explicit,nobottomtitles]{titlesec} \titleformat{\section}[block] {\Large\bfseries\color{ORindigo}} {}{0pt} {#1} [\vspace{2pt}{\color{ORviolett}\titlerule[1.2pt]}\vspace{2pt}\sectionmark{#1}] \titleformat{\subsection}[block] {\large\bfseries\color{ORcyan}} {}{0pt} {#1}[\subsectionmark{#1}] \titleformat{\subsubsection}[block] {\normalsize\bfseries\color{ORslate}} {}{0pt} {#1} \titlespacing*{\section}{0pt}{2.5ex plus 1ex minus .2ex}{1.2ex plus .2ex} \titlespacing*{\subsection}{0pt}{2ex plus .8ex}{1ex plus .2ex} \titlespacing*{\subsubsection}{0pt}{1.5ex plus .6ex}{0.8ex plus .1ex} % --- Sicherungsnetz: needspace fuer den Fall, dass nobottomtitles greift --- % titlesec hat \section bereits umdefiniert; \preto haengt \needspace vorne an, % wirkt also auf \section und \section* gleichermaessen. 3\baselineskip % garantiert mindestens 3 Folgezeilen unter der Ueberschrift. \usepackage{needspace} \usepackage{etoolbox} \preto\section{\needspace{3\baselineskip}} \preto\subsection{\needspace{2.5\baselineskip}} \preto\subsubsection{\needspace{2\baselineskip}} % --- Kopf-/Fusszeile (fancyhdr) --- % article ist einseitig (oneside) -> es gibt nur L/R, kein Innen/Aussen. % \rightmark = aktueller Abschnittstitel (article: \sectionmark -> \markright). % Wir setzen \sectionmark explizit via titlesec-after-code, weil \section* den % Mark nicht selbst befuellt. \nouppercase laesst Gross-/Kleinschreibung intakt. \usepackage{fancyhdr} % Kopfzeile braucht ~22pt Hoehe (fancyhdr warnt sonst); topmargin anpassen, % damit der Textkörper nicht nach unten wandert. \setlength{\headheight}{22pt} \addtolength{\topmargin}{-10pt} \pagestyle{fancy} \fancyhf{} \fancyhead[L]{\small\nouppercase{\rightmark}} \fancyhead[R]{\small\thepage} \fancyfoot{} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\headrule}{% \hbox to\headwidth{\color{ORviolett}\leaders\hrule height\headrulewidth\hfill}} % plain = erste Seite eines (mit \clearpage begonnenen) Kapitels: nur Seitenzahl. \fancypagestyle{plain}{% \fancyhf{}\fancyfoot[C]{\small\thepage}\renewcommand{\headrulewidth}{0pt}} % --- Titelseite (Seite 1, reines Bild) bekommt keine Kopfzeile --- % Ohne diese Zeile erbt Seite 1 den globalen fancy-Stil (Trennlinie + % Seitenzahl oben rechts), was auf dem Deckblatt fehl am Platz ist. \AtBeginDocument{\thispagestyle{plain}}