NEUER_TITEL.md zu den Quellen, Kritik-Verzeichnis ganz heraus

Der erste Anlauf schloss Kritik_und_Verbesserungsvorschlaege/ mit einer
Gegenausnahme aus, weil NEUER_TITEL.md darin lag und der Bau ohne diese Datei
abbricht:

    Kritik_und_Verbesserungsvorschlaege/*
    !Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md

Das funktionierte, war aber die schlechtere Loesung: Eine Bauquelle blieb in
einem Verzeichnis liegen, das aus dem Repository verschwinden soll. Jetzt
steht sie als Operations_Research_mit_Python_Version_04/NEUER_TITEL.md bei den
uebrigen Quellen, und .gitignore braucht nur noch eine Zeile.

Eine Stelle im Build musste mit: pruefe_dateien() meldet jede .md im
Quellverzeichnis, die weder in DATEIEN steht noch mit README beginnt, als
"nicht eingebundene Datei". Die bis dahin leere Menge KEINE_KAPITELDATEIEN
fuehrt jetzt NEUER_TITEL.md - eine Quelle, aber keine Kapiteldatei.

Der Nachweis, dass der Umzug nichts veraendert hat, brauchte einen Umweg: Die
Pruefsumme von titelseite.svg aenderte sich - aber nur, weil das Fussband das
Tagesdatum traegt und inzwischen der 9. September war. Mit dem Datum des
Vortags erzeugt, ist die Datei byte-identisch zum committeten Stand
(1b076697...). Dass der Text unveraendert ist, zeigt schon der
Strukturvergleich: 721 Glyphenverweise und 81 Pfaddefinitionen in beiden
Fassungen.

Gegengeprueft mit einem simulierten Klon (git checkout-index in ein leeres
Verzeichnis): Das Kritik-Verzeichnis fehlt dort vollstaendig, NEUER_TITEL.md
liegt im Quellverzeichnis, und --check liefert dieselben Zahlen wie lokal.

Was das NICHT leistet: Die fuenf Dateien verschwinden aus kuenftigen Klons,
nicht aus der Historie. Wer einen alten Commit auscheckt, bekommt sie
weiterhin.

Veroeffentlicht: 5 Dateien uebertragen, PDF unveraendert 781 Seiten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dschlueter 2026-09-09 00:31:16 +02:00
commit 509ce021da
17 changed files with 116 additions and 105 deletions

View file

@ -0,0 +1,8 @@
# Optimierte Entscheidungsfindung mit Python
### Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte
**Ein praxisorientiertes Kompendium für Entscheider mit Constraint Programming, Vektor- und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.**
**Personaleinsatz-, Schicht- und Vertretungspläne, Fahrtrouten, Logistik und Maschinen- und Netzwerkauslastung** über **Energieverteilung und Ressourcenplanung** bis zur **Portfoliooptimierung und besseren Entscheidungen an den Finanzmärkten** mit Python modellieren, optimieren und belegbar fundierte Entscheidungen treffen.

View file

@ -157,4 +157,4 @@ Details zu den Lernpfaden stehen in [`00_Vorwort_und_Lesehilfe.md`](00_Vorwort_u
---
*Autor / Herausgeber: Dieter Schlüter · Stand: 8. September 2026*
*Autor / Herausgeber: Dieter Schlüter · Stand: 9. September 2026*

View file

@ -158,7 +158,12 @@ DATEIEN = [
# Zurzeit keine: Plan und Fortschritt liegen als PLAN.md/PROGRESS.md im
# Repo-Wurzelverzeichnis, nicht hier. README-Dateien faengt pruefe_dateien()
# ueber das Namenspraefix ab.
KEINE_KAPITELDATEIEN: set[str] = set()
# Quellen im Kapitelverzeichnis, die KEINE Kapiteldatei sind und deshalb nicht
# in DATEIEN gehoeren. Ohne diesen Eintrag meldete pruefe_dateien() sie als
# "nicht eingebundene .md-Datei".
KEINE_KAPITELDATEIEN: set[str] = {
"NEUER_TITEL.md", # Quelle des Titeltexts, gelesen von titeltexte_04.py
}
# Das Inhaltsverzeichnis wird unmittelbar vor dieser Ueberschrift eingefuegt -
# also direkt nach dem Titelblock, noch vor dem Vorwort.

View file

@ -3,7 +3,7 @@
# titeltexte_04.py
#
# Liest den Titeltext des Buchs aus seiner EINEN Quelle:
# Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md
# Operations_Research_mit_Python_Version_04/NEUER_TITEL.md
#
# Warum es dieses Modul gibt: Der Titeltext stand viermal im Repository - in
# NEUER_TITEL.md, in den Konstanten von bilder_04/erzeuge_titelseite.py (PDF),
@ -23,8 +23,7 @@ import re
HIER = os.path.dirname(os.path.abspath(__file__))
BASIS = os.path.dirname(HIER)
TITEL_QUELLE = os.path.join(BASIS, "Kritik_und_Verbesserungsvorschlaege",
"NEUER_TITEL.md")
TITEL_QUELLE = os.path.join(HIER, "NEUER_TITEL.md")
def _saeubern(text: str) -> str: