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

@ -100,7 +100,7 @@
<nav class="prev-next"><a class="prev-next-knopf prev-next-prev" href="modellierung.html"><svg class="icon" aria-hidden="true"><use href="#icon-chevron-left"></use></svg><span><small>Zurück</small>Kapitel 4: Vom Management-Wunsch zum Modell</span></a><a class="prev-next-knopf prev-next-next" href="lp.html"><span><small>Weiter</small>Kapitel 5: Lineare Programmierung — Simplex, Dualität und Schattenpreise</span><svg class="icon" aria-hidden="true"><use href="#icon-chevron-right"></use></svg></a></nav>
<article>
<h1 id="synthese-teil-i-grundlagen-auf-einen-blick">Synthese Teil I — Grundlagen auf einen Blick</h1>
<p>Vier Kapitel, eine Frage: <strong>Was muss vorliegen, bevor ein Solver überhaupt sinnvoll gestartet werden kann?</strong> Die Antwort ist unbequem, weil das meiste davon nichts mit Programmieren zu tun hat.</p>
<p>Vier Kapitel, eine Frage: <strong>Was muss vorliegen, bevor ein <a href="anhang-glossar.md#gloss:solver" class="glossar-link">Solver</a> überhaupt sinnvoll gestartet werden kann?</strong> Die Antwort ist unbequem, weil das meiste davon nichts mit Programmieren zu tun hat.</p>
<h2 id="was-welches-kapitel-klärt">Was welches Kapitel klärt</h2>
<table>
<colgroup>
@ -119,17 +119,17 @@
<tr class="odd">
<td>Was ist überhaupt ein Optimierungsmodell?</td>
<td><a href="einfuehrung.html#kap-einfuehrung">Kapitel 1</a></td>
<td>Die vier Bausteine benennen — Variablen, Zielfunktion, Nebenbedingungen, Daten — und sie in einem fremden Problem wiedererkennen</td>
<td>Die vier Bausteine benennen — Variablen, <a href="anhang-glossar.md#gloss:zielfunktion" class="glossar-link">Zielfunktion</a>, Nebenbedingungen, Daten — und sie in einem fremden Problem wiedererkennen</td>
</tr>
<tr class="even">
<td>Warum rechnet der Solver falsch, obwohl das Modell stimmt?</td>
<td><a href="fundament.html#kap-fundament">Kapitel 2</a></td>
<td>Konvexität beurteilen, den zulässigen Bereich als Polyeder sehen, schlechte Konditionierung erkennen und beheben</td>
<td><a href="anhang-glossar.md#gloss:konvexitaet" class="glossar-link">Konvexität</a> beurteilen, den zulässigen Bereich als <a href="anhang-glossar.md#gloss:polyeder" class="glossar-link">Polyeder</a> sehen, schlechte Konditionierung erkennen und beheben</td>
</tr>
<tr class="odd">
<td>Welche Bibliothek, und warum vertragen sie sich nicht?</td>
<td><a href="oekosystem.html#kap-oekosystem">Kapitel 3</a></td>
<td>Solver, Bindings und Modellierungsschichten unterscheiden — und den HiGHS-Symbolkonflikt zwischen <code>ortools</code> und <code>highspy</code> umgehen</td>
<td>Solver, Bindings und Modellierungsschichten unterscheiden — und den <a href="anhang-glossar.md#gloss:highs" class="glossar-link">HiGHS</a>-Symbolkonflikt zwischen <code>ortools</code> und <code>highspy</code> umgehen</td>
</tr>
<tr class="even">
<td>Wie wird aus einem Satz ein Modell?</td>