Titeltext: eine Quelle fuer PDF-Titelseite und Startseite

Die Startseite zeigte einen anderen Titeltext als das PDF. Der Text stand
VIERMAL im Repository: NEUER_TITEL.md, die Konstanten in
bilder_04/erzeuge_titelseite.py, der Titelblock des Vorworts - und noch einmal
fest einprogrammiert im Hero-Block von baue_landingpage().

Die Ursache ist messbar: Die drei Commits, die den Titel ueberarbeitet haben
(ca5621f, 199dd3b, 1659fb9 im Ursprungs-Repository), fassten jedes Mal
dieselben drei Dateien an. build_version_04.py war in keinem davon, und
OR_HTML_04/index.html taucht in ihren Dateilisten gar nicht auf. Online stand
deshalb:

  Unterzeile  "Von den mathematischen Grundlagen zur quantitativen
              Portfolio-Optimierung an den Finanzmaerkten."
  Kompendium  "Ein vollstaendiges Kompendium mit Algorithmen ..."
  Anwendungen fehlte ganz

Behandlung wie bei den neun Nummern-Funden zuvor: nicht die Kopie korrigieren,
sondern die Kopie abschaffen. Das neue titeltexte_04.py zerlegt NEUER_TITEL.md
in Titel, Untertitel, Kompendium- und Anwendungen-Absatz; PDF-Titelseite und
Startseite lesen dieselbe Funktion. Der Autor bleibt bewusst Konstante im
Generator - die Vorlage beschreibt das Buch, nicht sein Impressum.

Der entscheidende Beleg: Die neu erzeugte titelseite.svg ist BYTE-IDENTISCH
(97fb40d7...) zur vorherigen - der Umbau hat am PDF nachweislich nichts
veraendert. Auch nicht am Umbruch: Die frueher handgesetzten drei Zeilen
entstehen jetzt automatisch aus _umbrechen(), und zwar exakt so. Ein
Textvergleich ueber das SVG war uebrigens nicht moeglich - es enthaelt kein
einziges <text>-Element, matplotlib zeichnet alle 726 Buchstaben als Kurven.

Das Vorwort bleibt von Hand gepflegter Buchtext, wird aber von
pruefe_titeltexte() bei jedem --check gegen die Quelle gestellt. Gleich beim
ersten Lauf fand es einen echten Unterschied: Das Vorwort setzte einen
Geviertstrich, die Vorlage einen Halbgeviertstrich. Im Deutschen ist der
Halbgeviertstrich der richtige - das Vorwort folgt jetzt der Quelle.

Veroeffentlicht: 5 Dateien uebertragen, alle vierzehn HTTP-Proben richtig.
Gegenprobe vom Server: alle drei Absaetze der Startseite sind zeichengenau
identisch mit NEUER_TITEL.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dschlueter 2026-09-08 19:39:49 +02:00
commit 022bd4eaca
15 changed files with 250 additions and 37 deletions

View file

@ -28,8 +28,18 @@ Aufruf:
"""
import os
import sys
from datetime import datetime
# Der Titeltext kommt aus NEUER_TITEL.md, gelesen von titeltexte_04.py. Das
# Modul liegt im Quellverzeichnis des Buchs, dieses Skript in bilder_04/ -
# daher der Pfadeintrag. Ein zweiter Parser hier waere genau die Dopplung,
# die dieses Modul beseitigt.
_BASIS = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(_BASIS,
"Operations_Research_mit_Python_Version_04"))
from titeltexte_04 import lies_titeltexte
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
@ -192,26 +202,25 @@ def _setze_block(ax, zeilen, x, y0, groesse, durchschuss, **stil) -> float:
# Absaetze KOMPENDIUM und ANWENDUNGEN
# stehen gemeinsam in der grossen Solver-Karte.
#
# Im TITEL steht ein \n: An dieser Stelle wird bewusst umbrochen. Ohne ihn
# wuerde automatisch umbrochen und "mit Python" auseinandergerissen. Die Breite
# jeder Zeile wird in beiden Faellen geprueft.
# Sie stehen NICHT hier, sondern in NEUER_TITEL.md - derselben Datei, aus der
# auch die Startseite der Website ihren Hero-Block speist. Vorher trug dieses
# Skript eigene Konstanten, und die Startseite noch einmal eigene; drei
# Titelueberarbeitungen zogen diese hier nach und liessen jene stehen.
#
# Warum drei Zeilen und nicht zwei: "Entscheidungsfindung" ist bei 34 pt schon
# 429 pt breit und damit fast so breit wie der ganze Satzspiegel (453 pt). Jede
# zweizeilige Aufteilung braeuchte mindestens 649 pt - das passt bei keiner
# lesbaren Schriftgroesse.
TITEL = "Optimierte\nEntscheidungsfindung\nmit Python"
UNTERTITEL = ("Von der mathematischen Modellierung zu praktischen "
"intelligenten Lösungen für Betrieb, Technik und Finanzmärkte")
KOMPENDIUM = ("Ein praxisorientiertes Kompendium für Entscheider mit "
"Constraint Programming, Vektor- und Matrixmethoden sowie "
"HiGHS, SciPy, Google OR-Tools und CVXPY.")
ANWENDUNGEN = ("Von Personaleinsatz-, Schicht- und Vertretungsplänen, "
"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.")
# Der TITEL kommt einzeilig an und wird von _umbrechen() auf den Satzspiegel
# verteilt. Das ergibt dieselben drei Zeilen wie die frueher handgesetzten
# ("Optimierte" / "Entscheidungsfindung" / "mit Python") - und das ist kein
# Zufall: "Entscheidungsfindung" ist bei 34 pt schon 429 pt breit und damit
# fast so breit wie der ganze Satzspiegel (453 pt). Jede zweizeilige Aufteilung
# braeuchte mindestens 649 pt und passt bei keiner lesbaren Schriftgroesse.
_TEXTE = lies_titeltexte()
TITEL = _TEXTE["titel"]
UNTERTITEL = _TEXTE["untertitel"]
KOMPENDIUM = _TEXTE["kompendium"]
ANWENDUNGEN = _TEXTE["anwendungen"]
# Der Autor steht nicht in der Titelvorlage - sie beschreibt das Buch, nicht
# sein Impressum.
AUTOR = "Autor / Herausgeber: Dieter Schlüter"
# Satzspiegel: linker Rand und rechte Kante wie Trennlinie und Kartenreihe.