[Trennmuster] selektive Ligaturwahl

Mico Loretan loretan.mico at gmail.com
Mi Dez 3 00:43:03 CET 2014


Hallo Stephan, Hallo Trennmustler,

Vielen Dank für diese Willkommens-Worte und für die Einführung in die Arbeit die Ihr leistet. Vorab eine Selbst-Einführung und (kleine) Entschuldigung: Ich wohnte als Kind vier Jahre lang im Rheinland und lernte dort, dass in Deutschland gewisse Wörter mit "ß" geschrieben werden sollten. Ich bin aber mehrheitlich in der Schweiz aufgewachsen und habe praktisch die ganze Zeit meines Erwachsenenlebens in den USA verbracht. Ich bin seit zwanzig Jahren CH-USA Doppelbürger, bit aber seit gut einem Jahr, nach 28 Jahren Abwesenheit!, wieder zurück in der Schweiz. Ich habe leider sämtliche Regeln zum Gebrauch vom "ß" vollkommen vergessen und verwende ausschliesslich "ss", wie es halt in der Deutsch-Schweiz üblich ist. Ich hoffe, dass das Nichtverwenden des ß-Buchstabens mit Euch OK ist. Eine weitere Konsequenz meines langen Aufenthalts in den USA ist, dass meine Verwendung von Kommas überwiegend von den Regeln fürs Englische geprägt ist. Ich bitte im voraus für Verzeihung falls meine Kommas in einem deutschen Text des öfteren falsch stehen oder gänzlich fehlen. Meine Arbeitssprache ist weiterhin Englisch, und somit kriege ich kaum Gelegenheit die deutschen Kommaregeln wieder zu erlernen...


Ich fände es natürlich toll falls das selnolig-Paket als Basis für weitere Anwendungen fungieren könnte und/oder falls ich neue Regeln zur Unterdrückung von Ligaturen Eurer Arbeit entlehnen dürfte. Ich werde mir gewiss in den nächsten Tagen die links, die Du mir geschickt hast, genau ansehen.


Ich möchte zuerst einige einführende Bemerkungen machen. Erstens zum Hauptprinzip welches die Ligaturen-Unterdrückung des selnolig Pakets leitet: Mein Eindruck ist, dass Ligaturen nicht verwendet werden dürfen falls sie Wortfugen überbrücken. (Es gibt natürlich Ausnahmen, z.B. in Sachen "i" nach "f" oder "ff", oder "fl" am Ende eines abgekürzten Wortes, z.B. "Aufl." und "gefl.".) Meines Wissens nach sind in der deutschen Sprache alle Wortfugen auch Silben-Trennstellen, aber nicht alle Trennstellen sind Wortfugen. Dies betrifft v.a. Wörter mit ff- und ft-Ligaturen, z.B. offen, hoffen, Affe, nachäffen, treffen, geschliffen, heftig, Haftung, lüften, duften, Gruften, usw. Falls es nötig ist ein solches Wort am Ende einer Zeile zu trennen, so soll das natürlich passieren dürfen, und die ff oder ft Ligatur wird in solchen Trenn-Fällen nicht eingesetzt. Es ist aber nicht nötig solche Ligaturen präventiv zu unterdrücken, nicht? Im Englischen gibt es übrigens auch Fälle, wo ein einsilbiges (und somit nicht trennbares) Wort eine Wortfuge enthält und deshalb Ligaturen nicht verwendet werden sollten, so etwa die ft-Ligatur in "fifth" und "twelfth". Somit sind Silben-Trennung und Ligatur-Unterdrückung nahe Verwandte, aber nicht gerade ein-eiige Zwillinge.
 

Ein kleiner "primer" in Sachen selnolig's Syntax. Die Ligaturen-Unterdrückungsregeln werden via \nolig Makros definiert. So wird die Regel

    \nolig{Schilff}{Schilf|f} 

in den Wörtern Schilffeld, Schilfflöte, und Schilffloß angewandt. Ausnahmen zu  Regeln können via \keeplig-Instruktionen definiert werden. Z.B. enthält die Datei selnolig-german-patterns.sty die Regel 

    \nolig{flich}{f|lich}

