From ffc553b4d2ad5b1f4c1a4dec0ad9c19d96556378 Mon Sep 17 00:00:00 2001
From: Matthias Andreas Benkard <code@mail.matthias.benkard.de>
Date: Sat, 15 Aug 2026 12:18:32 +0200
Subject: Die Beschlussempfehlung liefert die beschlossene Fassung
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Bisher wurde eine Beschlussempfehlung erkannt und mit Begründung übergangen:
Ihre maßgebliche Fassung steht in der zweispaltigen Zusammenstellung, deren
rechte Spalte für sich unlesbar ist. Sie druckt Unverändertes nicht ab,
sondern vermerkt bloß „unverändert“ — und zwar nicht nur je
Gliederungspunkt, sondern auch zeilenweise innerhalb zitierter Blöcke,
weshalb ihre Anführungszeichen nicht aufgehen. Eine Auflösung über die
Gliederungspfade scheitert daran nachweislich (45 statt 117 Befehlen).

Maßgeblich ist die Grundlinie: Beide Spalten sind zeilensynchron gesetzt,
jeder Vermerk steht auf der Höhe der Entwurfszeile, die er meint. Der neue
`ZusammenstellungsLeser` führt sie über Seite und Grundlinie in eine
gemeinsame Lesereihenfolge zusammen und entscheidet dann Zeile für Zeile:
„unverändert“ holt den Wortlaut aus der Entwurfsspalte, „entfällt“ streicht
ihn, sonst gilt die Ausschussspalte. Das Vokabular der rechten Spalte ist
ausgezählt genau zweiteilig — 166-mal „unverändert“, 17-mal „entfällt“.

Dabei meint „unverändert“ den Wortlaut, nicht die Zählung: Streicht der
Ausschuss einen Punkt, rücken die folgenden auf, und sein „5. unverändert“
steht der Entwurfsnummer 6 gegenüber. Die Marke kommt deshalb von rechts,
der Wortlaut von links.

Voraussetzung dafür war, die Geometrie aus dem `FontgroessenFilter`
herauszuführen. Sonst verließ ihn nur das End-X der Zeile; jetzt trägt jede
Zeile Seite, Grundlinie und End-X (`FontgroessenFilter.Zeile`). Die
Metadaten reisen weiterhin im Textstrom mit, statt nebenher gesammelt zu
werden: Nur so ist ihre Zuordnung zu den Zeilen gesichert, denn PDFBox
schreibt Zeilentrenner an mehreren Stellen. Der Schritt ist reine
Umstrukturierung, sämtliche gepinnten Zahlen bleiben unverändert.

Drei Fehler standen im Weg, alle in der Spaltentrennung:

* Der Steg wurde einschließlich der Leerzeichen-Glyphen gemessen, die im
  Textstrom fast bis an die nächste Spalte reichen. Ein 7-pt-Steg schrumpfte
  so auf 4,7 pt und galt als durchlaufender Text, was in BT-Drs. 20/7619 die
  gesperrte Marke des Punktes 14 mitten entzweiriss. Gemessen wird jetzt an
  den sichtbaren Zeichen; die Schwelle sinkt von 12 auf 6 pt und liegt damit
  belegt zwischen dem schmalsten echten Steg (6,9 pt) und dem breitesten
  Wortzwischenraum einer ganzseitenbreiten Zeile (5,4 pt) — in beiden
  Belegdokumenten übereinstimmend.

* Gedrehter Text hat Koordinaten in seinem eigenen Bezugssystem. Der
  Randvermerk „Vorabfassung – wird durch die lektorierte Fassung ersetzt“
  lief mit seiner vermeintlichen Grundlinie quer durch beide Spalten und
  zerschnitt deren Zeilenfolge. Beim Spaltenauszug bleibt er nun draußen;
  beim ungeteilten entfernt ihn wie bisher der TextBereiniger.

* Die Zeilenenden müssen je Spalte klassifiziert werden, bevor die Spalten
  zusammenkommen: Ihre Satzspiegelränder liegen verschieden, in der
  gemischten Fassung fände keine ihren eigenen Ausrichtungs-Cluster wieder
  und die Silbentrennung bliebe ungeheilt („An- gabe“).

Die Quellenzeile weist die verwendete Spalte als „[Beschlussempfehlung …,
Ausschussfassung]“ aus. Lässt sich die Zusammenstellung nicht auflösen,
wird die Datei nach wie vor mit Begründung übergangen — eine halb
aufgelöste Fassung auszugeben wäre schlimmer als keine.

Zwei Belegfälle: BT-Drs. 20/7619 (GEG) mit 67 angewandten Befehlen, wobei
die Ausschussfassung mehr Befehle trägt als der Regierungsentwurf daneben —
der Ausschuss hat zwei Artikel ergänzt —, und BT-Drs. 19/24334 (Drittes
Bevölkerungsschutzgesetz) mit 47. Der große manuelle Rest hat denselben
Grund wie beim Entwurf: Das Beispiel-XML ist die Urfassung des GEG von 2020,
geändert wird eine Fassung von 2023. Die verbliebenen zwei unerkannten
Befehle gehen auf Setzfehler der amtlichen Drucksache zurück (fehlender
Schlusspunkt, überzähliges Anführungszeichen) und sind zeichengenau so
übernommen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Change-Id: Id5db19cb8f27a51af0c23cfd4a9969dd4120f569
---
 README.adoc | 63 ++++++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 39 insertions(+), 24 deletions(-)

(limited to 'README.adoc')

diff --git a/README.adoc b/README.adoc
index 24083c7..bd0a4ee 100644
--- a/README.adoc
+++ b/README.adoc
@@ -204,8 +204,9 @@ Gesetzentwurf::
 Änderungsantrag::
   Ändert nicht das Stammgesetz, sondern eine *Drucksache* — siehe unten.
 Beschlussempfehlung::
