diff --git a/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf b/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf index 9556d9b..2c790ae 100644 Binary files a/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf and b/OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf differ diff --git a/OR_HTML_04/gesamtdokument.html b/OR_HTML_04/gesamtdokument.html index 2eef4d7..86e4cd8 100644 --- a/OR_HTML_04/gesamtdokument.html +++ b/OR_HTML_04/gesamtdokument.html @@ -1588,7 +1588,7 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.
🎯 Merksatz Die eine Aussage, die vom Abschnitt hängen bleiben soll.
-📝 Übungsaufgaben Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. Alle Lösungen stehen in
+90_Anhang_Loesungen.md.📝 Übungsaufgaben Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. Alle Lösungen stehen in Anhang A.
✅ Selbsttest Fünf Fragen mit Kurzantworten zur schnellen Selbstkontrolle.
@@ -2078,8 +2078,6 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.Zweitens: Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl. Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.
Und drittens: Nehmen Sie die Übungen ernst. Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.
-Weiter mit:
-01_Notation_und_Abkuerzungen.md— oder direkt zu Kapitel 1, wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht.
Notation und Abkürzungen
Dieses Kapitel ist zum Nachschlagen gedacht, nicht zum Durchlesen. Schlagen Sie hier nach, sobald Ihnen ein Symbol oder ein Kürzel begegnet, das Sie nicht sicher zuordnen können.
diff --git a/OR_HTML_04/vorwort.html b/OR_HTML_04/vorwort.html index 626913e..5c277a2 100644 --- a/OR_HTML_04/vorwort.html +++ b/OR_HTML_04/vorwort.html @@ -337,7 +337,7 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.🎯 Merksatz Die eine Aussage, die vom Abschnitt hängen bleiben soll.
-📝 Übungsaufgaben Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. Alle Lösungen stehen in
+90_Anhang_Loesungen.md.📝 Übungsaufgaben Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. Alle Lösungen stehen in Anhang A.
✅ Selbsttest Fünf Fragen mit Kurzantworten zur schnellen Selbstkontrolle.
@@ -826,8 +826,6 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.Die wirksamste Art, mit diesem Buch zu arbeiten, ist unbequem: Lesen Sie die Problemstellung, schließen Sie das Buch und versuchen Sie, das Modell selbst aufzuschreiben — Variablen, Zielfunktion, Nebenbedingungen. Vergleichen Sie erst dann. Die Abweichungen zwischen Ihrem Entwurf und dem Text sind genau die Stellen, an denen Sie etwas lernen. Wer stattdessen mitliest und nickt, hat am Ende des Kapitels das angenehme Gefühl, es verstanden zu haben — und steht beim eigenen Problem vor einem leeren Blatt.
Zweitens: Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl. Was passiert mit dem Vertretungsplan, wenn eine Lehrkraft ausfällt? Was mit dem Portfolio, wenn die Obergrenze von 20 % auf 10 % sinkt? Diese Experimente kosten Sekunden und bauen genau die Intuition auf, die man später beim Modellieren braucht.
Und drittens: Nehmen Sie die Übungen ernst. Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird.
-
-Weiter mit:
diff --git a/Operations_Research_mit_Python_Version_04.md b/Operations_Research_mit_Python_Version_04.md index eb060d0..e570326 100644 --- a/Operations_Research_mit_Python_Version_04.md +++ b/Operations_Research_mit_Python_Version_04.md @@ -260,7 +260,7 @@ Jedes Kapitel folgt derselben Struktur. Wenn Sie wissen, wie die Bausteine funkt > **🎯 Merksatz** Die eine Aussage, die vom Abschnitt hängen bleiben soll. -> **📝 Übungsaufgaben** Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. **Alle Lösungen** stehen in **`90_Anhang_Loesungen.md`**. +> **📝 Übungsaufgaben** Am Kapitelende, gestaffelt nach Schwierigkeit: ⭐ Verständnis (im Kopf oder in zwei Sätzen) · ⭐⭐ Handrechnung oder kleine Modelländerung · ⭐⭐⭐ Eigenständige Programmieraufgabe. **Alle Lösungen** stehen in [Anhang A](#anhang-loesungen). > **✅ Selbsttest** Fünf Fragen mit Kurzantworten zur schnellen Selbstkontrolle. @@ -469,10 +469,6 @@ Zweitens: **Lassen Sie jedes Programm laufen und verändern Sie danach eine Zahl Und drittens: **Nehmen Sie die Übungen ernst.** Sie sind nicht Beiwerk, sondern der Ort, an dem aus Kenntnis Können wird. ---- - -*Weiter mit:* **`01_Notation_und_Abkuerzungen.md`** — oder direkt zu **[Kapitel 1](#kap-einfuehrung)**, wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht. - --- diff --git a/Operations_Research_mit_Python_Version_04.pdf b/Operations_Research_mit_Python_Version_04.pdf index 9556d9b..2c790ae 100644 Binary files a/Operations_Research_mit_Python_Version_04.pdf and b/Operations_Research_mit_Python_Version_04.pdf differ diff --git a/Operations_Research_mit_Python_Version_04/00_Vorwort_und_Lesehilfe.md b/Operations_Research_mit_Python_Version_04/00_Vorwort_und_Lesehilfe.md index 9c48c90..5450dec 100644 --- a/Operations_Research_mit_Python_Version_04/00_Vorwort_und_Lesehilfe.md +++ b/Operations_Research_mit_Python_Version_04/00_Vorwort_und_Lesehilfe.md @@ -318,7 +318,7 @@ können Sie gezielt springen. > ⭐ Verständnis (im Kopf oder in zwei Sätzen) · > ⭐⭐ Handrechnung oder kleine Modelländerung · > ⭐⭐⭐ Eigenständige Programmieraufgabe. -> **Alle Lösungen** stehen in [`90_Anhang_Loesungen.md`](90_Anhang_Loesungen.md). +> **Alle Lösungen** stehen in {ref:anhang:loesungen}. > **✅ Selbsttest** > Fünf Fragen mit Kurzantworten zur schnellen Selbstkontrolle. @@ -644,6 +644,4 @@ dem aus Kenntnis Können wird. --- -*Weiter mit:* [`01_Notation_und_Abkuerzungen.md`](01_Notation_und_Abkuerzungen.md) — -oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation -lieber nachschlagen, sobald sie auftaucht. +*Weiter mit:* [dem Verzeichnis Notation und Abkürzungen](01_Notation_und_Abkuerzungen.md) — oder direkt zu [{ref:kap:einfuehrung}](10_Einfuehrung_OR.md), wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht. diff --git a/Operations_Research_mit_Python_Version_04/build_version_04.py b/Operations_Research_mit_Python_Version_04/build_version_04.py index d8eacd9..260bdaf 100644 --- a/Operations_Research_mit_Python_Version_04/build_version_04.py +++ b/Operations_Research_mit_Python_Version_04/build_version_04.py @@ -395,6 +395,19 @@ def pruefe_dateien() -> list[str]: f"folgt aber '{soll}' - die Lesekette ueberspringt eine Datei.") fehlend.append(name) + # Die Navigationszeile muss in EINER Zeile bleiben: weiter_re und + # entferne_navigation() lesen nur bis zum Zeilenende. Ein umgebrochener + # Verweis bleibt sonst als Absatz in PDF und Website stehen - so geschah + # es im Vorwort (drei Zeilen, die Zeile leckte ins gedruckte Buch). + for name in DATEIEN: + with open(os.path.join(HIER, name), encoding="utf-8") as f: + for nr, zeile in enumerate(f, 1): + if zeile.startswith("*Weiter mit:") and \ + not re.search(r"\]\(\S+?\.md\)", zeile): + print(f"FEHLER: {name}:{nr} - '*Weiter mit:' ist umgebrochen; " + f"das Linkziel (.md) muss in derselben Zeile stehen.") + fehlend.append(name) + # Marken fuer interaktive Figuren: Zeigt eine ins Leere, verschwindet sie # auf der Website stillschweigend - im PDF steht dann ein Verweis auf eine # Figur, die es nicht gibt. @@ -548,8 +561,15 @@ def entferne_navigation(text: str) -> str: """ Entfernt die 'Weiter mit:'-Navigationszeilen am Dateiende - im Gesamtdokument sind sie ueberfluessig und die Links zeigen ins Leere. + + Ein umgebrochener Navigationsabsatz (Fortsetzungszeilen bis zur naechsten + Leerzeile) wird mitgenommen. Ohne diese Toleranz blieb eine dreizeilige + "Weiter mit"-Zeile im PDF stehen und renderte auf der Website den + geschachtelten {ref:}-Link als Rohtext - passiert im Vorwort. """ - text = re.sub(r"\n---\n+\*(Weiter mit|Zurueck zum|Zurück zum)[^\n]*\n*$", "\n", text) + text = re.sub( + r"\n---\n+\*(Weiter mit|Zurueck zum|Zurück zum)[^\n]*" + r"(?:\n(?!\n)[^\n]*)*\n*$", "\n", text) return text.rstrip() + "\n" diff --git a/PROGRESS.md b/PROGRESS.md index 33f8662..f5b3f02 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -2631,6 +2631,30 @@ Der neue Lauf meldet **null fehlende Zeichen**; taucht die Warnung wieder auf, k New Roman ein Zeichen, das der Filter noch nicht umschaltet. Symbola ist damit eingebettet, der Buchumfang bleibt bei 792 Seiten; alle HTML-Seiten sind byteidentisch geblieben. +### „Weiter mit“ im Vorwort — ein Umbau, der die Navigationszeile ins Buch leckte ✅ + +Eine Überarbeitung des Vorworts (Zeilenumbrüche, Verweise) machte die „Weiter mit“-Zeile +dreizeilig. `entferne_navigation()` liest nur bis zum Zeilenende — die Zeile blieb stehen: +Im PDF stand sie als Absatz mit Dateinamen, auf der Vorwortseite zusätzlich mit dem +Rohlink `[Kapitel 1](einfuehrung.html#kap-einfuehrung)`. Ursache der Rohform: Im +Mehraseiten-Bau löst sich `{ref:}` zu einem **kompletten Markdown-Link** auf; steht es +innerhalb eines weiteren Links, rendert die Schachtelung als Rohtext. Im Gesamtdokument +funktioniert dieselbe Konstruktion scheinbar — dort täuscht sie. + +Behoben und bewacht: + +* Die Navigationszeile ist wieder einzeilig; die Linktexte nennen kein Dateinamen mehr + („Anhang A“ über `{ref:anhang:loesungen}`, das Notationsverzeichnis über einen + sprechenden Text — es hat als Rahmenkapitel kein `{#kap:}`-Label). +* **Konvention dazu:** `{ref:}` gehört nie in einen Markdown-Link hinein — im Fließtext + als Text, in „Weiter mit“-Zeilen nur, weil diese entfernt werden. +* `entferne_navigation()` nimmt Fortsetzungszeilen bis zur nächsten Leerzeile mit; + `--check` bricht ab, wenn ein `*Weiter mit:` das Linkziel (.md) nicht in derselben + Zeile trägt. + +Gegenprobe: PDF ohne „Weiter mit“-Absatz, Vorwortseite ohne Rohtext, 792 Seiten, +kein fehlendes Zeichen im LaTeX-Protokoll. + --- ## 8. Commit-Historie des V04-Strangs01_Notation_und_Abkuerzungen.md— oder direkt zu [Kapitel 1](einfuehrung.html#kap-einfuehrung), wenn Sie die Notation lieber nachschlagen, sobald sie auftaucht.