Duplex xerif

28. 11. 2025 | Patrick Schulz, Maren Pufe, Fränze Gramsch
le-tex publishing services GmbH

Duden goes transpectxerif

transpect: Kaskadierende Vererbung

Ausgangslage:

  • unterschiedliche Input-XML-Daten mit unterschiedlichen Schemas
    (z.B. durch historisch gewachsene Datenbestände)
  • zum Teil dasselbe Schema, aber unterschiedliches Rendering bei:
    • Verweisdarstellung
    • Listen inline oder als Block (z.B. D5 vs. D2)
    • Spaltigkeit (z.B. D1 vs. D2)
unterschiedliche Listendarstellung
Listen inline links bei D5, rechts immer neuzeilig bei D2

Umsetzung:

  • analog zu anderen transpect-Projekten: allgemeine Konfiguration
  • von Schematypen, einzelnen Werken, Auflagen und Layouts überdefinierbar:
    • z.B. beim CSS für Spalten, Farbigkeit, Boxen
    • unterschiedliche Normalisierung bestimmter Zeichen
    • Behandlung bestimmter Artikeltypen/Kästen
  • Anstatt verschiedener Reihen Unterscheidung nach Schema (für D7, D9 und allgemeines Duden-Schema)
  • Das allgemeine Schema unterscheidet sich nach Layout/Spaltigkeit, enthält auch Werke ohne Untergliederung und ggf. deren Auflagenanpassungen
    Beispiel Layout-Kaskade

Konvertierungs-Workflows

  • Duden-XML → Zwischen-XML (Hub, angelehnt an DocBook)
    • Erkennung von Artikeln/Kästen, verschachtelten Artikeln
    • Erzeugung von Listen, Hinzufügen von Verweispfeilen, etc.
    • Normalisierungen (Klammern aus Elementen ziehen, Leerzeichenersetzungen bei Abkürzungen und zum Zusammenhalten bestimmter Kontexte ( -s) etc.
  • Hub-XML
    • TeX
    • HTML (Vorschau)
    • DiffTeX/HTML
  • TeXPDF

xerif: Vergleichsfahnen

Anforderung

Änderungen von Artikeln (XML first) und des Umbruchs visuell prägnant darstellen

  1. als seitenweiser PDF-Vergleich
    • = Grundlage unserer CI-Tests
    • Skript wandelt jede Seite in ein Bild um
    • Bilder werden verglichen und Unterschiede farbig hervorgehoben
  2. als PDF-Vergleichsfahne
    • = nur geänderte Artikel als PDF mit Änderungsdarstellung zur Prüfung für Redaktion
Ausschnitt PDF-Vergleichsfahne
Ausschnitt PDF-Vergleichsfahne

Vorgehensweise

  • aktuelles und Referenz-XML werden nach Hub-XML konvertiert
  • Hub wird mit DeltaXignia gedifft.
  • Einfügen von Änderungs-Markup:
    • gelöschte Texte und Elemente: mit
      <del>
      umgeben
    • hinzugefügte Texte und Elemente: mit
      <add>
      umgeben
    • Änderungen und Verschiebungen kombinieren beide Elemente
    • geänderte Attribute erhalten einen Präfix (Namespace), der Änderung anzeigt:
    • z.B. ein neu hinzugefügtes Attribut
      role
      würde dann zu
      add:role="ichbinneu"
  • mit Änderungs-Markup angereichertes Hub-XML wird postprozessiert:
    • Erzeugung zweier Ansichten: links Ansicht mit Änderungs-Markup, rechts neue Version
    • HTML-Version: ein zusätzliches IHV wird erzeugt
    • Abhängig von der Content-Ebene: Umwandlung des Änderungs-Markups in Hub-Vokabular.
    • z.B.
      <phrase remap="del" xml:id="diff_xyz" revisionflag="deleted"
                             annotations="Dieser Text wurde gelöscht"></phrase>
      (Textlöschung in Absatz)
    • Attribute führen die Art der Änderung mit
Ausschnitt HTML-Vergleich einer Merkliste
HTML-Ansicht einer geänderten Merkliste
  • Postprozessiertes Hub wird zu TeX konvertiert
  • spezielle Makros und Paketoptionen für Änderungsvisualisierung:
    • auf Textebene: DiffSpan
    • \DiffSpan[class=deleted]{Löschung}
      = Löschung
    • \DiffSpan[class=added]{Hinzufügung}
      = Hinzufügung
    • \DiffSpan[class=deleted]{alt}\DiffSpan[class=added]{neu}
      = Änderung
    • auf Artikelebene: als Option der Artikelumgebung
    • \begin{duden}[class=deleted,
                                          from-pre={ab:},from-aft={Abbruch, }]

      = Löschung + Angabe Vor- und Folgeartikel
    • \begin{duden}[class=moved,
                                          from-pre={abfließen},from-aft={Abfluss},
                                          to-pre={Abgang},to-aft={abgeben}]

      = Artikelverschiebung + Angabe Vor- und Folgeartikel
  • alles andere: DiffChanged
  • bildet Eigenschaftsänderungen ab (z.B. Attributwert-Änderungen, wie IDs oder Formatierungsänderungen wie Kastentypen).
  • innerhalb dieses Konstrukts können weitere Änderungen auftreten
             \DiffChanged[title={XML-Struktur wurde entfernt ('bsp')}]
                {\bsp{ein dicker, fetter, armlanger %
                  \DiffChanged[title={XML-Struktur wurde geändert (von 'ab bsptext' zu 'ab bsptext test')}]
                   {\bsp{A.}}%      erstes  Argument des inneren \DiffChanged 
                   {\bsptext{A.}};% zweites Argument des inneren \DiffChanged
                 }%\bsp
               }% erstes Arg. des äußeren \DiffChanged

PDF-Rendering

  • Spaltigkeit des Layouts wiedergegeben, visuelle Anlehnung an HTML-Ansicht
  • Kästen bilden Ausnahme und werden untereinander ausgegeben
  • Eigenschaftsänderungen als Fußnote
Ausschnitt PDF-Vergleichsfahne mit Eigenschaftsänderunge
Ausschnitt PDF-Vergleichsfahne mit Eigenschaftsänderungen

xerif: Satz-Features

  • Boxen, auch mehrspaltige und geteilte (bes. D1, D5)
  • Wortwolken (D2, D5)
  • Spaltigkeitswechsel (D9)
  • Registerhaltigkeit
  • automatische Griffmarken und intelligente Kolumnentitel
  • Kasten/Seitenverweise
  • vertikale Trennstriche mit Trennfunktion
  • Trennmuster: TeX-Patterns, ggf. mit Trennlexika (nach Versuchen mit Silbentrennservice von EPC)

Continous Integration-Tests (CI)

  • Vergleich von Testdaten-Renderings mit Referenzdaten für
    • Hub-XML
    • HTML
    • TeX
    • PDF
  • Zweck: Zufällige Verschlechterungen auf Grund von Änderungen am Code (incl. transpect-Bibliotheken, CoCoTeX-Makros, TeX-Live-Distribution, Saxon, Calabash etc.) entdecken
  • Orchestrierung mit Gitlab-CI
  • PDF-Vergleich kann auch per Artefakte > Umbruchvergleich zwischen Auflagenständen vorgenommen werden

transpect: IDML-Synthese

  • Ein weiteres transpect-Modul im Einsatz
  • Erzeugung eines IDML-Grobumbruchs aus Duden-XML
  • für sehr bildlastige Werke wie das Grundschulwörterbuch
    Screenshot des Grunschulwörterbuchs

Vielen Dank