[Trennmuster] Alternative Trennmusterverwendung mit LuaTeX

Guenter Milde milde at users.sf.net
Sa Sep 26 18:12:57 CEST 2020


Liebe Trennfreunde,

On 26.09.20, Stephan Hennig wrote:
> Am 25.09.20 um 22:52 schrieb Keno Wehr:

> > Bevor es sich lohnt, am konkreten Lua-Code weiterzuarbeiten, sollten wir 
> > einige grundsätzliche Überlegungen zur Umsetzung anstellen.

> Zunächst, mir schwebt ein Wegzug von GitHub vor.  Irgend welche Einwände
> gegen <URL:https://codeberg.org>?  Das scheint von einem in Deutschland
> eingetragenen Verein organisiert zu sein und basiert auf Gitea.  Womit,
> anders als bei repo.or.cz, ein Issue-Tracker zur Verfügung steht.

Nein. Andererseits bedeutet es noch ein Nutzerkonto mehr, falls man dort
mitarbeiten will. Das spräche für Leute aus der Trennmustergruppe für
repo.or.cz

> > Zu 1:
> > Zur Unterscheidung von Trennungen unterschiedlicher Güte sind 
> > verschiedene Vorgehensweisen denkbar.

...

> Das gleichzeitige Prüfen eines Wortes gegen verschiedene Muster sollte
> nicht allzu schwierig umzusetzen sein.

...

> > Ich vermute, dass drei verschiedene Güteebenen für Trennstellen in der 
> > Praxis für einen sehr ordentlichen Umbruch ausreichen

> Dazu braucht man ein aussagekräftiges Maß für die Ordentlichkeit eines
> Umbruchs.  Die Demerits von TeX taugen dazu leider wenig.  Penalties in
> die dritte Potenz erhoben (wenn ich mich recht erinnere) o.ä., sind
> alles andere als anschaulich und für feine Abwägungen ungeeignet.  Auch
> das ließe sich mit einer eigenen Lua-Implementierung des Absatzumbruchs
> beheben.  ...

Letztendlich läuft es auf ein Antesten der verschiedenen Ansätze hinaus.

> > Zu 2:
> > Die Spezialtrennungen sind im padrinoma-Projekt bereits implementiert. 
> > Dabei wird auf den bereits genannten LuaTeX-Callback „hyphenate“ 
> > zurückgegriffen, in den nach einer standardmäßigen Worttrennung die 
> > Spezialtrennungen eingefügt werden.
> > Wenn man das mit der Nr. 1 zusammensieht wird klar, dass beide Projekte 
> > gemeinsam implementiert werden müssen, da sie erstens den gleichen 
> > Callback benötigen (bei unabhängiger Implementierung würde vermutlich 
> > der eine Algorithmus den anderen überschreiben)

> LuaTeX stellt dafür keine Verwaltungsmechanismen zu Verfügung (Stand
> damals), aber das Paket luatexbase (o.ä.).

> > und zweitens bei Anwendung gewichteter Trennung diese
> > konsequenterweise auch auf die Spezialtrennungen ausgedehnt werden
> > sollte.

> Ich würde es zunächst etwas weniger ambitioniert angehen.  Wenn für alle
> Probleme isolierte, prototypische Lösungen bestehen, kann man darüber
> nachdenken, wie man die dann zusammenbringt.

Ja, ich denke die Projekte müssen kompatibel aber nicht unbedingt "aus einem
Guss" sein. Entscheidend ist eine "Aufrufkette" für die Hooks.


> > Eine Vereinigung von Spezial- und Normaltrennungen in einer Musterdatei 
> > würde wiederum eine neue Datenstruktur erfordern ist daher als zu 
> > aufwendig zu verwerfen.

> Sehe ich auch so.  Am Dateiformat der Muster würde ich nichts ändern.
> Da ein Mustersatz immer nur eine Ja/Nein-Aussage bezüglich einer
> Position innerhalb eines Wortes geben kann, läuft das dann auf einen
> Strauß von Mustern hinaus.  Aber das lässt sich gut durchschauen,
> dokumentieren und automatisieren.

