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>
|
<figcaption>Titelseite — Optimierte Entscheidungsfindung mit Python · Dieter Schlüter</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
<hr />
|
<hr />
|
||||||
<h1 class="unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
<h1 class="unlisted 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>
|
<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><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>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>Autor / Herausgeber: Dieter Schlüter</p>
|
||||||
|
|
@ -385,9 +385,8 @@
|
||||||
<hr />
|
<hr />
|
||||||
<nav id="TOC" role="doc-toc">
|
<nav id="TOC" role="doc-toc">
|
||||||
<ul>
|
<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>
|
<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="#vorwort" id="toc-vorwort">Vorwort</a></li>
|
||||||
<li><a href="#ziel-der-masterclass" id="toc-ziel-der-masterclass">Ziel der Masterclass</a>
|
<li><a href="#ziel-der-masterclass" id="toc-ziel-der-masterclass">Ziel der Masterclass</a>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -1363,6 +1362,7 @@
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
<h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1>
|
||||||
<h2 class="unnumbered" id="vorwort">Vorwort</h2>
|
<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 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>
|
<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>
|
<figcaption>Titelseite — Optimierte Entscheidungsfindung mit Python · Dieter Schlüter</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
<hr />
|
<hr />
|
||||||
<h1 class="unnumbered" id="optimierte-entscheidungsfindung-mit-python">Optimierte Entscheidungsfindung mit Python</h1>
|
<h1 class="unlisted 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>
|
<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><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>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>Autor / Herausgeber: Dieter Schlüter</p>
|
||||||
<p><dieter(dot)schlueter(atsign)linix(dot)de></p>
|
<p><dieter(dot)schlueter(atsign)linix(dot)de></p>
|
||||||
<p>Stand: 9. September 2026</p>
|
<p>Stand: 9. September 2026</p>
|
||||||
<hr />
|
<hr />
|
||||||
|
<h1 class="unnumbered" id="über-den-kurs">Über den Kurs</h1>
|
||||||
<h2 class="unnumbered" id="vorwort">Vorwort</h2>
|
<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 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>
|
<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.
|
**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
|
\clearpage
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Über den Kurs {-}
|
||||||
|
|
||||||
## Vorwort {-}
|
## 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.**
|
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-
|
**Ein praxisorientiertes Kompendium für Entscheider** mit Constraint Programming, Vektor-
|
||||||
und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.
|
und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.
|
||||||
|
|
@ -31,6 +31,8 @@ Stand: {datum}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# Über den Kurs {-}
|
||||||
|
|
||||||
## Vorwort {-}
|
## Vorwort {-}
|
||||||
|
|
||||||
Dieses Buch hat ein einziges Ziel: **Sie sollen am Ende in der Lage sein, ein reales
|
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 -
|
# Das Inhaltsverzeichnis wird unmittelbar vor dieser Ueberschrift eingefuegt -
|
||||||
# also direkt nach dem Titelblock, noch vor dem Vorwort.
|
# 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
|
# Basis-Defaults fuer den PDF-Bau (Schriften, Geometrie, Praeambel). Bevorzugt
|
||||||
# wird die Kopie IM Repository: Nur so kann ein frischer Klon ein PDF bauen -
|
# 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")
|
zeilen = f.read().split("\n")
|
||||||
|
|
||||||
# Gesucht werden die '#'- und '##'-Ueberschrift und die beiden Absaetze
|
# Gesucht werden die '#'- und '##'-Ueberschrift und die beiden Absaetze
|
||||||
# danach. Der '{-}'-Zusatz (Pandoc: nicht nummerieren) gehoert nicht zum
|
# danach. Ein Attributblock wie '{-}' oder '{.unlisted .unnumbered}' (Pandoc:
|
||||||
# Text.
|
# nicht nummerieren / nicht ins Inhaltsverzeichnis) gehoert nicht zum Text.
|
||||||
def ohne_marke(text: str) -> str:
|
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]] = {}
|
gefunden: dict[str, tuple[int, str]] = {}
|
||||||
absaetze: list[tuple[int, str]] = []
|
absaetze: list[tuple[int, str]] = []
|
||||||
|
|
@ -1542,14 +1542,14 @@ def verschiebe_toc_vor_vorwort(pfad: str) -> None:
|
||||||
html = f.read()
|
html = f.read()
|
||||||
|
|
||||||
nav_match = re.search(r'<nav id="TOC"[^>]*>.*?</nav>\n?', html, re.DOTALL)
|
nav_match = re.search(r'<nav id="TOC"[^>]*>.*?</nav>\n?', html, re.DOTALL)
|
||||||
vorwort_anker = '<h2 class="unnumbered" id="vorwort">'
|
kurs_anker = '<h1 class="unnumbered" id="über-den-kurs">'
|
||||||
if not nav_match or vorwort_anker not in html:
|
if not nav_match or kurs_anker not in html:
|
||||||
print("WARNUNG: TOC oder Vorwort-Anker nicht gefunden - Verschiebung uebersprungen.")
|
print("WARNUNG: TOC oder 'Über den Kurs'-Anker nicht gefunden - Verschiebung uebersprungen.")
|
||||||
return
|
return
|
||||||
|
|
||||||
nav_block = nav_match.group(0)
|
nav_block = nav_match.group(0)
|
||||||
ohne_nav = html[:nav_match.start()] + html[nav_match.end():]
|
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:]
|
neu = ohne_nav[:einfuege_pos] + nav_block + ohne_nav[einfuege_pos:]
|
||||||
|
|
||||||
with open(pfad, "w", encoding="utf-8") as f:
|
with open(pfad, "w", encoding="utf-8") as f:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue