<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <font face="monospace">Am 10.06.24 um 23:44 schrieb Florian Kohrt:<br>
    </font>
    <blockquote type="cite"
      cite="mid:8f4c4a60-8413-4b69-9115-87b9eb0c3077@anche.no"><font
        face="monospace">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 ;)
        <br>
      </font>
      <font face="monospace"><br>
        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?</font></blockquote>
    <font face="monospace"><br>
      Lieber Florian,<br>
      <br>
      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.<br>
      <br>
      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.<br>
      <br>
      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).<br>
      <br>
      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).<br>
      <br>
      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:<br>
      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).<br>
      2. Ordnungszahlen: der fünfte, der elfte, der zwölfte (kein
      Ligaturaufbruch bei beiden Paketen jedoch bei fünft, elft und
      zwölft).<br>
      3. Grundwort mit ausgefallenem e in der Endsilbe vor einem Suffix,
      das mit einem Vokal beginnt: Verzweiflung, Zweifler, schweflig,
      knifflig.<br>
      4. erste Person Singular von Verben auf eln: ich schaufle, ich
      zweifle, ich löffle.<br>
      <br>
      Außerdem gibt es noch einen wichtigen prinzipiellen Unterschied:
      selnolig bricht an den beschriebenen Stellen nur f-Ligaturen auf,
      autotype prinzipiell alle. Wenn man<br>
    </font>
    <blockquote><font face="monospace">\setmainfont{Libertinus
        Serif}[Ligatures=Historic]</font><br>
    </blockquote>
    <font face="monospace">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).<br>
      <br>
      Die konkreten Muster zur Umsetzung des Ligaturaufbruchs werden im
      Falle von autotype auf der Grundlage der Wortliste des
      deutschsprachigen Trennmusterprojekts
      (<a class="moz-txt-link-freetext" href="https://repo.or.cz/w/wortliste.git">https://repo.or.cz/w/wortliste.git</a>) 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).<br>
      <br>
      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.<br>
      <br>
      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 "|.<br>
      <br>
      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.<br>
      <br>
      selnolig und ligtype lösen die fl-Ligatur in „Dickkopfleguan“ und
      „Dörfli“ nicht auf.<br>
      <br>
      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.<br>
      <br>
      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.<br>
      <br>
      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.<br>
      <br>
      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.<br>
      <br>
      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:<br>
      <br>
      Mit autotype:<br>
      .\TU/lmr/m/n/10 A<br>
      .\kern-0.28 (font)<br>
      .\TU/lmr/m/n/10 u<br>
      .\TU/lmr/m/n/10 f<br>
      .\kern0.0<br>
      .\discretionary (penalty 50)<br>
      ..< \TU/lmr/m/n/10 -<br>
      .\TU/lmr/m/n/10 l<br>
      .\TU/lmr/m/n/10 a<br>
      .\discretionary (penalty 50)<br>
      ..< \TU/lmr/m/n/10 -<br>
      .\TU/lmr/m/n/10 g<br>
      .\TU/lmr/m/n/10 e<br>
      <br>
      Mit selnolig:<br>
      .\TU/lmr/m/n/10 A<br>
      .\kern-0.28 (font)<br>
      .\TU/lmr/m/n/10 u<br>
      .\TU/lmr/m/n/10 f<br>
      .\discretionary (penalty 50)<br>
      ..< \TU/lmr/m/n/10 -<br>
      .\whatsit123456=0<br>
      .\TU/lmr/m/n/10 l<br>
      .\TU/lmr/m/n/10 a<br>
      .\discretionary (penalty 50)<br>
      ..< \TU/lmr/m/n/10 -<br>
      .\TU/lmr/m/n/10 g<br>
      .\TU/lmr/m/n/10 e<br>
      <br>
      Mit ligtype:<br>
      .\TU/lmr/m/n/10 A<br>
      .\kern-0.28 (font)<br>
      .\TU/lmr/m/n/10 u<br>
      .\TU/lmr/m/n/10 f<br>
      .\whatsit289473=0<br>
      .\discretionary (penalty 50)<br>
      ..< \kern0.0 (font)<br>
      ..< \TU/lmr/m/n/10 -<br>
      ..= \kern0.0 (font)<br>
      .\TU/lmr/m/n/10 l<br>
      .\TU/lmr/m/n/10 a<br>
      .\discretionary (penalty 50)<br>
      ..< \TU/lmr/m/n/10 -<br>
      .\TU/lmr/m/n/10 g<br>
      .\TU/lmr/m/n/10 e<br>
      <br>
      Schöne Grüße<br>
      Keno<br>
    </font>
  </body>
</html>