[Trennmuster] Callbacks
Stephan Hennig
sh-list at posteo.net
Do Okt 15 00:58:58 CEST 2020
Am 12.10.20 um 22:10 schrieb Keno Wehr:
> Am 01.10.20 um 02:38 schrieb Stephan Hennig:
>>
>> Ich dachte, luatexbase bzw. ltluatex würde die Callbacks exklusiv
>> reservieren (solange niemand dazuwischenfunkt) und dann verschiedenen
>> Interessenten geordneten Zugriff darauf gestattet. Ist das nicht so?
>> Ich habe das nicht mehr parat.
>
> Im Prinzip ja, aber bei exklusiven Callbacks wie „hyphenate“ und
> „ligaturing“ kann nur eine Funktion angewandt werden.
Das würde den Zweck der Callback-Behandlung in ltluatex aber ad absurdum
führen. Ein Vorteil gegenüber LuaTeX wäre dann ja nicht erkennbar.
> Ich habe das mit den Padrinoma-Paketen „pdnm_hyph-mark-by-color.sty“ und
> „pdnm_hyph-mark-by-glyph.sty“ ausprobiert, die beide den Callback
> „hyphenate“ brauchen. Man kann zwar beide Pakete laden, wirksam ist aber
> immer nur das zuerst geladene Paket.
> Wird „pdnm_hyph-mark-by-color.sty“ zuerst geladen, so werden die
> Buchstaben um die Trennstelle farbig markiert, wird
> „pdnm_hyph-mark-by-glyph.sty“ zuerst geladen, so wird an der Trennstelle
> ein Mittepunkt gesetzt. Beides gleichzeitig passiert nicht.
Nun sind die Beispiele auch nicht darauf ausgelegt, zusammen verwendet
zu werden. Warum es nicht funktioniert, kann ich auf die Schnelle aber
auch nicht sagen.
> Dass zwei konkurrierende Trennalgorithmen nicht gleichzeitig angewandt
> werden können, finde ich wenig überraschend, insbesondere wenn man sich
> vor Augen hält, dass beide zunächst den Standard-TeX-Trennalgorithmus
> aufrufen. Woher soll die Maschine wissen, wie beide Algorithmen zu
> kombinieren sind?
Ich kann das ohne weitere Untersuchung nicht sagen, ob der
implementierte Weg der einzig mögliche war. Es sind wie gesagt nur
Beispielanwendungen. Es wäre aber auch denkbar, den Callback dreimal zu
registrieren, einmal für lang.hyphenate() und danach zweimal für die
Markierungen. <URL:http://wiki.luatex.org/index.php/Callbacks> scheint
diese Erinnerung zu stützen.
Keno, könntest du Probleme mit dem Callback-Management auf der
entsprechenden Liste (lualatex) zur Sprache bringen?
> Ich meine, dass wir für das Gesamtprojekt zwei LaTeX-Pakete brauchen:
> eines für gewichtete Trennung und AR-Spezialtrennung (Callback
> „hyphenate“) und eines für Ligaturaufbruch und Lang-s-Ersetzung
> (Callback „ligaturing“).
> Beide Pakete haben spezifische Anforderungen an die Kombination der
> beiden Knotenlistenmanipulationen.
>
> Gewichtete Trennungen auf der Grundlage gewöhnlicher Trennmuster und
> Spezialtrennungen konkurrieren insofern nicht, als sie sich auf
> unterschiedliche Stellen im Wort beziehen; doch ist sicherzustellen,
> dass die durch den einen Algorithmus eingefügten Trennstellen das
> Einfügen durch den anderen Algorithmus nicht behindert. (Man beachte
> beispielsweise, dass „Abbauergebnis“ mit unseren Mustern
> „Ab-bau-ergeb-nis“ getrennt wird, „Abbau"-ergebnis“ mit expliziter
> Trennstelle hingegen das unerwünschte „Ab-bau-er-geb-nis“ ergibt).
Bei der Trennung von Wörtern mit Bindestrich sollten sowieso größere
hyphenmin-Werte verwendet werden.
> Zusätzlich ist bei gewichteter Trennung in „Kontrollücke“ die
> Spezialtrennung „Kontroll-lücke“ mit weniger Strafpunkten zu versehen
> als die Spezialtrennung „Kontrollük-ke“. Hier gibt es also
> Wechselwirkungen, die einen integrierten Ansatz nahelegen.
Ich werde hinterher testen, ob auch beide Trennungen gleichzeitig gehen. :-)
> Beim Lang-s muss sichergestellt werden, dass die Ersetzung vor dem
> Standardligierungsalgorithmus erfolgt, da ſ und s unterschiedliche
> Ligaturen bilden können. Wenn erst ein Algorithmus Bindehemmer einfügt
> und dann die TeX-Ligierung aufruft, und dann ein anderes Paket, das
> dummerweise zu spät geladen wurde, daherkommt und eine Lang-s-Ersetzung
> vornehmen will, ist es zu spät. In diesem Fall würden dann die
> ſ-Ligaturen nicht gesetzt werden, selbst wenn der Algorithmus noch zur
> Ausführung kommt. Umgekehrt das Gleiche: Wenn erst ein Paket eine
> Lang-s-Ersetzung vornimmt und dann die Ligierung aufruft, ist es für die
> ZWNJs zu spät.
Eine andere Idee, nur weil sie mir einfällt: Man könnte auch
verschiedene morphologische Trennmuster erstellen und dann mit dieser
Information die Entscheidung, ob eine Ligatur aufgebrochen werden muss
oder eine Lang-s-Ersetzung stattfinden muss, Lua-seitig vornehmen. Von
der Laufzeit her wäre vermutlich kein Gewinn zu erwarten ...
> Man kann zwar auch erst mal alles separat implementieren, aber dann ist
> es Essig mit der Kombinierbarkeit.
>
> Oder sehe ich das ganz falsch?
Wie gesagt, sollte es technisch möglich sein, Callbacks nacheinander für
verschiedene Dinge zu verwenden. Wenn du lieber schnelle Ergebnisse
bevorzugst, lege neuen Code dennoch bitte mit Blick auf eine mögliche
spätere Auftrennung an.
Viele Grüße,
Stephan Hennig
Mehr Informationen über die Mailingliste Trennmuster