[Trennmuster] Frage zu autotype vs. ligtype
Keno Wehr
wehr at abgol.de
So Jun 16 23:16:27 CEST 2024
Am 10.06.24 um 23:44 schrieb Florian Kohrt:
> ich bin kürzlich auf die LaTeX-Pakete autotype und ligtype gestoßen,
> nachdem ich längere Zeit selnolig verwendet habe. Nun frage ich mich,
> was so Erfahrungen oder Meinungen sind zur Unterdrückung falscher
> Ligaturen mittels der Pakete autotype und ligtype: Ist ein Ansatz mit
> seinen Regeln/Algorithmen „besser“? Wäre auch nicht schlimm, wenn die
> Antwort durch die Entwicklung an autotype gefärbt ist ;)
>
> Der Dokumentation und meinem kurzen Test entnehme ich, dass ligtype
> das Kerning anpasst, während autotype das nicht tut. Gibt es darüber
> hinaus Unterschiede darin, wie vollständig oder akkurat jeweils die
> eingebauten Regeln sind?
Lieber Florian,
die Frage ist recht allgemein, aber berechtigt und bisher zu wenig
untersucht worden. Ich habe nun Vergleiche angestellt und kann einiges
dazu sagen. Welches Paket „besser“ ist, mag dann jeder selbst entscheiden.
Was die Auswahl der zu setzenden und zu unterdrückenden Ligaturen
betrifft, reden wir über einen Vergleich von autotype mit selnolig, da
ligtype die Regeln von selnolig übernimmt.
autotype unterdrückt Ligaturen an allen Fugen, die gleichzeitig
Trennstellen sind, also nach Vorsilben (Auf|lage), zwischen den
Bestandteilen eines Kompositums (Tarif|information) und vor Nachsilben,
vor denen eine Trennstelle vorliegt (Häuf|lein, kopf|los), aber nicht
bei Nachsilben, die mit Vokalen beginnen (affig, grafisch).
Bei selnolig sind die getroffenen Entscheidungen zum Ligatursatz
ausführlich in der Anleitung dokumentiert. Wenn man die dortigen
Ausführungen zusammenfasst, kann man sagen, dass selnolig Ligaturen
aufbricht, die an Morphemgrenzen liegen, mit folgenden drei Ausnahmen:
1. Das zweite Morphem ist eine Nachsilbe, die mit einem Vokal beginnt
(affig). 2. Das zweite Morphem besteht nur aus einem Buchstaben (Aufl.,
zu fünft). 3. Das zweite Morphem ist das Flexionsmorphem „te“ in
Vergangenheitsformen und Partizipien (raffte, gestreifte).
In den meisten Fällen führen beide Philosophien zum gleichen Ergebnis,
aber es gibt die folgenden Ausnahmen, bei denen selnolig die Ligatur
aufbricht und autotype nicht:
1. Vergangenheitsformen und Partizipien von Verben, deren Stamm auf f
endet: ich kaufte, du rafftest, gestreifte (kein Ligaturaufbruch bei
beiden Paketen jedoch bei gekauft, gerafft, gestreift).
2. Ordnungszahlen: der fünfte, der elfte, der zwölfte (kein
Ligaturaufbruch bei beiden Paketen jedoch bei fünft, elft und zwölft).
3. Grundwort mit ausgefallenem e in der Endsilbe vor einem Suffix, das
mit einem Vokal beginnt: Verzweiflung, Zweifler, schweflig, knifflig.
4. erste Person Singular von Verben auf eln: ich schaufle, ich zweifle,
ich löffle.
Außerdem gibt es noch einen wichtigen prinzipiellen Unterschied:
selnolig bricht an den beschriebenen Stellen nur f-Ligaturen auf,
autotype prinzipiell alle. Wenn man
\setmainfont{Libertinus Serif}[Ligatures=Historic]
wählt, erhält man bei dem Wort „Tagestourist“ zwei st-Ligaturen, wobei
autotype die erste aufbricht, selnolig nicht. Die Nicht-f-Ligaturen sind
insbesondere bei gebrochenen Schriften von Bedeutung (z. B. ch, ck, tz).
Die konkreten Muster zur Umsetzung des Ligaturaufbruchs werden im Falle
von autotype auf der Grundlage der Wortliste des deutschsprachigen
Trennmusterprojekts (https://repo.or.cz/w/wortliste.git) erstellt, die
handgepflegt wird und ca. 600000 Wörter mit Markierung der Trennstellen
und Wortfugen enthält. Die Wortliste dient in erster Linie der
Erstellung der Silbentrennmuster, der Ligaturaufbruch ist ein
Nebenprodukt. Aufgrund des Umfangs der Wortliste ist die
Wahrscheinlichkeit hoch, dass auch ein Wort, das in der Liste nicht
enthalten ist, von den Ligaturaufbruchmustern korrekt behandelt wird,
aber natürlich wird es exotische Komposita geben, die mit den Mustern
nicht abgedeckt werden können. Die selnolig-Muster sind meines Wissens
handgeschrieben. Gängige Wörter werden damit sicherlich gut abgedeckt,
aber auch hier gibt es seltenere Wörter, die bei der Entwicklung nicht
berücksichtigt wurden (Beispiele nenne ich unten).
Was das Kerning anbelangt, ist autotype noch nicht ausgereift. Zur Zeit
wird an allen potentiellen Ligaturaufbruchstellen ein \kern0pt
eingefügt, selbst wenn die betreffende Schrift gar keine entsprechende
Ligatur bereitstellt. Das führt dazu, dass an solchen Stellen ein
etwaiges Kerning des Fonts verhindert wird. Beispielsweise hat Latin
Modern Regular in 10pt für das Paar „oe“ ein Kerning von 0,28pt, das mit
autotype an Wortfugen wie „Autoerfinder“ verloren geht (mit selnolig und
ligtype nicht). Dies ist ein klarer Bug, den ich noch beheben will.
Das Kerning-Problem betrifft auch Stellen, an denen eine vorhandene
Ligatur aufgebrochen wird. Beispielsweise definiert die Schrift TeX Gyre
Pagella sowohl eine Ligatur als auch ein Kerning für das Paar fl. Beim
Ligaturaufbruch mit autotype oder selnolig (z. B. Auflage) wird dieses
Kerning jedoch nicht durchgeführt, mit ligtype schon. Ich nehme an, dass
autotype hier noch verbessert werden kann. Eine offene Frage ist noch,
wie mit Schriften umgegangen werden soll, die für Fälle wie fi oder fl
kein eigenes Kerning haben. In der Regel stehen die Buchstaben nach dem
Ligaturaufbruch dann zu eng zusammen. Die Nutzerschnittstelle mit der
maximal denkbaren Flexibilität (wählbares Kerning in Abhängigkeit von
Schriftart, Schriftgröße und Buchstabenpaar) wäre für die meisten Nutzer
sicherlich zu unhandlich. Zu überlegen wäre, ob in solchen Fällen ein
pauschales Kerning durchgeführt werden sollte wie die 0,03em mit dem
babel-Shorthand "|.
Nach der Darlegung der prinzipiellen Unterschiede sollen noch einige
Einzelbeobachtungen zum Vergleich der drei Pakete vorgestellt werden,
die ich auf der Grundlage der Wortliste des deutschsprachigen
Trennmusterprojekts gemacht habe. Der Wettbewerb ist hier natürlich
unfair, da autotype auf dieser Liste beruht und somit auch bei Wörtern
daraus keine Fehler macht. Aus arbeitsökonomischen Gründen habe ich mich
auf die Anfangsbuchstaben A-D beschränkt. Der Test wurde mit
babel-ngerman und den Silbentrennmustern aus dem Paket hyph-utf8, die
zuletzt 2021 aktualisiert wurden, durchgeführt.
selnolig und ligtype lösen die fl-Ligatur in „Dickkopfleguan“ und
„Dörfli“ nicht auf.
ligtype löst die fl-Ligatur in „Dampflanze“ nicht auf. Das ist äußerst
merkwürdig, da ligtype eigentlich die Regeln von selnolig übernimmt, das
dieses Wort richtig behandelt.
Fälschlich aufgelöst werden von selnolig und ligtype folgende Ligaturen:
Äff|innen, Arsenf|lasche, betrof|fenster (dieses Wort ist anfechtbar),
Börsenf|laute, Delf|ter.
Die Schrift „Linux Libertine O“ verfügt über eine fft-Ligatur. Mit
selnolig und ligtype bleibt diese in „abgeschlafft“ und „abgeschlaffte“
erhalten, was den oben zusammengefassten Regeln von selnolig entspricht.
In „Abgeschlafftheit“ wird die Ligatur hingegen vor dem „t“ getrennt,
was gegen die Regeln ist.
Der Algorithmus von selnolig hat in seltenen Fällen negative
Auswirkungen auf die Silbentrennung. Mit selnolig werden die Trennungen
„Affektepilepsi-en“, „Aftershaveloti-on“, „Akkreditiver-öffnung“,
„Angriffside-en“, „Bahner-öffnung“, „Begriffscha-os“,
„Bronzein-schrift“, „Bundesplatzer-öffnung“, „Dorfinformati-onen“,
„Dufter-gebnis“, „Dufter-lebnis“ ermöglicht, obwohl die Trennmuster sie
nicht enthalten, da diese Trennstellen ungünstig sind. Ein
gravierenderes Beispiel ist die Trennung „Abholauftra-gs“, die ebenfalls
von selnolig ermöglicht wird. Außerdem unterdrückt selnolig die
Trennstellen „Abstrahleffek-te“, „Ad-optivneffe“, „Ae-roflot“,
„Ammoni-akentgiftung“, „Co-laflasche“, obwohl sie in den Trennmustern
enthalten sind. Mit autotype und ligtype habe ich solche Probleme nicht
festgestellt.
Abschließend noch Hinweise für technisch Interessierte: Für den
Vergleich habe ich l3build-Testfälle (lvt-Dateien, siehe dazu das
Dokument „l3build.pdf“) für alle drei Ligaturaufbruchpakete geschrieben
und dann die geeignet bearbeiteten Ausgabedateien (tlg-Dateien) mit diff
verglichen. (Mit dem Paket nodetree müsste Ähnliches möglich sein.) Der
Eintrag für „Auflage“ in der tlg-Datei sieht folgendermaßen aus:
Mit autotype:
.\TU/lmr/m/n/10 A
.\kern-0.28 (font)
.\TU/lmr/m/n/10 u
.\TU/lmr/m/n/10 f
.\kern0.0
.\discretionary (penalty 50)
..< \TU/lmr/m/n/10 -
.\TU/lmr/m/n/10 l
.\TU/lmr/m/n/10 a
.\discretionary (penalty 50)
..< \TU/lmr/m/n/10 -
.\TU/lmr/m/n/10 g
.\TU/lmr/m/n/10 e
Mit selnolig:
.\TU/lmr/m/n/10 A
.\kern-0.28 (font)
.\TU/lmr/m/n/10 u
.\TU/lmr/m/n/10 f
.\discretionary (penalty 50)
..< \TU/lmr/m/n/10 -
.\whatsit123456=0
.\TU/lmr/m/n/10 l
.\TU/lmr/m/n/10 a
.\discretionary (penalty 50)
..< \TU/lmr/m/n/10 -
.\TU/lmr/m/n/10 g
.\TU/lmr/m/n/10 e
Mit ligtype:
.\TU/lmr/m/n/10 A
.\kern-0.28 (font)
.\TU/lmr/m/n/10 u
.\TU/lmr/m/n/10 f
.\whatsit289473=0
.\discretionary (penalty 50)
..< \kern0.0 (font)
..< \TU/lmr/m/n/10 -
..= \kern0.0 (font)
.\TU/lmr/m/n/10 l
.\TU/lmr/m/n/10 a
.\discretionary (penalty 50)
..< \TU/lmr/m/n/10 -
.\TU/lmr/m/n/10 g
.\TU/lmr/m/n/10 e
Schöne Grüße
Keno
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://listi.jpberlin.de/pipermail/trennmuster/attachments/20240616/aa0dc86e/attachment.htm>
Mehr Informationen über die Mailingliste Trennmuster