Version 5.7.4

Version 5

5.7

5.7.4 (9.7.2026)

  • Ein zentrierter rechtsläufiger Absatz mit einem Zeilenumbruch wird wieder korrekt zentriert.
    In einem zentrierten Absatz mit Schreibrichtung von rechts nach links — etwa Arabisch oder Hebräisch — der einen Zeilenumbruch (<Br/>) enthält, wurde die Zeile nach dem Umbruch leicht aus der Mitte verschoben. Solche Zeilen werden jetzt wieder korrekt zentriert.
  • Die Zeichen U+0083 (no break here) und U+2060 (word joiner) verhindern jetzt einen Zeilenumbruch.
    Daten enthalten manchmal die Zeichen U+0083 (&[#131](https://github.com/speedata/publisher/issues/131);, „no break here“) oder U+2060 (&[#8288](https://github.com/speedata/publisher/issues/8288);, „word joiner“), um zwei Wörter auf einer Zeile zu halten. Bisher führte U+0083 zu einem Fehler „Glyph is missing from the font“, und U+2060 wurde stillschweigend verworfen. Beide Zeichen tun jetzt das, wofür sie gedacht sind: An ihrer Position wird nicht umbrochen, und ein angrenzendes Leerzeichen wird ebenfalls geschützt (#695).

5.7.3 (8.7.2026)

  • Ein literales „<“ wie in „<5“ ist in Text für sd:decode-html() jetzt erlaubt.
    Text, der an sd:decode-html() übergeben wurde und ein < enthielt, das kein HTML-Tag einleitet — etwa ein Kleiner-als-Zeichen wie in „Menge <5“ —, ließ bisher den gesamten Wert scheitern und musste in den Daten maskiert werden. Ein solches < wird nun wie in Webbrowsern als normaler Text behandelt, sodass alltägliche Vergleiche und ähnliche Ausdrücke ohne zusätzliche Maskierung funktionieren.

5.7.2 (3.7.2026)

  • Letztes Glyph bleibt im Hyperlink, wenn dieser eine Box beendet (z. B. NoBreak).
    Wenn ein Hyperlink bis zum letzten Node einer Liste reichte (head.next == nil), fügte insert_nonmoving_whatsits das pdf_end_link-Whatsit vor diesem Node ein, sodass das letzte Glyph aus der klickbaren Linkfläche herausfiel. Das trat bei <NoBreak> (und anderen eng gepackten Boxen) auf, deren Inhalt ohne nachfolgende Glue hpackt wird — in einem normalen Absatz sorgt der parfillskip hinter dem Text dafür, dass das letzte Glyph nicht der finale Node ist, weshalb der Fehler dort verborgen blieb. Das pdf_end_link wird in diesem Fall jetzt hinter dem Node eingefügt, analog zur bestehenden Endcolor-Behandlung.
  • HarfBuzz-Font-Kerning wird auf NoBreak-Inhalt angewendet.
    Die keeptogether-Strategie von <NoBreak> hpackte ihre Glyphenliste, ohne den HarfBuzz-Kern-Pass auszuführen, sodass das Font-Kerning verloren ging und die Box zu breit wurde — die Glyphen standen auf ihrer Standard-Vorschubbreite. Der Effekt war zwischen den letzten beiden Glyphen am deutlichsten und hing von der an HarfBuzz übergebenen Sprache ab. node.kerning gefolgt von hbkern läuft jetzt vor dem hpack, analog zu finish_par, sodass eine NoBreak-Box exakt wie ein normaler Absatz gekernt wird. Die drei NoBreak-Referenz-PDFs werden neu erzeugt.
  • Sinnvolle Fehlermeldung statt Absturz, wenn das Wurzelelement zu keinem Record passt.
    Wenn das Wurzelelement einer Datendatei nicht direkt zu einem Record passte und der neue XPath-Parser den Pattern-Matching-Fallback versuchte, rief er ein unqualifiziertes find_matching_pattern auf, das nil war — der Lauf brach mit attempt to call a nil value ab statt mit der vorgesehenen Meldung Can't find “Record” command for the root node. Der Aufruf ist jetzt als M.dispatch.find_matching_pattern qualifiziert, sodass der Fallback funktioniert und bei fehlender Übereinstimmung die hilfreiche Diagnose (mit Namespace und Elementname) erscheint.
  • Boolesches viertes Argument von sd:merge-pagenumbers() wird beachtet.
    Das vierte Argument von sd:merge-pagenumbers() aktiviert Hyperlinks auf den zusammengefassten Seitenzahlen. Es wurde mit string_value gelesen, sodass false() die Zeichenkette "false" ergab — die in Lua wahr ist und die Hyperlinks trotzdem einschaltete. Es wird jetzt mit boolean_value gelesen, sodass ein echtes boolesches false die Hyperlinks wie beabsichtigt deaktiviert.

5.7.1 (22.6.2026)

  • False-Positive “Output loop detected in vsplit” behoben, das bei langen Dokumenten Inhalt verwarf.
    Die Schleifenerkennung in Output/Text verglich nur Node-Referenzen (prevobj1 == obj1). LuaTeX verwendet freigegebenen Node-Speicher wieder, sodass die frisch gebaute Seiten-Box den Pointer einer bereits ausgegebenen Box erben und gleich erscheinen kann, obwohl echter vertikaler Fortschritt gemacht wurde. Bei einem Dokument, dessen einzelnes <Output> über mehr Seiten läuft als bis zur ersten Pointer-Kollision, brach die Ausgabe dadurch vorzeitig ab und verwarf den restlichen Inhalt stillschweigend. Die Erkennung verlangt jetzt zusätzlich, dass kein vertikaler Fortschritt gemacht wurde (das verbleibende Material nicht kleiner wird); echte Endlosschleifen — ein nicht umbrechbarer Block, der höher als die Fläche ist — lösen den Fehler weiterhin wie bisher aus. Fügt qa/output/vsplitloop als Regressionstest hinzu.
  • Verschwindender expliziter Bindestrich neben einem Kerning-Paar behoben.
    Wenn lang.hyphenate einen expliziten Bindestrich in eine automatische Trennstelle (Discretionary) umwandelt, liegt das Bindestrich-Glyph in deren replace-Liste. hbkern überschrieb die replace-Liste mit dem anstehenden Kern-Node (d_setfield(head, "replace", kern)), sodass der Bindestrich verloren ging und immer dann verschwand, wenn die Schrift das unmittelbar davorstehende Glyph kernte (z. B. bei allowbreak=" "). Der Kern wird jetzt der bestehenden replace-Liste vorangestellt, statt sie zu ersetzen. Fügt qa/harfbuzz/hyphenkern als Regressionstest hinzu.

5.7.0 (12.6.2026)

  • luahbtex als Fallback-Backend-Binary akzeptiert.
    Der sp-Launcher suchte bisher ausschließlich nach sdluatex (in installdir/bin und im PATH) und brach ab, wenn die Binary fehlte. Jetzt wird zusätzlich ein normales luahbtex als Fallback akzeptiert, sodass Installationen ohne das speedata-gepatchte LuaTeX (z. B. Distributions-Pakete) den Publisher trotzdem starten können. Die Konfigurationsoption luatex überschreibt nach wie vor beide. Die abschließende Fehlermeldung nennt jetzt beide Binary-Namen.

5.6

5.6.0 (3.6.2026)

  • Veröffentliche Version 5.6.0.

5.5

5.5.25 (1.6.2026)

  • Bilder in rotierten Td-Zellen rutschten nach oben aus der Zelle.
    Das von LuaTeX vor einem Bild emittierte cm enthält in neuen Versionen keinen y-Shift von -image_height mehr — frühere LuaTeX-Versionen fügten ihn automatisch hinzu. Bei <Td rotate="..."/>, das um die obere Zellkante rotiert, wurde das Bild dadurch über dem Pivot gezeichnet und ragte nach oben aus der Zelle. Das Bild wird jetzt in ein save/restore eingewickelt, das es vorher um die Inhaltshöhe nach unten verschiebt, sodass die Rotation um die obere Bildkante pivotiert. Text in rotierten Zellen ist nicht betroffen, weil seine Position über eine absolute Tm-Matrix gesetzt wird, die den CTM-Shift überschreibt.
  • Lateinische Glyphen werden bei bidi=“no” nicht mehr gespiegelt.
    Bei bidi="no" in Kombination mit direction="rtl" wurde die Segmentrichtung auf rtl forciert und an HarfBuzz weitergereicht, das pflichtbewusst lateinische (oder andere LTR-Skript-)Glyphen spiegelte — ein Lorem-Ipsum-Block las sich rückwärts. HarfBuzz bekommt für die Segmentrichtung jetzt nil, damit sie aus dem Skript abgeleitet wird; die absatzbezogene maindirection steuert weiterhin die Zeilenrichtung.
  • Options/startpage wurde durch den Default überschrieben.
    Der in einem 5.5.x-Cleanup eingeführte Default 1 für publisher.options.startpage sorgte dafür, dass ein nachgelagerter Codepfad current_pagenumber immer wieder auf 1 zurücksetzte — und damit den vom <Options startpage="..."/>-Handler gerade gesetzten Wert überschrieb. Der Handler schreibt den eingelesenen Wert jetzt zusätzlich nach publisher.options.startpage zurück, sodass die nachgelagerte Prüfung die Wahl des Anwenders sieht.

5.5.24 (30.5.2026)

  • Neue Option jardir, mit der Paket-Maintainer den Publisher auf systemweit installierte Java-JARs verweisen können.
    Der Publisher liefert Saxon-HE, jing und xmlresolver als JAR-Dateien im lib-Verzeichnis mit. Maintainer von Betriebssystem-Paketen (Auslöser war der FreeBSD-Port textproc/saxon-he, #685) müssen gegen die systemweiten Kopien in /usr/local/share/java/classes/ linken, statt eine private Zweitkopie auszuliefern. Eine neue Konfigurationsoption jardir (setzbar über publisher.cfg oder --option jardir=...) überschreibt das Suchverzeichnis für die JARs. Die Saxon-JAR wird jetzt per Glob saxon-he-*.jar gefunden statt über einen festen Dateinamen, sodass die System-Version nicht exakt mit der mitgelieferten Point-Release übereinstimmen muss.

5.5.23 (26.5.2026)

  • matches()-XPath-Funktion lehnte mit dem neuen Parser ein drittes (Flag-)Argument ab.
    Die XPath-2.0-Signatur matches(input, pattern, flags) war mit dem neuen XPath-Parser kaputt: Ein Aufruf mit drei Argumenten brach mit function matches() requires 1 to 2 arguments, 3 supplied ab (#692). Der publisher-seitige Wrapper in layout_functions_lxpath.lua überschrieb die lxpath-Default-Registrierung mit der falschen Min/Max-Argumentzahl (1/2 statt 2/3) und ignorierte das dritte Argument stillschweigend. Der Wrapper akzeptiert jetzt 2-3 Argumente und reicht die Flags (i, m, s) per Inline-Präfix (?flags) an Gos regexp-Engine weiter — analog zum Verhalten des Legacy-Parsers. Das x-Flag wird weiterhin nicht unterstützt und löst eine Warnung aus.
  • Breite von HSpace in Tabellenzellen wird nicht mehr überschrieben.
    fix_justification ersetzte die Breite von subtype=0-Glues durch die Wortzwischenraum-Breite der umgebenden Schrift, sobald die Zeile gestretcht wurde. Damit ging die explizite Breite von <HSpace width="..."/> in Tabellenzellen verloren, weil der linksbündige Zellabsatz fast immer durch parfillskip gestretcht wird. HSpace-Glues mit fester Breite werden jetzt mit einer Property markiert und in fix_justification übergangen.

5.5.22 (16.5.2026)

  • page/line-Kontext aus Run-Abschluss-Logs entfernt.
    Die Run-Abschluss-Zeilen Start processing, Stop processing data, N errors occurred und Duration: ... liefen durch main.log, das automatisch die aktuelle page, line_layout und line_data als strukturierte Felder anhängt. Bei Warnungen/Fehlern während des Laufs sind diese Felder sinnvoll, bei einer Run-Zusammenfassungszeile aber nur die zufällige Position, an der der Publisher gestoppt ist — irreführend, wenn die Ausgabe mehrerer Läufe aggregiert wird. Die vier Zeilen rufen jetzt direkt splib.log auf, sodass die Protokoll-Einträge schlank sind (<entry level="info" msg="0 errors occurred"/>).
  • CJK-Shaping-Crash behoben: publisher.prohibited_at_end war nil.
    Der Satz von CJK-Text (Chinesisch, Japanisch) brach mit attempt to index a nil value (field 'prohibited_at_end') in nodes.lua:1453 ab. Die Tabellen prohibited_at_end und prohibited_at_beginning in spinit.lua wurden als nackte globale Variablen definiert, in nodes.lua aber als publisher.prohibited_at_end angesprochen. Das funktionierte, bis der _G.publisher-Table mit __index = _G entfernt wurde — seither lief der Zugriff ins Leere. Die Tabellen hängen jetzt korrekt am publisher-Namespace. Ein kleiner Regressionstest unter qa/harfbuzz/cjk/ deckt den CJK-Codepfad ab.

5.5.21 (13.5.2026)

  • Crash in ForAll bei leerer Auswahl mit dem neuen XPath-Parser behoben.
    Wenn der neue XPath-Parser für einen select-Ausdruck ohne Treffer nil lieferte (z. B. <ForAll select="foo/bar/*"/>, wenn foo/bar keine Kinder hat), brach ForAll mit einem Fehler auf #selection ab. Der Legacy-Parser-Zweig hatte diese Absicherung bereits; der Newxpath-Zweig zieht jetzt nach, sodass eine leere Sequenz wieder ein stilles No-Op ist (#691).
  • cgo-Brücke XML-zu-Lua robuster: binärsichere Strings und typisierte Key/Value-Helfer.
    Zwei zusammengehörige Änderungen in splib. (1) pushString nutzt jetzt lua_pushlstring mit expliziter Länge, sodass eingebettete NUL-Bytes erhalten bleiben; lua_pushstring hätte am ersten \0 stillschweigend abgeschnitten, was XML-CDATA oder binäre Attributwerte beschädigen konnte. Der C-seitige malloc/free-Umweg über C.CString entfällt — Lua kopiert die Bytes intern, der Go-String kann direkt übergeben werden. (2) Der any-typisierte Helfer addKeyValueToTable, der seine Argumente in Interfaces boxte und bei unerwartetem Typ panic warf, wird durch drei typisierte Helfer ersetzt (addStringValueToTable, addIntValueToTable, addBoolValueToTable); alle Aufrufstellen in Streaming-Parser, Tree-Renderer und CSS-zu-Lua-Renderer wählen die passende Variante statisch. Kein für Anwender sichtbares Verhalten geändert.

5.5.20 (13.5.2026)

  • splib: lua_checkstack vor jedem Push der XML-Daten nach Lua aufrufen.
    Die Streaming-Brücke XML-zu-Lua (für Layout- und Datendateien, inkl. xi:include-Auflösung) und der rekursive Tree-Renderer pushten Werte auf den Lua-Stack, ohne je lua_checkstack aufzurufen. Lua garantiert nur LUA_MINSTACK (20) freie Slots; jeder weitere Push ohne explizite Reservierung ist undefiniertes Verhalten. Bei tief verschachtelten oder großen Dokumenten konnte sich das als nicht-deterministische STATUS_HEAP_CORRUPTION- / STATUS_BAD_STACK-Crashes unter Windows äußern (Issue #691). Die Brücke reserviert jetzt vor der Document-Tabelle und in jeder Token-Iteration ausreichend Stack-Platz; der Tree-Renderer reserviert Platz in RenderToLua, in pushElement und um jeden Kind-Push.

5.5.19 (11.5.2026)

  • Falsche Position von Tablerules in gestretchten vboxes bei tablerulefix=yes behoben.
    tablerulefix="yes" sammelt Linien-Whatsits beim Page-Shipout und gibt sie an absoluten (curx, cury)-Positionen wieder aus. Beim Cursor-Update für Glue-Knoten wurde nur die natürliche Breite verwendet, die effektive Breite nach Stretch/Shrink der umgebenden Box wurde ignoriert. Dadurch landeten Linien, die in einer vlist hinter gestretchter Glue standen, zu hoch. Die effektive Glue-Breite wird jetzt aus glue_sign, glue_set und glue_order des Parent-Boxes berechnet, bevor der Cursor weiterläuft.
  • lxpath: $a*$b wurde fälschlich als Wildcard-QName geparst.
    Der QName-Scanner von lxpath akzeptierte * als reguläres Namenszeichen, sodass Ausdrücke wie $a*$b als einzelner QName verschluckt statt als Multiplikation geparst wurden. * wird jetzt nur noch am Anfang eines QName oder direkt nach dem Namespace-Doppelpunkt akzeptiert, wo es als legitime Wildcard steht.
  • Crashes im Legacy-XPath-Parser bei fehlenden Attributen/Elementen/Variablen behoben.
    Issue #691 meldete zwei Crashes im Legacy-XPath-Parser bei Ausdrücken auf ungebundene Werte: Arithmetik mit nil in eval_addition (über SetVariable/select) und ein Vergleich mit nil in eval_comparison (über Switch/Case). get_argument_number behandelt jetzt den nilmarker-Sentinel wie ein echtes nil, sodass der bestehende „Evaluating to 0"-Fallback greift, und tex.sp wird in pcall gewickelt, um bei von LuaTeX abgelehnten Eingaben auf 0 zurückzufallen. eval_comparison hat einen zusätzlichen Guard nach tonumber, der die nilmarker-Konvention spiegelt: nil verglichen mit irgendetwas ist false, außer != ist true. lxpath bleibt der empfohlene Parser; dies repariert nur den Legacy-Fallback.

5.5.18 (9.5.2026)

  • Lua-Stack-Overflow und massiven Slowdown durch Origin-Referenzen auf Tr/Tablehead/Tablefoot behoben.
    Tr, Tablehead und Tablefoot legten ihre layoutxml und dataxml seit 5.5.10 (Commit ea433dc7, für das neue eval-on-split) direkt auf der Zeilen-Wert-Tabelle ab. Wenn ein SetVariable eine Variable überschrieb, die eine solche Struktur enthielt, lief flush_table rekursiv durch den gesamten Layout- und Daten-XML-Baum. Bei tief geschachtelten Daten überlief der Lua-Stack, bei flacheren Daten brach die Performance dramatisch ein (120s → 1000s in einem Bericht). Die Referenzen werden jetzt in einer schwach referenzierten Origin-Map gehalten, sodass die Wert-Tabellen sauber bleiben und flush_table sie nicht mehr verfolgt (#690).

5.5.17 (7.5.2026)

  • Crash bei sp –help / –version und bei frühen Startup-Fehlern behoben.
    sp --help und sp --version liefen mit einem Nil-Pointer-Crash auf einen Absturz, weil der Help-Pfad exitProgram aufrief, bevor die Konfiguration geladen wurde — exitProgram ruft seinerseits showDuration auf, das eine Option aus der noch nicht initialisierten Konfiguration liest. Derselbe Crash konnte die eigentliche Fehlermeldung bei frühen Startup-Fehlern verschlucken (z. B. wenn unter Windows die mitgelieferte sdluatex-Binary nicht ausführbar ist). Der Help-Pfad beendet jetzt direkt, und ConfigData.String ist gegen einen Nil-Receiver abgesichert (#689).

5.5.16 (5.5.2026)

  • Platzhalterbilder über placeholder://-URL.
    Mit file="placeholder://WxH" auf Image wird zur Laufzeit ein graues Rechteck mit Diagonalkreuz in der natürlichen Größe W × H bp erzeugt — praktisch für die Layoutentwicklung, wenn die finalen Bilder noch nicht vorliegen. Skalierung und Seitenverhältnis funktionieren wie bei einer regulären Bilddatei.
  • Absolute Positionierung von Objekten in Gruppen behoben.
    PlaceObject mit absoluten column/row-Angaben innerhalb einer Group landete immer in der oberen linken Ecke der Gruppe statt an den angegebenen Koordinaten. Im Gruppen-Pfad wurden die falschen Felder aus der Parameter-Tabelle gelesen.
  • background-text in Tabellenzellen wieder funktionsfähig.
    background-text an einem Td brach den Lauf seit dem Lua-Modularisierungs-Refactor in 5.5.x mit einem Lua-Fehler ab. Drei Bugs sind behoben: eine falsche Aufrufsignatur für mknodelist, ein fälschliches %d für einen Float-Wert im Format-String und die Geometrie des Wasserzeichens (die rotierte Bounding-Box ist asymmetrisch um den Drehpunkt, Descender bei Glyphen wie ( ) g y wurden ignoriert). Bestehende Wasserzeichen können leicht versetzt erscheinen, weil sie jetzt korrekt zentriert werden.

5.5.15 (4.5.2026)

  • Falsche Schrift in langen Dokumenten mit Schriftwechsel behoben.
    In Dokumenten, die innerhalb eines Absatzes die Schrift wechseln — etwa einem nicht-lateinischen Fließtext mit lateinischen Vers- oder Fußnotenzahlen — konnte Text in späteren Output-Blöcken nach einem Spalten- oder Seitenumbruch in der falschen Schrift gesetzt werden, sodass Zeichen ersetzt wurden oder ganz von der Seite verschwanden. Eine interne Schrift-Status-Variable lief zwischen unbeteiligten Teilen des Layouts aus; beide Stellen, an denen das auftrat, sind jetzt korrekt gekapselt.

5.5.14 (3.5.2026)

  • Crash und übermäßige Warnungen beim Satz komplexer Schriftsysteme behoben.
    Indexierungs-Crash in hbglyphlist vermieden, wenn ein backgemappter Codepoint nicht in der characters-Tabelle der Schrift vorhanden ist (z.B. ausgelöst durch Khmer-Subscript-Konsonantenstapel). HarfBuzz-Sentinel-Glyphen (Codepoint 0xFFFF mit x_advance=0), die beim komplexen Reordering entstehen, werden übersprungen. „Glyph is missing from the font"-Warnungen werden dedupliziert: Jede (Font, Codepoint)-Kombination wird nur beim ersten Auftreten gemeldet, am Laufende folgt eine Zusammenfassung mit der Häufigkeit.
  • sp-filter-Skripte laufen jetzt auf Lua 5.4.
    Die Lua-VM für sp filter-Skripte wurde von yuin/gopher-lua (Lua 5.1) auf speedata/go-lua (Lua 5.4) umgestellt — näher am LuaTeX-Stack und mit konsolidiertem Lua-Tooling. Enthält ein neues, hauseigenes luahttp-Modul als Ersatz für cjoudrey/gluahttp.

5.5.13 (27.4.2026)

  • Publishing API v1.
    Neue Server-API Version 1 mit verbesserten Endpunkten für Publishing-Läufe, Statusabfragen und PDF-Abruf.
  • Fortschritt anzeigen mit sp –progress.
    Neue Kommandozeilenoption --progress, die den Satzfortschritt während eines Publishing-Laufs anzeigt.

5.5.12 (27.4.2026)

  • Aktualisiere auf LuaTeX Version 1.24.0.
  • Unterstützung für variable Schriftarten.
    Variable Fonts laden und Designachsen (Gewicht, Breite, optische Größe usw.) per Harfbuzz-Subsetting auf feste Werte setzen. Neue Attribute weight und width sowie das Kind-Element Axis bei LoadFontfile.
  • Speicherverbrauch bei großen Daten-XML-Dateien um ca. 50% reduziert.
    Der Streaming-SAX-Parser erzeugt Lua-Tabellen direkt ohne Go-Zwischenbaum, lässt im Datenmodus ungenutzte Metadaten-Felder weg, behandelt ignoreeol bereits beim Parsen und nutzt korrekte createTable-Größenhinweise, um wiederholte Hash-Tabellen-Resizes zu vermeiden.
  • XPath 3.1 Arrays, Maps, Lookup-Operator und String-Verkettung.
    Arrays ([1,2,3], array { 1 to 3 }), Maps (map { 'key': value }), der Lookup-Operator (?) und der ||-Operator zur String-Verkettung wurden in XPath hinzugefügt. Enthält array:- und map:-Funktionsbibliotheken (size, get, put, append, keys, contains, merge, usw.).

5.5.11 (23.4.2026)

  • fn:serialize() in XPath implementiert.
    Die XPath-Funktion fn:serialize() wandelt ein Node-Set in seine XML-Stringdarstellung um.
  • HTML/CSS-Verarbeitung von Inline-Styles korrigiert.
    Fehlerhaftes Quoting von HTML-Attributen bei der Rekonstruktion behoben (Luas %q erzeugte Backslashes vor Zeilenumbrüchen) und Elementerkennung in Copy-of und SetVariable korrigiert.

5.5.10 (22.4.2026)

  • colspan="*" in Tabellenzellen erlauben.
    Mit colspan="*" auf einem Td-Element werden automatisch alle verbleibenden Spalten ab der aktuellen Position überdeckt, ohne die Spaltenanzahl fest angeben zu müssen.
  • Entferne Erzeugung der Debian-Pakete.
    Es ist zu viel Arbeit, die Debian-Pakete aktuell zu halten.
  • Abstand bei Listenmarkern per CSS einstellbar.
    Der Abstand zwischen Listenmarker und Text ist nun per li::marker { padding-right: … } in CSS konfigurierbar. Der Standardwert bleibt 5pt.
  • Alternierende Zeilenfarben starten auf jeder Seite neu.
    Hintergrundfarben in Tabellenzellen werden nun erst nach dem Seitenumbruch gesetzt. Das neue Tabellen-Attribut eval-on-split ermöglicht es, alternierende Zeilenfarben auf jeder neuen Seite korrekt neu zu beginnen.
  • Haarlinien-Artefakte zwischen Tabellenzellen behoben.
    Wenn alle Zellen einer Zeile dieselbe Hintergrundfarbe haben, wird der Hintergrund nun als einzelnes Rechteck gezeichnet. Das beseitigt Haarlinien-Artefakte zwischen benachbarten Zellen in einigen PDF-Betrachtern.
  • Leere Zeilen zwischen HTML-Blockelementen behoben.
    Leerraum zwischen HTML-Blockelementen (z.B. zwischen zwei Absätzen) wird nicht mehr als leere Zeile dargestellt.
  • Leerzeichendarstellung in einigen Schriften korrigiert.
    Die Font-Backmap bevorzugt jetzt druckbare Zeichen, wenn mehrere Codepoints dieselbe Glyph-ID haben. Das korrigiert fehlerhafte Leerzeichendarstellung in einigen Schriften wie HelveticaNeue-Bold.
  • Bessere Fehlerbehandlung bei undefinierten Farben.
    Das Layout zeigt nun eine Warnung statt mit einem Lua-Fehler abzubrechen, wenn Probleme wie undefinierte Farben auftreten.
  • Sicherheit: Go-Abhängigkeiten aktualisiert.
    Aktualisierung von golang.org/x/net und golang.org/x/image zur Behebung von CVEs (XSS, HTTP-Proxy-Bypass, OOM durch manipuliertes TIFF).
  • Windows-DLL-Crash beim Aufräumen behoben.
    Umgehung eines Go-Runtime-Problems, bei dem das Aufräumen der DLL unter Windows eine Zugriffsverletzung (0xc0000005) verursachte, obwohl die PDF-Erzeugung erfolgreich war.

5.5.9 (20.4.2026)

  • Dokumentation: Umstellung auf Hugo, Struktur neu organisiert.
  • Erlaube Textblock in Td für bessere Kontrolle bei Rotation.
  • Unterstützung für CSS ::marker.
    Das CSS-Pseudoelement ::marker wird nun für die Listengestaltung unterstützt, einschließlich eigener Inhalte und Farben.
  • Bilder werden bei trace objects=“yes” gezeichnet.
  • Fehlerkorrektur HTML Rahmen Breitenberechnung.

5.5.8 (14.4.2026)

  • Berücksichtige Box-Höhe in Zeilen (Zeilenhöhe).
  • Box-Rahmen.
  • Vertikale Ausrichtung für Box im Absatzmodus.
  • Bilder: vertikale Ausrichtung im Absatz.
  • Action-Befehl entfernt.
  • Suppressinfo für Metadaten.
  • Prüfsummenunterschied in sp compare anzeigen.
  • Neues Attribut match bei Record.

5.5.7 (2.4.2026)

  • Fehlerkorrektur Tabellenstauch-Algorithmus.

5.5.6 (2.4.2026)

  • Fehlerkorrektur PDF copy/paste hyphen minus.

5.5.5 (1.4.2026)

  • Korrigiere minimale Breite in Tabellen mit colspan und rowspan.
  • Korrigiere CSS Vererbung bei td/tr.

5.5.4 (1.4.2026)

  • HTML-Tabellen: beachte rowspan und colspan. Verhindere rowspan am Ende der Seite.

5.5.3 (9.3.2026)

  • Servermodus: Endpunkt zum Abrufen der publisher-protocol.xml hinzugefügt.

5.5.2 (6.3.2026)

  • Viele Rechtschreibkorrekturen in der Dokumentation.
  • Barrierefreiheit für Output/Text (#614).
  • PDF/UA Strukturbaum.
  • Korrektur PDF/UA und InsertPages / SavePages (#613).
  • Suchpfad hinzufügen, Dateien nicht duplizieren.
  • Bessere Fehlermeldungen für Funktionsaufrufe und alten XPath-Parser.
  • Fehlerkorrektur letter-spacing und Silbentrennung.
  • Filter: Klassenpfad für Saxon korrekt setzen, einschließlich aller benötigten JAR-Dateien.

5.5.1 (2.3.2026)

  • Fehlerkorrektur für Bildeinbindung (Transparenz), Attribut Kontext und Creator Version.

5.5.0 (26.2.2026)

  • Fehlerkorrektur letter-spacing in Tabellen.

5.4

5.4.3 (4.3.2026)

  • Fehlerkorrektur letter-spacing und Silbentrennung.
  • Bessere Fehlermeldungen für Funktionsaufrufe und alten XPath-Parser.
  • Filter: Klassenpfad für Saxon korrekt setzen, einschließlich aller benötigten JAR-Dateien.

5.4.2 (27.2.2026)

  • Fehlerkorrektur Attribut Kontext.
  • Fehlerkorrektur Bildeinbindung (Transparenz).
  • Fehlerkorrektur Creator/Producer Version in PDF-Metadaten.

5.4.1 (26.2.2026)

  • Fehlerkorrektur letter-spacing in Tabellen.

5.4.0 (24.2.2026)

  • Veröffentliche stabile Version 5.4.

5.3

5.3.24 (23.2.2026)

  • Neuer Befehl Section, um Layoutdateien zu organisieren (ohne Auswirkung auf Formatierung).

5.3.23 (19.2.2026)

  • Fehlerkorrektur: ForAll behält Kontext.

5.3.22 (18.2.2026)

  • Massive Geschwindigkeitsverbesserungen.
  • Optischer Randausgleich Wert ist 1/1000 em.

5.3.21 (5.2.2026)

  • Fehlerkorrektur: Silbentrennung funktioniert jetzt korrekt mit letter-spacing.

5.3.20 (29.1.2026)

  • Fehlerkorrektur: Berechnung der verbleibenden Höhe in PlaceObject / absolute Positionierung.

5.3.19 (29.1.2026)

  • Korrigiere Programmabbruch bei sp –help / –version.

5.3.18 (26.1.2026)

  • Füge letter-spacing Attribut zu DefineTextformat hinzu (in 1/1000 em).
  • Korrigiere Endlosschleife in post_linebreak.

5.3.17 (23.1.2026)

  • Korrigiere Endlosschleife in HTML-Tabellen.
  • Verbessere das Beenden von Kindprozessen in sp.

5.3.16 (20.1.2026)

  • HTML-Tabellen mit nur Header oder Footer (leerer Body) werden jetzt korrekt ausgegeben.

5.3.15 (19.1.2026)

  • Fehlerkorrektur für leere HTML-Tabellen.
  • Implementiere Until für den neuen XPath-Parser.
  • HTML-Verbesserungen (einschließlich Dokumentation).

5.3.14 (15.1.2026)

  • HTML kann nun auf mehrere Seiten umbrechen.

5.3.13 (14.1.2026)

  • Löse Endlosschleife in HTML-Tabellen.

5.3.12 (5.12.2025)

  • Füge globale html-Option im Options-Befehl und –option html=off Kommandozeilen-Flag hinzu, um HTML-Parsing zu steuern.

5.3.11 (4.12.2025)

  • Beschleunigt den Schriftsatz mit frühen Abbrüchen, gecachten Zugriffen und schlankerer Attributbehandlung in mknodes.
  • Modularisiert publisher.lua in die Module color, links und metadata, um die Datei zu verkleinern.
  • Aktualisiert qrencode auf die aktuelle Upstream-Version.

5.3.10 (30.11.2025)

  • Behebt Verlangsamung im CSS/HTML-Rendering.

5.3.9 (25.11.2025)

  • Ermögliche Textformaten, für HTML-Inhalte die in CSS definierte Schriftgröße zu verwenden.
  • Korrigiere die Verarbeitung relativer (em) Schriftgrößen auf Basis der aktuellen Schriftgröße.
  • Korrigiere die Darstellung von HTML-Rahmen im normalen Absatzmodus.
  • Aktualisiere auf die neuste Saxon HE Version.
  • Lösche Rust Quellcode.

5.3.8 (21.11.2025)

  • Korrigiere HTML Border und currentcolor in Tabellenlinien.

5.3.7 (19.11.2025)

  • HTML Border überarbeitet.
  • Styles in HTML-Tabellen.

5.3.6 (11.11.2025)

  • Fehlerkorrektur: UL-Zähler zurücksetzen.

5.3.5 (10.11.2025)

  • Korrigiere @font-face in CSS (fataler Absturz).

5.3.4 (10.11.2025)

  • HTML: Unterstützung für weitere Nummerierungsarten in Listen hinzugefügt (lower-alpha, upper-alpha usw.).
  • Setze Exit-Code ungleich Null, wenn Fehler aufgetreten sind.
  • Compare-Tool: Überarbeitung für mehr Stabilität und verbesserten HTML-Report (Prüfsummen, Build-Fehler, Vorschaubilder, Sortierung).
  • HTML-zu-Lua-Rendering-Pipeline überarbeitet für strukturierte Ausgabe und klarere Trennung von CSS-Berechnung.

5.3.3 (4.11.2025)

  • Führe alte Syntax mit geschweiften Klammern wieder ein bei Value/select und dem alten XPath parser (#680) .
  • Entferne die Rust-Bibliothek aus dem Build-Prozess (#678).

5.3.2 (1.11.2025)

  • Korrigiere Einrückung nach einem br.

5.3.1 (21.10.2025)

  • Korrigiere Windows/Rust laden.

5.3.0 (21.10.2025)

  • Alternative Rust-Bibliothek für dynamische Bindung.

5.2

5.2.0 (14.10.2025)

  • Veröffentliche Version 5.2.

5.1

5.1.29 (14.10.2025)

  • Go-XML-Parser tlw. neu geschrieben.

5.1.28 (5.10.2025)

  • Korrigiere PDF-Metadaten / ISO-Datumsformat.

5.1.27 (4.10.2025)

  • Fehlerkorrektur: XPath-Funktion doc() gibt den Wurzelknoten zurück statt des Dokumentknotens.

5.1.26 (23.9.2025)

  • Neue XPath-Funktion translate().
  • Dokumentation: Verwendung von px (Pixel) präzisiert.
  • tabular.lua in ein Modul umgewandelt (interne Änderung).
  • Absicherung für fehlenden Dateinamen in AttachFile.
  • Neue XPath-Funktion distinct-values().

5.1.25 (15.9.2025)

  • Publisher führt mehrere Läufe nun auch bei Fehlern aus.
  • Unterstützung für japanischen Schriftsatz.
  • Fehlerbehebung beim Fallback mit mehrzeichigen Sequenzen.

5.1.24 (15.9.2025)

  • Warnung bei leerem Hyperlink.
  • Verbesserte Fehlermeldung bei leerer Gruppe/Trace.
  • Verbesserte Fehlermeldungen bei doppelten Dateien und Fehlern beim Schreiben der Aux-Datei.
  • XPath: Neu: format-number() und round-half-to-even().
  • Neuer Attributtyp „rawstring“ ohne {}-Maskierung.

5.1.23 (10.9.2025)

  • Optionaler resizehandler für DPI-Einstellung (Konfigurationsdatei).
  • CSS font-family darf nun mehrere Einträge haben.

5.1.22 (25.8.2025)

  • Mehr HTML/CSS Features (Pseudoklassen, Padding in Tabellen und Rahmen).

5.1.21 (23.8.2025)

  • NoBreak mit Hintergrundfarbe.
  • NoBreak in Tabellenzellen (#670).
  • Fehlerkorrektur Bildkonvertierung mit gleichem Dateinamen und unterschiedlicher Dateiendung.
  • Erweitere grundlegende HTML Eigenschaften (Eigene Schriftarten, Rahmen, rem-Größen).

5.1.20 (19.8.2025)

  • Setze trapped auf false im PDF für Preflight.
  • Schutzmaßnahmen gegen Go/Lua Thread-Fehler.

5.1.19 (18.8.2025)

  • Erlaube Absatzform in Gruppen.
  • Fehlerkorrektur: Datei löscht sich selbst beim kopieren (#668).
  • PDF Producer Eintrag in Metadaten.

5.1.18 (1.8.2025)

  • Fehlerkorrektur: PlaceObject/rotate und vreference.

5.1.17 (30.7.2025)

  • Fehlerkorrektur lxpath Modus und neuer XPath Parser.
  • HTML Modus neu implementiert.
  • Log-Level im Server-Modus.

5.1.16 (15.7.2025)

  • Korrigiere sd:format-number (#664).

5.1.15 (14.7.2025)

  • Korrekte XML-Kodierung von Metadaten bei ZUGFeRD Anhängen.

5.1.14 (10.7.2025)

  • Fehlerkorrektur HTML und großgeschriebene Tags.

5.1.13 (3.7.2025)

  • Ignoriere DEL (Dezimal 127) Zeichen in der Eingabe (#663).

5.1.12 (25.6.2025)

  • Korrigiere (XPath)-Boolean-Wert von Attributen.

5.1.11 (18.6.2025)

  • Kein fataler Fehler wenn ein Http-Bild fehlt.

5.1.10 (6.6.2025)

  • Bessere Log-Meldungen.
  • Neue XPath-Funktion sd:symbol() um eine Glyph-ID einzugeben.
  • Lösche alte XPath-Dokumentation.

5.1.9 (23.5.2025)

  • Neue Option ‘addlocalpath’ in der Konfigurationsdatei, damit das Arbeitsverzeichnis nicht rekursiv durchsucht wird.
  • Neue Option mpcolorwarning um die Farb-Warnungen von MetaPost zu zeigen (Voreinstellung ist ’true’) .

5.1.8 (22.5.2025)

  • Fehlerkorrektur Layoutfunktion sd:current-framenumber() und neuer XPath parser.

5.1.7 (18.5.2025)

  • cache=none funktioniert auch bei SVG Konvertierung (#622).

5.1.6 (15.5.2025)

  • Neuer Befehl sp checkversion, um auf Aktualisierungen zu prüfen (#660).

5.1.5 (5.5.2025)

  • Aktualisiere auf neue LuaTeX binaries (1.22.0).
  • Ändere Systemfonts-Verzeichnissuche für Windows.

5.1.4 (5.5.2025)

  • Fehlerkorrektur: Tabellenumbruch in AtPageShipout (#659).
  • Absolute Positionierung innerhalb einer Gruppe.

5.1.3 (7.4.2025)

  • Korrigiere Leerzeichen im imagehandler.

5.1.2 (7.4.2025)

  • Ändere die Breite und Höhe für vertikale Linien. Sollte keine Auswirkungen auf das Erscheinungsbild haben.

5.1.1 (7.4.2025)

  • Lua Präprozessor: runtime.execute liefert den Erfolg bzw. den Exit-Code zurück.

5.1.0 (4.4.2025)

  • Setze Hintergrundfarbe für jede Seite.

5.0

5.0.2 (4.4.2025)

  • Fehlerkorrektur: Dateiname image hander bei automatischer Umwandlung.

5.0.1 (1.4.2025)

  • Fehlerkorrektur: Rundungsfehler in manchen Rasterkonfigurationen.

5.0.0 (11.3.2025)

  • Veröffentliche Version 5.0.

Inhalt