TOC: Titel/Untertitel unlisted, 'Über den Kurs' als Teil 0 vor Vorwort
- Titel und Untertitel im Vorwort von {-} auf {.unlisted .unnumbered}
umgestellt: verschwinden aus dem Inhaltsverzeichnis, bleiben sichtbar
- '# Über den Kurs {-}' als neue Oberüberschrift vor dem Vorwort
eingefügt — gruppiert im TOC als 'Teil 0' den gesamten Front Matter
- TOC_MARKE auf '# Über den Kurs {-}' gesetzt, damit \tableofcontents
davor eingefügt wird
- verschiebe_toc_vor_vorwort(): Anker auf <h1 id="über-den-kurs">
umgestellt (Pandoc behält das ü in der ID)
- pruefe_titeltexte(): ohne_marke() generalisiert von {-} auf beliebige
Attributblöcke {…}, sonst schlägt --check bei .unlisted .unnumbered fehl
This commit is contained in:
parent
0d76c1a89d
commit
1070baad7a
7 changed files with 23 additions and 18 deletions
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
Binary file not shown.
8
OR_HTML_04/gesamtdokument.html
generated
8
OR_HTML_04/gesamtdokument.html
generated
|
|
@ -375,8 +375,8 @@
|
|||
<figcaption>Titelseite — Optimierte Entscheidungsfindung mit Python · Dieter Schlüter</figcaption>
|
||||
</figure>
|
||||
<hr />
|
||||
<h1 class="unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
||||
<h2 class="unnumbered" id="von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</h2>
|
||||
<h1 class="unlisted unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
||||
<h2 class="unlisted unnumbered" id="von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</h2>
|
||||
<p><strong>Ein praxisorientiertes Kompendium für Entscheider</strong> mit Constraint Programming, Vektor- und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.</p>
|
||||
<p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p>
|
||||
<p>Autor / Herausgeber: Dieter Schlüter</p>
|
||||
|
|
@ -385,9 +385,8 @@
|
|||
<hr />
|
||||
<nav id="TOC" role="doc-toc">
|
||||
<ul>
|
||||
<li><a href="#optimierte-entscheidungsfindung-mit-python" id="toc-optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</a>
|
||||
<li><a href="#über-den-kurs" id="toc-über-den-kurs">Über den Kurs</a>
|
||||
<ul>
|
||||
<li><a href="#von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte" id="toc-von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</a></li>
|
||||
<li><a href="#vorwort" id="toc-vorwort">Vorwort</a></li>
|
||||
<li><a href="#ziel-der-masterclass" id="toc-ziel-der-masterclass">Ziel der Masterclass</a>
|
||||
<ul>
|
||||
|
|
@ -1363,6 +1362,7 @@
|
|||
</ul></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1>
|
||||
<h2 class="unnumbered" id="vorwort">Vorwort</h2>
|
||||
<p>Dieses Buch hat ein einziges Ziel: <strong>Sie sollen am Ende in der Lage sein, ein reales Entscheidungsproblem aus Ihrem eigenen Umfeld in ein mathematisches Modell zu übersetzen, es in Python zu lösen und das Ergebnis jemandem zu erklären, der kein Mathematiker ist.</strong></p>
|
||||
<p>Dieses Kompendium versteht sich als <strong>Arbeitsbuch</strong>. Das zeigt sich an drei Stellen:</p>
|
||||
|
|
|
|||
5
OR_HTML_04/vorwort.html
generated
5
OR_HTML_04/vorwort.html
generated
|
|
@ -104,14 +104,15 @@
|
|||
<figcaption>Titelseite — Optimierte Entscheidungsfindung mit Python · Dieter Schlüter</figcaption>
|
||||
</figure>
|
||||
<hr />
|
||||
<h1 class="unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
||||
<h2 class="unnumbered" id="von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</h2>
|
||||
<h1 class="unlisted unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
||||
<h2 class="unlisted unnumbered" id="von-der-mathematischen-modellierung-zu-praktischen-intelligenten-lösungen-für-betrieb-technik-und-finanzmärkte">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</h2>
|
||||
<p><strong>Ein praxisorientiertes Kompendium für Entscheider</strong> mit Constraint Programming, Vektor- und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.</p>
|
||||
<p>Mit Python planen, optimieren und entscheiden: von <strong>Personal, Schichten und Logistik</strong> über <strong>Energie, Ressourcen und Netzwerke</strong> bis zur <strong>Portfoliooptimierung an den Finanzmärkten</strong>.</p>
|
||||
<p>Autor / Herausgeber: Dieter Schlüter</p>
|
||||
<p><dieter(dot)schlueter(atsign)linix(dot)de></p>
|
||||
<p>Stand: 9. September 2026</p>
|
||||
<hr />
|
||||
<h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1>
|
||||
<h2 class="unnumbered" id="vorwort">Vorwort</h2>
|
||||
<p>Dieses Buch hat ein einziges Ziel: <strong>Sie sollen am Ende in der Lage sein, ein reales Entscheidungsproblem aus Ihrem eigenen Umfeld in ein mathematisches Modell zu übersetzen, es in Python zu lösen und das Ergebnis jemandem zu erklären, der kein Mathematiker ist.</strong></p>
|
||||
<p>Dieses Kompendium versteht sich als <strong>Arbeitsbuch</strong>. Das zeigt sich an drei Stellen:</p>
|
||||
|
|
|
|||
6
Operations_Research_mit_Python_Version_04.md
generated
6
Operations_Research_mit_Python_Version_04.md
generated
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
---
|
||||
|
||||
# Optimierte Entscheidungsfindung mit Python {-}
|
||||
# Optimierte Entscheidungsfindung mit Python {.unlisted .unnumbered}
|
||||
|
||||
## Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte {-}
|
||||
## Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte {.unlisted .unnumbered}
|
||||
|
||||
**Ein praxisorientiertes Kompendium für Entscheider** mit Constraint Programming, Vektor- und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.
|
||||
|
||||
|
|
@ -36,6 +36,8 @@ Stand: 9. September 2026
|
|||
\clearpage
|
||||
```
|
||||
|
||||
# Über den Kurs {-}
|
||||
|
||||
## Vorwort {-}
|
||||
|
||||
Dieses Buch hat ein einziges Ziel: **Sie sollen am Ende in der Lage sein, ein reales Entscheidungsproblem aus Ihrem eigenen Umfeld in ein mathematisches Modell zu übersetzen, es in Python zu lösen und das Ergebnis jemandem zu erklären, der kein Mathematiker ist.**
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
---
|
||||
|
||||
# Optimierte Entscheidungsfindung mit Python {-}
|
||||
# Optimierte Entscheidungsfindung mit Python {.unlisted .unnumbered}
|
||||
|
||||
## Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte {-}
|
||||
## Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte {.unlisted .unnumbered}
|
||||
|
||||
**Ein praxisorientiertes Kompendium für Entscheider** mit Constraint Programming, Vektor-
|
||||
und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.
|
||||
|
|
@ -31,6 +31,8 @@ Stand: {datum}
|
|||
|
||||
---
|
||||
|
||||
# Über den Kurs {-}
|
||||
|
||||
## Vorwort {-}
|
||||
|
||||
Dieses Buch hat ein einziges Ziel: **Sie sollen am Ende in der Lage sein, ein reales
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ KEINE_KAPITELDATEIEN: set[str] = {
|
|||
|
||||
# Das Inhaltsverzeichnis wird unmittelbar vor dieser Ueberschrift eingefuegt -
|
||||
# also direkt nach dem Titelblock, noch vor dem Vorwort.
|
||||
TOC_MARKE = "## Vorwort {-}"
|
||||
TOC_MARKE = "# Über den Kurs {-}"
|
||||
|
||||
# Basis-Defaults fuer den PDF-Bau (Schriften, Geometrie, Praeambel). Bevorzugt
|
||||
# wird die Kopie IM Repository: Nur so kann ein frischer Klon ein PDF bauen -
|
||||
|
|
@ -469,10 +469,10 @@ def pruefe_titeltexte() -> list[str]:
|
|||
zeilen = f.read().split("\n")
|
||||
|
||||
# Gesucht werden die '#'- und '##'-Ueberschrift und die beiden Absaetze
|
||||
# danach. Der '{-}'-Zusatz (Pandoc: nicht nummerieren) gehoert nicht zum
|
||||
# Text.
|
||||
# danach. Ein Attributblock wie '{-}' oder '{.unlisted .unnumbered}' (Pandoc:
|
||||
# nicht nummerieren / nicht ins Inhaltsverzeichnis) gehoert nicht zum Text.
|
||||
def ohne_marke(text: str) -> str:
|
||||
return re.sub(r"\s*\{-\}\s*$", "", text)
|
||||
return re.sub(r"\s*\{[^}]*\}\s*$", "", text)
|
||||
|
||||
gefunden: dict[str, tuple[int, str]] = {}
|
||||
absaetze: list[tuple[int, str]] = []
|
||||
|
|
@ -1542,14 +1542,14 @@ def verschiebe_toc_vor_vorwort(pfad: str) -> None:
|
|||
html = f.read()
|
||||
|
||||
nav_match = re.search(r'<nav id="TOC"[^>]*>.*?</nav>\n?', html, re.DOTALL)
|
||||
vorwort_anker = '<h2 class="unnumbered" id="vorwort">'
|
||||
if not nav_match or vorwort_anker not in html:
|
||||
print("WARNUNG: TOC oder Vorwort-Anker nicht gefunden - Verschiebung uebersprungen.")
|
||||
kurs_anker = '<h1 class="unnumbered" id="über-den-kurs">'
|
||||
if not nav_match or kurs_anker not in html:
|
||||
print("WARNUNG: TOC oder 'Über den Kurs'-Anker nicht gefunden - Verschiebung uebersprungen.")
|
||||
return
|
||||
|
||||
nav_block = nav_match.group(0)
|
||||
ohne_nav = html[:nav_match.start()] + html[nav_match.end():]
|
||||
einfuege_pos = ohne_nav.index(vorwort_anker)
|
||||
einfuege_pos = ohne_nav.index(kurs_anker)
|
||||
neu = ohne_nav[:einfuege_pos] + nav_block + ohne_nav[einfuege_pos:]
|
||||
|
||||
with open(pfad, "w", encoding="utf-8") as f:
|
||||
|
|
|
|||
Loading…
Reference in a new issue