-  Trägt ihre Fassung in einer zweispaltigen Zusammenstellung. Erkannt,
-  aber noch nicht angewandt (siehe unten).
+  Trägt ihre Fassung in einer zweispaltigen Zusammenstellung, die
+  aufgelöst wird — die Synopse zeigt dann die vom Ausschuss beschlossene
+  Fassung (siehe unten).
 Dokument ohne Änderungsbefehle::
   Entschließungs- und schlichter Antrag, Plenarprotokoll, Bericht. Sie
   werden übergangen und gemeldet — nicht stillschweigend zu null
@@ -243,31 +244,45 @@ elliptische Antragsform, die das Hilfsverb nur einmal in der
 Beschlussformel führt („1. In Nr. 1.29 die Angabe „,“ am Ende durch die
 Angabe „;“ ersetzt.“).
 
-=== Beschlussempfehlungen: erkannt, noch nicht angewandt
+=== Beschlussempfehlungen: die beschlossene Fassung
 
 Die maßgebliche Fassung einer Beschlussempfehlung steht in einer
 zweispaltigen Zusammenstellung: links der Entwurf, rechts die Beschlüsse
-des Ausschusses. Die Spaltentrennung ist erledigt und belegt — anders
-als beim alten BGBl und beim Berliner GVBl stehen die Spalten *nicht*
-nacheinander im Inhaltsstrom, sondern zeilenweise verschränkt, weshalb
-sie erstmals koordinatenbasiert getrennt werden (`PatchTextExtraktor.
-extrahiereSpalten`, Schnitt an der Blattmitte, aber nur an einem
-tatsächlichen Spaltensteg, damit ganzseitenbreite Zeilen ungeschnitten
-bleiben). Der Akzeptanztest hält fest, dass die linke Spalte Befehl für
-Befehl den Regierungsentwurf ergibt, aus dem die Zusammenstellung gebaut
-ist.
-
-Was fehlt, ist die Auflösung der rechten Spalte. Sie druckt Unverändertes
-nicht ab, sondern vermerkt bloß „unverändert“ — und zwar nicht nur je
-Gliederungspunkt, sondern auch zeilenweise innerhalb zitierter Blöcke.
-Dadurch ist die rechte Spalte für sich genommen kein vollständiges
-Dokument: Ihre Anführungszeichen gehen nicht auf. Eine Auflösung über
-Gliederungspfade allein scheitert daran nachweislich; nötig ist die
-zeilenweise Zuordnung beider Spalten über ihre gemeinsame Grundlinie im
-PDF. Bis dahin wird eine Beschlussempfehlung erkannt und mit Begründung
-übergangen — samt Hinweis auf die Drucksachennummer des Entwurfs, der
-sich stattdessen eignet. Eine halb aufgelöste Fassung auszugeben wäre
-schlimmer als keine.
+des Ausschusses. Anders als beim alten BGBl und beim Berliner GVBl
+stehen die Spalten *nicht* nacheinander im Inhaltsstrom, sondern
+zeilenweise verschränkt; getrennt werden sie deshalb über die
+Koordinaten (`PatchTextExtraktor.extrahiereSpalten`, Schnitt an der
+Blattmitte, aber nur an einem tatsächlichen Spaltensteg, damit
+ganzseitenbreite Zeilen ungeschnitten bleiben).
+
+Die rechte Spalte für sich gelesen ist allerdings kein vollständiges
+Dokument: Sie druckt Unverändertes nicht ab, sondern vermerkt bloß
+„unverändert“ — und zwar nicht nur je Gliederungspunkt, sondern auch
+zeilenweise innerhalb zitierter Blöcke, weshalb ihre Anführungszeichen
+nicht aufgehen. Eine Auflösung über die Gliederungspfade scheitert daran
+nachweislich. Maßgeblich ist stattdessen die *Grundlinie*: Beide Spalten
+sind zeilensynchron gesetzt, jeder Vermerk steht auf der Höhe der
+Entwurfszeile, die er meint. Der `ZusammenstellungsLeser` führt beide
+Spalten über Seite und Grundlinie in eine gemeinsame Lesereihenfolge
+zusammen und entscheidet dann Zeile für Zeile: „unverändert“ holt den
+Wortlaut aus der Entwurfsspalte, „entfällt“ streicht ihn, sonst gilt die
+Ausschussspalte. Dabei meint „unverändert“ den Wortlaut, nicht die
+Zählung — streicht der Ausschuss einen Punkt, rücken die folgenden auf,
+und seine Marke tritt an die Stelle der des Entwurfs.
+
+Die Quellenzeile der Synopse weist die verwendete Spalte als
+`[Beschlussempfehlung …, Ausschussfassung]` aus. Lässt sich die
+Zusammenstellung nicht auflösen, wird die Datei nach wie vor mit
+Begründung übergangen — samt Hinweis auf die Drucksachennummer des
+Entwurfs, der sich stattdessen eignet. Eine halb aufgelöste Fassung
+auszugeben wäre schlimmer als keine.
+
+Belegt ist beides: dass die *linke* Spalte Befehl für Befehl den
+Regierungsentwurf ergibt, aus dem die Zusammenstellung gebaut ist, und
+dass die aufgelöste Fassung mehr Befehle trägt als er — der Ausschuss
+hat der GEG-Novelle zwei Artikel hinzugefügt. Zwei Beispiele stehen im
+Test: BT-Drs. 20/7619 (GEG) und BT-Drs. 19/24334 (Drittes
+Bevölkerungsschutzgesetz).
 
 [[web]]
 == Web-App
-- 
cgit v1.2.1