Diese einfache Regel unterdrückt die fl-Ligatur in begrifflich, beruflich, brieflich, glimpflich, behilflich, höflich, käuflich, sträflich, tariflich, trefflich, unerschöpflich, verwerflich, und vielen weiteren Wörtern. Diese Regel ist aber ein bisschen zu grosszügig, d.h. nicht genügend restriktiv, weil sie die fl-Ligatur auch in Wörtern wie Pflicht, pflichtgemäss, verpflichten, usw. unterdrückt. Anstatt die einfache aber zu grosszügige Regel mit vielen mehr restriktiven Regeln zu ersetzen, bietet das Paket die einfache Ausnahme-Regel 

    \keeplig{flicht}

Sie findet Verwendung in den Pflicht-enthaltenden Wörtern, aber auch in "flicht", "einflicht", und "verflicht" (dritte Person Singular von flechten, einflechten, und verflechten). Falls nötig, kann man Ausnahmen zu \keeplig Regeln bilden via noch restriktiveren \nolig Regeln; d.h. \nolig und \keeplig könnten im Prinzip verschachtelt werden. Das selnolig Paket macht aber von dieser Verschachtelungs-Möglichkeit z.Z. nicht Gebrauch. Stattdessen werden zwei oder drei weitere \nolig Regeln eingesetzt, damit die fl-Ligatur in einem Wort wie "Sumpflicht" doch noch unterdrückt wird.


Alle \nolig Regeln könnten, prinzipiell, auch in einem Opentype feature file definiert werden. (Ein kleiner Vorzug von selnolig ist allerdings, dass es auch mit Nicht-Opentype Schriften funktioniert.) Eine Umsetzung in ein feature file wäre aber doch recht mühsam, weil in Lua recht freie pattern matches erlaubt sind und die \nolig und \keeplig Regeln davon frei Gebrauch machen. Ich glaube, dies ist weniger der Fall in der feature file syntax, ich bin mir allerdings nicht so sicher. Ich habe noch nicht geprüft ob \keeplig Regeln, d.h., diverse Ausnahmen zu den \nolig Regeln, ebenfalls in einem feature file definiert werden könnten. Vielleicht schon, aber ich kenne mich mit Adobe's feature file sytax zu wenig aus. Im Moment enthält die Datei selnolig-german-patterns.sty ca. 700 \nolig Regeln und ca. 330 \keeplig Regeln. Alle diese Regeln in die (für mich doch schwerfällig scheinende) Sprache eines feature files zu übersetzen könnte eine Heidenarbeit sein... 


Die Regeln basieren übrigens auf einem Korpus von ca. 350'000 einfachen und zusammengesetzten Wörtern die diverse ff, ffi, ffl, fi, fl, ft, und fft Kombinationen enthalten und deren Morphologie mit einem automatisierten tool eruiert wurde. (Das tool ist allerdings alles andere als fehlerfrei, so konnte ich dessen Vorgaben nicht ohne Einschränkungen verwenden.) Die Regeln sind somit recht umfassed, wenn auch mit Sicherheit nicht vollständig.


Ein Nachteil der aktuellen Version von selnolig ist, dass es nur eine einzige Methode anbietet um Ligaturen zu unterbinden: die beiden Glyphen werden einfach unligiert nebeneinander gestellt. Je nach der verwendeten Schrift sieht das Result nicht perfekt aus. V.a. wenn "f" und "l" unligiert nebeneinander stehen, ist das Resultat, typographisch betrachtet, oft nicht grossartig -- der "Arm" vom "f" stösst an beim "l". Das Makro "| vom babel Paket fügt 0.03em whitespace ein um die Buchstaben optisch von einander zu trennen. Das ist gut und recht für f-l und ff-l Fälle, aber für ff und fi Fälle ist es i.A. gar nicht nötig, extra whitespace einzusetzen. Falls die verwendete Schrift die folgende Lösung zulässt ist sie zu bevorzugen: man ersetze den normalen f-Glyph mit einer Variante mit einem kurzen Arm. Ich bin mit Georg Duffner, dem Verfasser der EB Garamond Schrift, in regelmässigen Kontakt gewesen. EB Garamond hat sowohl normale als auch kurzarmige "f" und "ff" Glyphen. Ich habe eine neue selnolig Variante kreiert, die die automatische Substitution der normal-langen "f" und "ff" Glyphen mit den kurzarmigen Varianten dieser Glyphen ermöglicht falls die Ligaturen-Unterdrückungs-Stellen von einem Buchstaben wie b, k, i, j, oder l gefolgt werden. Mit EB Garamond sieht das Resultat überzeugend aus -- das kurzarmige f kollidiert nicht mit dem nachfolgenden Buchstaben. Leider haben aber nicht alle Opentype-Schriften gut-gelungene kurzarmige f und ff Glyphen. So ist der "Arm" der kurzarmigen Variante von ff in der Libertine Schrift nicht wesentlich kürzer als in der Normalvariante, und das Resultat der Substitution ist darum nicht erkennbar besser mit dieser Schrift.


