Glossar-Links: Fachbegriffe im Fließtext automatisch verlinken

Auto-Linking im Build: Glossar-Begriffe werden im Fließtext automatisch
erkannt und als Link auf den Glossar-Eintrag gesetzt — erste Nennung je
Begriff je Datei, dezent gestrichelte Unterstreichung im HTML, hyperref
im PDF. Kein manuelles Markieren bei Textänderungen nötig.

Neue Infrastruktur:
- glossar_eintraege_04.py: glossar_slug() + LINK_TEXTE-Map (automatisch
  generiert aus EINTRAEGEN + Abkürzungs-Extraktion)
- erzeuge_glossar_04.py: jeder Eintrag bekommt {#gloss:<slug>}-Anchor
- build_version_04.py: resolve_glossar() — Auto-Linking + {gl:}-Marke
- web_04/site.css: .glossar-link (dezent, nicht wie Navigationslink)

5 neue Glossar-Einträge (waren als Begriff im Text, aber nicht im Glossar):
Solver, Scheduling, Graphen, Backtest, DCP (Disciplined Convex Programming)

Schutzmechanismen:
- Code-Blöcke, Inline-Code, {idx:}/{ref:}-Marken, Markdown-Links und
  Überschriften werden nicht verlinkt
- Verschachtelung verhindert: 'CP-SAT-Solver' als Ganzes, nicht 'CP'+[
  -'SAT'+[-'Solver'
- 'OR' als 2-Zeichen-Abkürzung nicht auto-verlinkt (False Positive in
  'OR-Tools'); {gl:OR} als manuelle Marke
- Glossar selbst nicht auto-verlinkt (sonst Self-Links)
- reflow_markdown(): ::: als Block-Grenze (sonst kollabiert fenced div)

619 Glossar-Links im Gesamtdokument, 239 Anchor im Glossar, 34 im Vorwort.
This commit is contained in:
dschlueter 2026-09-10 17:40:29 +02:00
commit e8abb66d75
52 changed files with 4316 additions and 1921 deletions

View file

@ -121,7 +121,7 @@
<tr class="odd">
<td><strong>Linearität</strong></td>
<td>Risiko wächst quadratisch, Kosten degressiv, Sättigung</td>
<td>QP, konvexe Optimierung, KKT</td>
<td><a href="anhang-glossar.md#gloss:quadratische-programmierung-qp" class="glossar-link">QP</a>, konvexe Optimierung, <a href="anhang-glossar.md#gloss:karush-kuhn-tucker-bedingungen-kkt" class="glossar-link">KKT</a></td>
<td><a href="qp-nlp.html#kap-qp-nlp">Kapitel 11</a></td>
</tr>
<tr class="even">
@ -133,19 +133,19 @@
<tr class="odd">
<td><strong>Eine Periode</strong></td>
<td>die Entscheidung heute verändert, was übermorgen möglich ist</td>
<td>Bellman-Gleichung, Rückwärtsinduktion</td>
<td><a href="anhang-glossar.md#gloss:bellman-gleichung" class="glossar-link">Bellman-Gleichung</a>, <a href="anhang-glossar.md#gloss:rueckwaertsinduktion" class="glossar-link">Rückwärtsinduktion</a></td>
<td><a href="dynamische-programmierung.html#kap-dynamische-programmierung">Kapitel 13</a></td>
</tr>
<tr class="even">
<td><strong>Ein Ziel</strong></td>
<td>zwei Kennzahlen sollen gleichzeitig stimmen</td>
<td>Pareto-Front, ε-Constraint</td>
<td><a href="anhang-glossar.md#gloss:pareto-front" class="glossar-link">Pareto-Front</a>, ε-Constraint</td>
<td><a href="mehrziel.html#kap-mehrziel">Kapitel 14</a></td>
</tr>
<tr class="odd">
<td><strong>Daten sind gegeben</strong></td>
<td>die Eingabe ist selbst eine Prognose</td>
<td>Predict-then-Optimize, entscheidungsorientiertes Lernen</td>
<td><a href="anhang-glossar.md#gloss:predict-then-optimize" class="glossar-link">Predict-then-Optimize</a>, entscheidungsorientiertes Lernen</td>
<td><a href="prognose.html#kap-prognose">Kapitel 15</a></td>
</tr>
</tbody>
@ -183,7 +183,7 @@
</tr>
<tr class="even">
<td>„Die bessere Prognose führt zur besseren Entscheidung.”</td>
<td>Das Modell mit dem <strong>schlechteren</strong> MSE trifft die günstigere Entscheidung</td>
<td>Das Modell mit dem <strong>schlechteren</strong> <a href="anhang-glossar.md#gloss:mse" class="glossar-link">MSE</a> trifft die günstigere Entscheidung</td>
<td><a href="prognose.html#kap-prognose">Kapitel 15</a></td>
</tr>
</tbody>
@ -191,12 +191,12 @@
<h2 id="drei-fehler-die-dieser-teil-verhindert">Drei Fehler, die dieser Teil verhindert</h2>
<ol type="1">
<li><strong>Unsicherheit durch Mittelwerte ersetzen.</strong> Der Durchschnittskunde kauft nie. Bei asymmetrischen Kosten liegt das Optimum systematisch neben dem Mittelwert, und eine Terminzusage ist ein <strong>Quantil</strong>, kein Erwartungswert.</li>
<li><strong>Konvexität voraussetzen, ohne sie zu prüfen.</strong> Ohne sie gibt es keine Optimalitätsgarantie, sondern nur ein lokales Ergebnis — und der Solver sagt das nicht von selbst.</li>
<li><strong><a href="anhang-glossar.md#gloss:konvexitaet" class="glossar-link">Konvexität</a> voraussetzen, ohne sie zu prüfen.</strong> Ohne sie gibt es keine Optimalitätsgarantie, sondern nur ein lokales Ergebnis — und der <a href="anhang-glossar.md#gloss:solver" class="glossar-link">Solver</a> sagt das nicht von selbst.</li>
<li><strong>Zwei Ziele mit einem Gewicht verrechnen, bevor die Front bekannt ist.</strong> Ein Gewicht ist eine Antwort auf eine Frage, die noch niemand gestellt hat. Die Pareto-Front stellt sie zuerst.</li>
</ol>
<h2 id="wenn-sie-nur-eines-mitnehmen">Wenn Sie nur eines mitnehmen</h2>
<blockquote>
<p><strong>🎯</strong> Jede der vier Annahmen lässt sich einzeln aufgeben — aber jede kostet etwas Bestimmtes: Linearität kostet die Optimalitätsgarantie, feste Daten kosten Rechenzeit oder Vorsicht, eine Periode kostet Zustandsraum, ein Ziel kostet eine Entscheidung, die nicht der Modellierer treffen darf. Wer weiß, <strong>welche</strong> Annahme bei ihm fällt, weiß auch, welchen Preis er zahlt.</p>
<p><strong>🎯</strong> Jede der vier Annahmen lässt sich einzeln aufgeben — aber jede kostet etwas Bestimmtes: Linearität kostet die Optimalitätsgarantie, feste Daten kosten Rechenzeit oder Vorsicht, eine Periode kostet <a href="anhang-glossar.md#gloss:zustandsraum" class="glossar-link">Zustandsraum</a>, ein Ziel kostet eine Entscheidung, die nicht der Modellierer treffen darf. Wer weiß, <strong>welche</strong> Annahme bei ihm fällt, weiß auch, welchen Preis er zahlt.</p>
</blockquote>
</article>