Bei der Aufbereitung der Wortliste zu patgen-Eingabedateien mache ich gern
mit.

> > Mein Hauptanliegen zu dieser Thematik wäre ein Skript im 
> > Wortlistenrepositorium, das die Spezialtrennmuster erzeugen kann; soweit 
> > ich sehe, gibt es das bisher nicht.
> > Im padrinoma-Repositorium gibt es einen sechs Jahre alten 
> > Spezialtrennmustersatz: 
> > https://github.com/sh2d/padrinoma/blob/master/examples/patterns/hyph-de-1901-nonstd.pat.txt
> > Hast du zur Erzeugung ein Skript, Stephan?

Da müsste ein "Trennfilter" für sprachauszug.py leicht zu machen sein, wenn
klar ist was genau gewollt ist.

... 
... [Ligatur im eigenen Thread] 
...

> > Zu 4:
> > Für die Rund-s-Lang-s-Ersetzung können die vorhandenen Skripte bereits 
> > Pseudotrennmuster erstellen. Ohne diese getestet zu haben, ist mein 
> > Eindruck, dass die Skripte weitgehend ausgereift sind.

An den Lang-S Skripten habe ich lange nicht mehr gearbeitet. Nach all den
Änderungen an der Worlistenauszuichnung (Gesangstexttrennungen...) ist da
eine gründliche Durchsicht dran, bevor es wieder sinnvoll verwendet werden
kann.

> > Das padrinoma-Projekt kann zweifellos im Hinblick auf die Anwendung 
> > dieser Muster weiterentwickelt werden. Ein geeigneter LuaTeX-callback 
> > wäre noch zu suchen.

> Es gibt auch ein Beispiel im Zweig ex-long-s.  Die eigentlichen Muster
> scheinen allerdings nicht dabei zu sein.  Du könntest es mal mit den
> Mustern examples/patterns/hyph-de-1901-joint.pat.txt ausprobieren (wie
> benötigt umbenennen).  Es wird vorher geprüft, ob es sich bei einem
> fraglichen Glyphen tatsächlich um ein s handelt und nur dann ersetzt:

>         if n.char == 0x73 ...
>            n.char = 0x017f

> Daher könnte das klappen.

Eine Suche nach "s vor Trennstelle" reicht definitiv nicht (Gegenbeispiel
eſſen vs. Hausſchlüſſel). Auch "s vor [<=>]" reicht noch nicht, da es
reguläre Schluss-S-Fälle vor "-" und viele Ausnahmen und Sonderfälle
gibt. Mit den de-1901-Latf Mustern müsst dagegen die Ersetzung "alle
klein S zu Lang-S, außer am Schluss und vor Pseudo-Trennstelle" das
gewünschte Ergebnis zeigen.  Dazu gibt es die Python-Implementierung in
skripte/python/patuse/de_Latf_conversion.py.



> Ich hielte es für hilfreich, Muster für gewisse Anwendungsfälle nicht
> nur per Makefile erreichbar zu machen (ich sehe im Makefile ehrlich
> gesagt nicht mehr durch), sondern Shellskripte zu erstellen, welche die
> benötigten make-Kommandos konservieren/dokumentieren.

Das am Makefile Verbesserungsbedarf besteht, sehe ich auch so. Wer, wie,
wann das passiert sollte einen eigenen Thread wert sein.

Vielleicht wären ja Unter-Makefiles in den verschiedenen Unterverzeichnissen
sinnvoll. Andererseits haben wir da noch die halbfertige Baustelle der
Umsortierung der Skripte... :(

> Beziehungsweise, ist ein Makefile für unseren Anwendungsfall überhaupt
> sinnvoll?  Können damit denn irgend welche Zwischenschritte eingespart
> werden?

Zumindest bei "make all", wenn einige der Muster schon aktuell sind.


Günter



Mehr Informationen über die Mailingliste Trennmuster