Die nächste Version von selnolig wird auf jeden Fall sowohl die babel-Methode als auch die Duffner-Methode als Optionen anbieten. Je nach der Schrift die im Dokument angewandt wird, wird hoffentlich eine der drei Methoden gut genug sein. :-) 


Ich werden mir also gewiss die links genau anschauen und mir überlegen wie ich sie für Ligatur-Unterdrückungen verwenden kann. Es wäre schon grossartig falls die Arbeit der Erstellung der rund tausend Ligatur-Regeln automatisiert und vereinfacht werden könnte. Ich muss allerdings in den nächsten zwei Wochen noch viel beruflich auch Reisen gehen, und während den Festtagen werde ich ebenfalls nicht viel Zeit zum Programmieren haben. So werde ich wohl erst im Januar richtig Zeit finden um die nächste Version von selnolig fertigzustellen.

Beste Grüsse,

Mico









    

> On Dec 2, 2014, at 00:31, Stephan Hennig <sh-list at posteo.net> wrote:
> 
> Hallo Mico,
> 
> hier in aller Kürze unser Vorschlag:
> 
> Das Problem der selektiven Ligaturwahl ist praktisch identisch mit dem
> Problem der Worttrennung.  Was liegt also näher als spezielle Muster
> anzufertigen, die nicht Trennstellen, sondern (nicht) zu setzende
> Ligaturen anzeigen?
> 
> Wir haben folgende Bausteine:
> 
> 1.
> 
> Im Rahmen der Trennmustererarbeitung haben wir eine Wortliste erstellt,
> die nicht nur einfach Trennstellen enthält, sondern angereichert ist mit
> Informationen zur morphologischen Klassifikation (fast) aller
> Trennstellen.  Das Format der Auszeichnung ist in der Datei
> dokumente/README.wortliste beschrieben (im Wortliste-Repositorium).
> 
> Da Ligaturen nicht über Wortfugen sowie Vor- und Nachsilben reichen
> sollten, können mit Hilfe der morphologischen Klassifikation spezielle
> Muster erstellt werden, die eben Wortfugen, Vor- und
> Nachsilbentrennungen anzeigen, jedoch keine Stammtrennungen.  Solche
> Liang-Muster bieten die bekannten Vorteile:
> 
>  + Sie lassen sich automatisch mit patgen erzeugen.
> 
>  + Sie sind kompakt.
> 
>  + Liang-Muster funktionieren in vielen Sprachen.
> 
>  + Vielleicht das beste: Die oben beschriebenen Muster enthalten
>    Informationen, die nicht auf einzelne Ligaturen zugeschnitten
>    sind.  Das heißt, mit solchen Mustern lassen sich grundsätzlich
>    beliebige Ligaturen behandeln.
> 
> 2.
> 
> Unter <URL:https://github.com/sh2d/padrinoma> ist eine
> Lua-Implementierung von Liangs Musteranpassung (Musterzerlegung) zu
> finden.  Das Verzeichnis examples/ enthält einige Beispielanwendungen,
> insbesondere im Verzeichnis examples/luatex/break-ligatures/ eines,
> welches die selektive Ligaturwahl in LuaTeX mit Hilfe der oben
> beschriebenen Methode zeigt.  Die verwendeten Muster sind in der Datei
> examples/patterns/hyph-de-1901-joint.pat.txt zu finden.  Wie die
> Beispiele lokal ausgeführt werden können, ist in der Datei
> examples/README beschrieben.
> 
> Kompiliert man die Datei break-ligatures.tex mit lualatex, kann man
> sehen, dass das Verfahren grundsätzlich funktioniert.  Mico, hast du
> Interesse, diesen Ansatz für das Paket selnolig zu übernehmen?
> 
> Viele Grüße,
> Stephan Hennig
> _______________________________________________
> Trennmuster mailing list
> Trennmuster at dante.de
> https://lists.dante.de/mailman/listinfo/trennmuster





Mehr Informationen über die Mailingliste Trennmuster