summaryrefslogtreecommitdiff
path: root/info/german/ogfuda/trennung.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/german/ogfuda/trennung.tex')
-rw-r--r--info/german/ogfuda/trennung.tex761
1 files changed, 761 insertions, 0 deletions
diff --git a/info/german/ogfuda/trennung.tex b/info/german/ogfuda/trennung.tex
new file mode 100644
index 0000000000..d6de82d70b
--- /dev/null
+++ b/info/german/ogfuda/trennung.tex
@@ -0,0 +1,761 @@
+\def\fileversion{1.0}
+\def\filedate{1-FEB-1993}
+\def\filename{trennung.tex}
+
+\meldedich
+
+\section{Trennungsprobleme}
+
+ \p Die automatische Trennung von W"ortern
+beim Zeilenumbruch ist ein nicht-triviales Problem. K"onnen Sie mir
+sagen, was Sie in bezug auf \TeX\ bereits dar"uber wissen?
+
+\r Das will ich gerne tun. Soweit ich wei"s, arbeitet der
+Trennalgorithmus von \TeX\ nicht etwa mit einem W"orterbuch, sondern
+mit Trenntabellen, die aber je f"ur verschiedene Sprachen neu erstellt
+werden m"ussen. F"ur's Deutsche gibt es au"serdem noch \sty{german}.
+Ferner kenne ich Anwender, bei denen die Trennung im Deutschen ganz
+und gar nicht klappt; sie erhalten laufend "ubervolle \cs{hbox}es.
+Au"serdem habe ich manchmal Trennprobleme mit W"ortern, die Umlaute oder
+Bindestriche enthalten. Woran liegt das?
+
+\p Sie sprechen da verschiedene Dinge an, die nicht notwendigerweise
+zusammengeh"oren. Um die Zusammenh"ange zu kl"aren,
+sollten wir einmal den Trennungsmechanismus von \TeX\ n"aher
+betrachten.
+
+\r Ich bitte darum.
+
+\p Der Trennalgorithmus wird (unter bestimmten Umst"anden) w"ah"-rend des
+Zeilenumbruchs vorgenommen.
+
+\r Also sollten wir den Zeilenumbruch in groben Z"ugen kl"aren.
+
+\subsection{\TeX's Zeilenumbruch}
+
+\p Das wird leider nicht m"oglich sein\dots Vom Umbruchalgorithmus von
+\TeX\, behauptet \DEK, er sei der wohl interessanteste Aspekt
+des gesamten \TeX-Systems. Wir k"onnen hier nat"urlich nicht auf jedes
+Detail dieses komplexen, wahrlichen Meisterwerks der Programmierkunst
+eingehen, sondern wollen nur soviel beleuchten, um das von Ihnen
+dargelegte Problem hinreichend zu l"osen. Dies wird aber nicht in
+groben, sondern nur in gr"obsten Z"ugen gehen.
+
+\r Nur zu, ich bin ganz Ohr.
+
+\subsubsection{Die Elemente der horizontalen Liste}
+
+\p Dies rate ich Ihnen auch. \TeX{} bildet aus jedem von Ihnen
+geschrieben Absatz das, was man unter \TeX\
+eine {\em horizontale Liste\/} ({\em
+horizontal list}) nennt. Diese horizontale Liste repr"asentiert den
+von Ihnen geschriebenen Absatz. Die Bestandteile einer
+horizontalen Liste sind:
+\begin{enumerate}
+\item Boxen ({\em boxes}); entweder solchen mit horizontaler
+Ausrichtung (\cs{hbox}) oder solchen mit vertikaler Ausrichtung
+(\cs{vbox});
+\item Worttrennstellen ({\em discretionary breakpoints});
+ "ublicherweise Trennungsstriche;
+\item Kleber ({\em glue}), und zwar "ublicherweise zwischen W"ortern;
+\item Unterschneidungs-Elemente ({\em kerns}); "ublicherweise zwischen
+ Buchstaben;
+\item Strafpunkte ({\em penalties}); sie bestimmen die Stellen des
+Zeilenumbruch entscheidend mit, wobei Stellen mit negativen
+Strafpunkten beim Zeilenumbruch bevorzugt werden, positive hingegen
+eher einen Zeilenumbruch verhindern;
+\item einige andere, f"ur uns hier nicht wichtige Elemente.
+\end{enumerate}
+Ein Zeilenumbruch kann nur an {\em glue}-, {\em kern}-, Strafpunkt- sowie
+Worttrennstellen erfolgen.
+
+\r Ich vermisse in Ihrer Aufz"ahlung etwas Wichtiges, n"amlich
+Buchstaben!
+
+\p Buchstaben werden von \TeX\ als Boxen angesehen.
+
+\r Aber woher kommen denn die ganzen anderen Elemente der horizontalen
+Liste? Buchstaben tippe ich selbst ein; Boxen mittels \cs{mbox};
+Trennstellen mitunter auch mittels der Eingabe von
+\glq\verb|"-|\grq.
+
+\p Richtig, aber \TeX\ f"ugt in die horizontale Liste von sich aus
+weiter sog.\ "`leere Trennstellen"' ({\em empty discretionaries})
+ein, und zwar nach jedem \glq{\tt -}\grq\ und jeder Ligatur, die mit
+einem \glq{\tt -}\grq\ endet. "`Leer"' hei"st diese Trennstelle
+deshalb, weil im Falle eines Zeilenumbruches an dieser Stelle kein
+Trennungsstrich eingef"ugt wird.
+
+\r Das erscheint sinnvoll, denn ein Divis ist meistens eine geeignete
+Trennstelle, bei der im Falle der Trennung kein weiterer Divis
+eingef"ugt werden sollte. Diese leeren Trennstellen sind also neben
+Wortzwischenr"aumen erlaubte Trennstellen?
+
+\p Grob gesprochen ist das so. (Es gibt allerdings noch
+Einschr"ankungen und weitere Trennstellen; diese k"onnen wir aber,
+da es uns ja lediglich aufs Gr"obste ankommt, nicht n"aher darlegen).
+
+\r Aber woher kommen {\em glue}, {\em kern\/} sowie Strafpunkte?
+
+\p Wenn Sie beispielsweise das Wort "`Schrift-Satz"' eingeben, so macht
+\TeX\ daraus den folgenden Eintrag in der horizontalen Liste.
+\begin{ogfudatim}
+\glue 4 plus 2 minus 1.33333
+\cmr/m/n/12 S
+\cmr/m/n/12 c
+\kern-0.32639
+\cmr/m/n/12 h
+\cmr/m/n/12 r
+\cmr/m/n/12 i
+\cmr/m/n/12 f
+\cmr/m/n/12 t
+\cmr/m/n/12 -
+discretionary
+\cmr/m/n/12 s
+\cmr/m/n/12 a
+\cmr/m/n/12 t
+\cmr/m/n/12 z
+\glue 4 plus 2 minus 1.33333
+\end{ogfudatim}
+
+\r Der erste und der letzte {\em glue\/} wird wohl der zwischen W"ortern
+sein; {\em discretionary\/} vom Divis. Woher aber kommt der {\em kern}?
+
+\p Die {\em kern}-Informationen entnimmt \TeX\ aus der zu dem aktuellen
+Font geh"orenden {\tt .tfm}-Datei, die ihrerseits w"ahrend der Erzeugung
+der Schrift mittels \mf\ abf"allt. Hier hat der Schriftdesigner
+entschieden, zwischen dem \glq c\grq\ und dem \glq h\grq\ einen
+kleinen negativen Zwischenraum einzuf"ugen, der bewirkt, da"s das
+\glq c\grq\ ein wenig n"aher an das \glq h\grq\ ger"uckt wird. ({\em kern\/}s
+m"ussen nicht immer negativ sein; so wird beispielsweise zwischen
+einem \glq b\grq\ und einem \glq o\grq\ ein kleiner positiver {\em kern\/}
+gesetzt.)
+
+\r Und woher stammen die Strafpunkte?
+
+\p Eine gute Frage. Wenn Sie Ihrem Dokument den letzten Schliff
+geben, so werden Sie schon hin und wieder an passender Stelle
+beispielsweise das Kommando \cs{linebreak} benutzt haben\dots
+
+\r \dots um einen Zeilenumbruch zu forcieren.
+
+\p Ganz recht. Nun ist aber \cs{linebreak} im wesentlichen die
+Ab"-k"ur"-zung f"ur \cs{penalty-10000}, eine f"ur \TeX\ unendlich wenige
+Anzahl von Strafpunkte (da \TeX\ alle Strafpunkte von mehr als
+10\,000 als unendlich viel und von weniger als $-10\,000$ als
+unendlich wenig ansieht). Daher findet an dieser Stelle ein
+Zeilenumbruch statt. Wenn Sie einen Zeilenumbruch zwischen zwei
+W"ortern unterbinden wollen, verwenden Sie das Band~\glq\verb|~|\grq;
+dies ist
+eine Abk"ur"-zung f"ur \cs{penalty10000}, also so hoch, da"s \TeX\ an
+dieser Stelle nie die Zeile umbricht.
+
+\r Erl"autern Sie mir den Zusammenhang von Strafpunkten und
+Zeilenumbruch bitte n"aher.
+
+\subsubsection{Absatzweise Optimierung}
+
+\p Beim Zeilenumbruch wird die umzubrechende Zeile in der Regel
+mehr oder weniger entweder gestreckt oder gestaucht. Dabei werden
+{\em Dehnpunkte} ({\em badness}) vergeben.
+Die Strafpunkte einer Zeile sind neben den Dehnungspunkten
+({\em badness}) dieser Zeile sowie besonderen
+Spezial-Fehlpunkten der Zeile die bestimmenden Gr"o"sen f"ur den
+Zeilenumbruch. Aus beiden werden (mittels
+einer hier nicht n"aher vorgestellten Formel) f"ur jede Zeile die sog.\
+"`Fehlpunkte"' ({\em demerits}) errechnet, die die typographische
+Qualit"at des Umbruch widerspiegeln. Je weniger Fehlpunkte
+\TeX\ errechnet, desto besser ist der Zeilenumbruch.
+
+\r Minimiert \TeX\ die Fehlpunkte einer Zeile und bricht demgem"a"s die
+Zeile um?
+
+\p Durchaus nicht. \TeX\ macht es sich bei weitem nicht so einfach
+wie andere zeilenumbrechende Programme. Es werden die Fehlpunkte
+nicht etwa zeilenweise minimiert, sondern {\em absatzweise}. \TeX\
+verwandelt also stets einen kompletten Absatz in eine horizontale
+Liste und errechnet denjenigen Zeilenumbruch, der von allen m"oglichen
+Zeilenumbr"uchen dieses Absatzes die wenigsten Fehlpunkte aufweist.
+(Hier kann \TeX\ beispielsweise die o.\,g.\ Spezial-Fehlpunkte
+zuf"ugen: so erh"oht sich beispielsweise,
+falls bei einem Umbruch zwei aufeinanderfolgende
+Zeilen mit einem Trennungsstrich enden, die Anzahl der Fehlpunkte um
+den Wert \cs{doublehyphendemerits}, der in \LaTeX\ auf 10\,000
+gesetzt ist.)
+
+\r Da hat \TeX\ aber beim Zeilenumbruch eine Menge Arbeit!
+
+\subsubsection{Der dreistufige Umbruchalgorithmus}
+
+\p So ist es. Hinzu kommt, da"s der Zeilenumbruch {\em dreistufig\/}
+erfolgt. Die erste Stufe versucht einen Absatz {\em ohne
+Worttrennung\/} zu realisieren; hier kommen als Trennstellen also im
+wesentlichen nur Wortzwischenr"aume und leere Trennstellen in Frage.
+Dieser Umbruch wird akzeptiert, falls die Dehnungspunkte jeder
+umgebrochenen Zeile einen einstellbaren Wert (\cs{pretolerance})
+nicht "uberschreiten. In \LaTeX\ betr"agt ist \cs{pretolerance=100}.
+Ist diese auf einen negativen Wert gesetzt, so wird
+dieser erste Versuch nicht ausgef"uhrt.
+
+\r Wohl um im mehrspaltigen Satz, wo es ohnehin kaum einen Absatz
+ohne Worttrennung gibt, Zeit zu sparen.
+
+\p Genau deshalb.
+
+\r Was geschieht weiter, falls im ersten Versuch kein Umbruch
+gefunden wird, bei dem die Dehnpunkte einer jeden Zeile den
+eingestellten Wert \cs{pretolerance} unterschreiten?
+
+\p Dann versucht \TeX, weitere Umbruchstellen zu finden; als solche
+kommen dann zus"atzlich diejenigen Trennstellen in W"ortern hinzu, die
+\TeX\ durch seinen Trennalgorithmus findet. Mit diesen zus"atzliche
+Trennstellen versucht \TeX, den Absatz derart umzubrechen, da"s die
+Dehnungspunkte jeder Zeile den Wert \cs{tolerance} nicht
+"uberschreiten. (\cs{tolerance} ist "ublicherweise auf den Wert 200
+gesetzt.) Auf spezielle Probleme, die den Trennalgorithmus von \TeX\
+sowie das Zusammenspiel mit dem Zeilenumbruch betreffen, gehen wir
+sp"ater ein.
+
+\r Gut. Hier macht es aber offensichtlich keinen Sinn,
+\cs{tolerance} auf einen negativen Wert zu setzen.
+
+\p Ganz und gar nicht. Ein negativer Wert von \cs{tolerance} f"uhrt
+sogar zu einer Fehlermeldung. Aber wenn Sie \cs{tolerance=10000} oder
+h"oher setzen, wird auf den dritten Versuch verzichtet.
+
+\r Was passiert weiter, wenn auf diesen dritten Versuch verzichtet
+wird?
+
+\p Das h"angt von zwei weiteren einstellbaren Parametern, n"amlich
+\qcs{hfuzz} und \qcs{hbadness}, ab. Hierbei wird durch \cs{hfuzz},
+welcher mit 0,1\,pt eingestellt ist, ein "Uberstand einer jeden Zeile
+erlaubt; jede Zeile darf also, ohne da"s \TeX{} meckert, 0,1\,pt
+l"anger als \cs{hsize} sein. Der Parameter \cs{hbadness}
+ist "ublicherweise mit $1\,000$ initialisiert. Wenn eine Zeile einen
+gr"o"seren "Uberstand als \cs{hfuzz} aufweist, erhalten Sie eine
+Meldung, die Sie auf eine \ttind{overfull}~\cs{hbox} hinweist;
+ist {\it badness\/} hingegen gr"o"ser als \cs{hbadness}, so h"alt
+\TeX{} die Zeile f"ur \ttind{underfull}.
+
+\r Das bringt mich auf eine Idee! Wenn ich beispielsweise im
+mehrspaltigen Satz mit kleiner Zeilenbreite sichergehen will, da"s
+keine Zeile eine \itind{badness} von mehr als 500 aufweisen soll,
+setze ich \cs{tolerance} auf einen hohen Wert und
+\cs{hbadness} auf 500. \TeX{} w"urde dann keine {\it overfull
+boxes\/} produzieren, aber mir eben die {\it underfull boxes\/}
+melden.
+
+\p Ja, aber wenn Sie Wert auf typographische Qualit"at legen\dots
+
+\r \dots werde ich vielmehr \cs{tolerance} auf einen etwas h"oheren
+Wert, sagen wir 500--1\,000, setzen und nichts an \cs{hbadness}
+"andern! Dann n"amlich sehe ich, welche
+Zeilen zu lang sind und kann den Text entsprechen umformulieren.
+
+\p Das ist richtig, aber \TeX{} hat ja noch einen dritten Versuch!
+
+\r Wie geht \TeX\ in diesem dritte und letzten Versuch vor?
+
+\p Diesen dritten Versuch unternimmt \TeX\ nur in einer
+Versionsnummer ab 3.0 und auch nur dann, wenn der Parameter
+\cs{emergencystretch} auf einen positiven Wert gesetzt wurde. Diese
+L"ange wird zur Dehnungs"-m"og"-lichkeit einer jeden Zeile hinzuaddiert
+und ein neuer Umbruch gestartet.
+Dadurch werden die Dehnungspunkte jeder Zeile verringert.
+Meist hilft schon ein relativ kleiner Wert von ca.\ 10\,pt,
+jedoch gibt es mit diesem Parameter bisher noch keine gro"sen
+Erfahrungen, so da"s man ruhig ein bi"schen mit dem Wert
+herumprobieren sollte.
+
+\r Und wie verh"alt sich \TeX, falls auch im dritten Versuch keine
+geeigneten Umbruchstellen gefunden wurden?
+
+\p Falls es "uberhaupt zum dritten Versuch kam, war \cs{tolerance} auf
+einen kleineren Wert als 10\,000 gesetzt und \cs{emergencystretch}
+positiv (andernfalls w"urde ja nach
+Stufe~2 kein weiterer Versuch mehr unternommen). In diesem Fall
+erhalten Sie wie im zweiten Versuch eine Meldung "uber {\it under-}
+oder {\it overfull box}.
+
+\r Diese Meldung ist mir nur zu vertraut. Und wenn ich in diesem
+Fall die \env{sloppypar} verwende, erhalte ich ein
+undiskutables Ergebnis, da hier die Wortabst"ande meist "uber
+Ge"-b"uhr gro"s sind.
+
+\p Das liegt daran, da"s innerhalb von {\sf sloppypar} die
+\cs{tolerance} auf einen Wert von 10\,000 gesetzt wird\dots
+
+\r \dots und daher also der dritte Versuch nicht mehr gestartet wird;
+daher k"onnen auch Zeilen mit unendlich-vielen Dehnungspunkten beim
+Umbruch ber"ucksichtigt werden.
+
+\p Sicherlich sind Ihnen aber bessere L"osungen bekannt.
+
+\r Ich kann zus"atzliche Trennstellen mittels \glq\verb|"-|\grq\ angeben
+oder die fragliche Stelle umformulieren. (Ich mu"s aber auch zugeben,
+da"s manchmal falsch geschriebene W"orter die Ursache daf"ur waren, da"s
+\TeX\ ein Wort nicht trennen konnte.) Nun denke ich, ist es an der
+Zeit, mehr "uber \TeX's Trennalgorithmus zu erfahren!
+
+\subsection{\TeX's Trennalgorithmus}
+
+\p \TeX\ arbeitet, wie Sie vorhin
+richtig bemerkten, nicht mit einem Lexikon,
+sondern vielmehr mit sog.\ "`Trenntabellen"' (den {\em hyphenation
+patterns}).
+Trenntabellen werden in den meisten F"allen mit dem Programm {\tt
+PatGen} erzeugt, und das hat seinen guten Grund. Es steht in einer
+solchen Tabelle ja nicht jedes Wort einzeln, sondern ein Konglomerat
+aus Regeln, so z.\,B.: "`wenn dort ein \glq st\grq\ kommt, darfst Du
+diese nicht trennen, wenn allerdings davor ein \glq p\grq\ steht,
+meistens schon, au"ser es kommt danach ein \glq x\grq, und auch dann
+nur, wenn vorne ein z steht."', wobei die verschiedenen Stufen des "`Du
+darfst"' bzw.\ "`Du darfst nicht"' durch ansteigende Werte ungerader
+bzw. gerader Zahlen dargestellt werden. {\tt PatGen} liest nun eine
+Liste korrekt getrennter W"orter ein und erstellt daraus eine solche
+Trenntabelle. Wenn man also an einer Tabelle etwas "andern will, dann
+am besten an der W"orterliste, aus der die Tabelle entstanden ist,
+wobei leider den wenigsten ein Duden auf Platte zur Verf"ugung steht.
+
+(Wenn ich mich recht entsinne, haben die Polen die Trenntabelle per
+Hand erstellt, und zwar weil die polnische Trennung derart regelm"a"sig
+ist, da"s man einfacher die Regeln (als Patterns) hinschreiben als ein
+W"orterbuch mit {\tt PatGen} erstellen kann.)
+
+\r Also mu"s f"ur jede Sprache eine neue Trenntabelle erstellt werden?
+
+\p So ist es.
+
+\r Ist denn das Erstellen derartiger Trenntabellen nicht eine
+zeitraubende Angelegenheit?
+
+\p Ja, aber gl"ucklicherweise mu"s sich der Anwender nicht darum
+k"um"-mern. Flei"sige \TeX{}niker haben das bereits erledigt. Weiter sehen
+Sie, da"s \sty{german} nichts mit dem eigentlichen Trennverfahren
+zu schaffen hat. Allein in der Trenntabelle befinden sich die f"ur die
+Trennung n"otigen Regeln. Die deutsche Trenntabelle tr"agt "ubrigens den
+Namen {\tt ghyphen.tex}.
+
+\r Und wie wendet \TeX\ die Trenntabellen zur Trennung von W"or"-tern an?
+
+\p Ich will es Ihnen gerne darlegen. Im \TeX Book, Anhang~H erkl"art
+\DEK\ die Regeln, mit denen \TeX\ ein trennbares Wort (oder einen
+Anteil davon) aus der horizontalen Liste, als der ein Absatz
+repr"asentiert wird, herausfischt. \TeX\ versucht dann, die Trennstellen
+in diesen Teilen mittels der Trenntabellen zu finden (was bei sehr
+kurzen Teilen nicht klappt).
+
+\r \TeX\ versucht also, wenn ich Sie richtig verstanden habe, den
+eingelesenen Text in das zu zerlegen, was es f"ur W"orter h"alt, indem es
+all das, was es f"ur Nicht-Wortbestandteile h"alt,
+als Begrenzer eines Wortes ansieht
+und so, grob gesagt, den Text zerlegt in die jeweils l"angste Abfolge
+blo"ser Buchstaben.
+
+\p So k"onnte man es mit aller Vorsicht formulieren. Grob gesagt
+beginnt f"ur \TeX\ ein neues Wort mit einem gew"ohnlichen Buchstaben
+hinter {\em glue}. (Allerdings kann
+ein Wort, welches \TeX\ zu trennen versucht, auch implizite {\em kerns}
+sowie Ligaturen enthalten.) Das zu trennende Wort endet mit dem
+ersten darauf"|folgendem Eintrag in der horizontalen Liste, welcher
+weder ein Buchstabe, noch eine Ligatur, noch ein impliziter {\em kern\/} ist.
+
+\r Wieso aber werden W"orter, die Umlaute enthalten, h"aufig nicht oder
+fehlerhaft getrennt? Ist etwa der Trennalgorithmus von \TeX\
+mangelhaft?
+
+\p Durchaus nicht. Das liegt an \sty{german}, dort werden die
+Umlaute neu definiert.
+
+\r Sie verwirren mich! Sie stellten doch eben
+fest, da"s die Trennregeln allein in der Trenntabelle zu finden sind,
+und nicht etwa in \sty{german}.
+
+\subsection{Umlaute und Trennung}
+
+\p Nun, das ist kein Widerspruch. Ich will Ihre Verwirrung gerne
+auf"|l"osen. Durch \sty{german} wird vor und nach einem Umlaut
+\cs{allowhyphens} eingef"ugt und dieses expandiert zu einem ``{\em glue
+item}'' (\cs{hskip 0pt plus 0pt}). Damit kann \TeX\ an dieser Stelle
+ein neues "`Wort"', das evtl. getrennt werden kann, beenden bzw.\
+beginnen. Beispiel: \TeX\ macht aus \glq\verb|gew"ohnlich|\grq\ die
+Wortfolge \glq\verb|gew|\grq\ {\tt [Umlaut-o]} \glq\verb|hnlich|\grq\
+und versucht dann, \glq\verb|gew|\grq\ und \glq\verb|hnlich|\grq\ zu
+trennen. Da es in diesen "`W"ortern"' keine erlaubten Trennungen
+findet, wird \glq\verb|gew"ohnlich|\grq\ gar nicht getrennt.
+
+\r Dann ist also die l"angste Abfolge trennbarer W"orter, die \TeX\ in
+der Zeichenfolge \glq\verb|gew"ohnlich|\grq\ findet, einmal
+\glq\verb|gew|\grq\ und andererseits \glq\verb|hnlich|\grq, da n"amlich
+\glq\verb|"o|\grq\ noch etwas Leim enth"alt und so \TeX\ die o.\,g.\
+Zeichenfolge in drei W"orter zerlegt!
+
+
+\p Genauso ist es. Genauer wird aus der Eingabe von
+\glq\verb|gew"ohnlich|\grq\ das Folgende.
+%
+\begin{ogfudatim}
+\cmr/m/n/12 g
+\cmr/m/n/12 e
+\cmr/m/n/12 w
+\penalty 10000
+\glue 0.0
+\kern 0.0 (for accent)
+\hbox(7.96431+0.0)x5.87494, shifted 0.47266
+.\cmr/m/n/12 ^^?
+\kern -5.87494 (for accent)
+\cmr/m/n/12 o
+\penalty 10000
+\glue 0.0
+\cmr/m/n/12 h
+\cmr/m/n/12 n
+\cmr/m/n/12 l
+\cmr/m/n/12 i
+\cmr/m/n/12 c
+\kern-0.32639
+\cmr/m/n/12 h
+\end{ogfudatim}
+%
+Ist Ihnen eine Abhilfe bekannt?
+
+\r Ja, ich benutze dann, wie auch in den seltenen F"allen, in denen die
+Trennung nicht eindeutig ist (wie bei Haus-tier und Hau-stier) bzw.\
+bei den zugegebenerma"sen seltenen falschen Trennungen, die Trennhilfe
+\glq\verb|"-|\grq.
+
+\p Ausgezeichnet, wie w"are also dem Trennproblem von
+\glq\verb|gew"ohnlich|\grq\ beizukommen?
+
+\r Nun, ich gebe einfach \glq\verb|ge"-w"ohn"-lich|\grq\ ein. Die
+Behandlung der Umlaute erinnert den Benutzer also schmerzhaft daran,
+da"s der Sch"opfer von \TeX\ Amerikaner ist!
+
+\p Nicht ganz; es erinnert daran, da"s der Zeichensatzgenerator \mf\
+von einem Amerikaner geschrieben wurde! Die verbreitetste
+Zeichensatzfamilie, n"amlich die Computer Modern Roman (Sie lesen Sie
+gerade), enth"alt von sich aus gar keine Umlaute. Umlaute werden eben
+aus zwei Zeichen zusammengesetzt. Es sind aber seit einiger Zeit
+Bestrebungen im Gange, eine Zeichensatzkonvention festzulegen und
+Zeichens"atze zu entwickeln, bei denen Umlaute (und andere Zeichen, die
+nicht als solche in den cmr-Fonts enthalten sind) als ein Zeichen
+enthalten sind. Momentan sind diese sog.\ EC- bzw.\ DC-Fonts noch
+nicht fertig; wir werden uns mit ihnen besch"aftigen, wenn sie
+allgemein verf"ugbar sind.
+
+\subsection{Fehlerhafte Trennung}
+
+\r Das sind ja erfreuliche Aussichten. Lassen Sie uns jetzt noch den
+Fall einer fehlerhaften Trennung besprechen. Ist es empfehlenswert,
+auch hier Trennhilfen anzubringen?
+
+\p Das w"are eine Notl"osung\dots In den F"allen fehlerhafter Trennung
+ist eine andere Methode sachgerechter.
+
+\r Teilen Sie mir mit, welche Methode Sie f"ur angemessen halten, falls
+W"orter fehlerhaft getrennt werden?
+
+\p Das will ich gerne tun. Die Ausnahmew"orter k"onnen {\em dauerhaft},
+also ohne jedesmal die Trennhilfe \glq\verb|"-|\grq\ anzugeben,
+mittels \cs{hyphenation} richtig getrennt werden. So wird
+beispielsweise "`Zeilenumbruch"' von \TeX\ fehlerhaft zu
+"`Zei-le-num-bruch"' getrennt; Abhilfe
+schafft hier ein in der Pr"aambel des Dokumentes eingegebenes
+\verb|\hyphenation{zei-len-um-bruch}|.
+
+\r Dieser Befehl veranla"st \TeX\ also jedesmal, wenn ihm das Wort
+"`Zeilenumbruch"' unterkommt, es gem"a"s der im
+\cs{hyphenation}-Befehl angegebenen Trennung zu trennen.
+
+\p Genauso ist es. Sie k"onnen \cs{hyphenation} auch eine durch
+Leerzeichen getrennte Liste von Ausnahmetrennungen "ubergeben, also
+beispielsweise (da pikanterweise das Wort "`Trennalgorithmus"' in
+"`Tren-nal-go-rith-mus"' zerlegt wird):
+
+\medskip
+
+\noindent\verb|\hyphenation{mo-nats-um-satz trenn-al-go-rith-mus...}|\dots
+
+\medskip
+
+\r \dots statt eben \cs{hyphenation} zweimal zu verwenden:
+
+\begin{ogfudatim}
+\hyphenation{zei-len-um-bruch}
+\hyphenation{trenn-al-go-rith-mus}
+\hyphenation{...}
+\end{ogfudatim}
+
+\p Leider gibt es da noch einen kleinen Wermutstropfen: W"orter, die
+Umlaute enthalten, d"urfen (noch) nicht im \cs{hyphenation}-""Befehl
+aufgenommen werden.\indexcs{hyphenation!und Umlaute}
+
+\r Das ist gut zu wissen. Ich nehme an, das "andert sich, wenn die
+DC/EC-Zeichens"atze allgemein verwendet werden. Nun verraten Sie mir
+noch, warum \TeX\ W"orter, die einen Bindestrich enthalten, nur am
+Bindestrich selbst trennt.
+
+\subsection{Trennung am Bindestrich}
+
+
+\p Dies ist ein Seiteneffekt einer entweder implizit (als leere
+Trennstelle von \TeX\ selbst nach W"ortern, die einen Bindestrich
+enthalten oder bei Ligaturen, die mit einem solchen aufh"oren, wie
+\sq{--} oder \sq{---}) oder explizit durch Eingabe von
+\glq\verb|"-|\grq\
+eingef"ugten \cs{discretionary}: {\em Jede Trennstelle unterdr"uckt
+n"amlich die Trennung des Wortteils rechts von der Trennstelle}.
+
+\r Das erscheint mir in der Regel auch sinnvoll, W"orter mit
+expliziten Bindestrichen nicht an anderen Stellen zu trennen, da
+die leichte Lesbarkeit durch eine Trennung, die nicht am Bindestrich
+erfolgte, empfindlich gest"ort w"urde.
+
+\p Sie sagen es. Dazu schreibt \DEK\ selbst:
+\begin{quote}\selectlanguage{USenglish}
+``[\dots] Thus, a box or rule or math formula or discretionary following
+ too closely upon the trial word will inhibit hyphenation. (Since \TeX\
+ inserts empty discretionaries after explicit hyphens, these rules
+ imply that already-hyphenated compound words will not be further
+ hyphenated by the algorithm.)''
+\end{quote}
+
+\r Jedes eingef"ugte
+\cs{discretionary} verhindert die Trennung des davorstehenden
+Wortes (es ist leider ``too closely''). Was kann man tun?
+
+\p Da gibt es mindestens zwei M"oglichkeiten:
+\begin{enumerate}
+\item Man kann \sty{german} benutzen, und zwar vor und nach jedem
+Bindestrich ein \cs{allowhyphens} einf"ugen. Das Ganze packt man
+dann am besten in ein Makro. Zum Beispiel (beachten Sie bitte, da"s
+\glq\verb|""|\grq\ eine Trennhilfe wie \glq\verb|"-|\grq\ darstellt,
+das Wort jedoch im Falle der Trennung an der Trennstelle ohne das
+Trennungszeichen \glq-\grq\ ausgegeben wird):
+\begin{ogfudatim}
+\newcommand{\dds}{Donau\allowhyphens-""Dampfschiff}.
+\end{ogfudatim}
+
+\item Man kann einen Font mit einem \cs{hyphenchar} ungleich
+\glq\verb|`\-|\grq\ benutzen, damit \TeX\ nicht ein
+\cs{discretionary} nach dem Bindestrich einf"ugt. Dadurch kann der
+Wortteil vor dem Bindestrich getrennt werden. Damit der Rest auch noch
+getrennt wird, mu"s nach dem Bindestrich wieder ein `{\em glue item}'
+eingef"ugt werden. Wir werden darauf noch eingehen, wenn die neuen
+EC-Fonts ihre $\beta$-Phase beendet haben.
+
+\end{enumerate}
+Man kann aber mit Hilfe von \cs{allowhyphens} und Makros (siehe Punkt
+(1)) ganz gut leben.
+
+\r Und warum kann ich das Donau-Dampfschiff nicht in die
+Ausnahmeliste aufnehmen?
+
+\p Innerhalb des
+\cs{hyphenation}-Befehls hat das Zeichen \sq{{\tt- }} {\it immer\/}
+die Bedeutung einer Trennstelle. Es ist "uberhaupt nicht m"oglich,
+einen Bindestrich als "`normalen"' Wortbestandteil einzugeben. Ein
+weiterer kleiner Designfehler in \TeX, den man leider auch durch
+Tricks nicht umgehen kann. \indexcs{hyphenation!und Bindestriche}
+Wenn Sie aber die L"osung mit \cs{allow\-hyphens} und \verb+""+
+verwenden, k"onnen Sie f"ur die einzelnen Wortteile f"ur sich
+die Ausnahmen angeben.
+
+\r Auf diese Weise also. Nun kann es aber zu "ublen Trennungen bei
+Ausdr"ucken wie "`(Sub-)Indizes"' kommen; dieses kann ja eventuell als
+"`(Sub-)Indizes"' getrennt werden.
+
+\p So kann es sein. Abhilfe verspricht in diesem besonderen Fall die
+Verwendung einer \cs{mbox}: Schreiben Sie einfach
+\glq\verb|{mbox{(Sub-)}Index}|\grq.
+
+\r Andererseits kann aber auch der Fall eintreten, da"s am Bindestrich
+selbst nicht getrennt werden soll, wie z.\,B.\ im Wort \glq
+A-H"ornchen\grq. Wie gehe ich hier vor?
+
+\p Hier k"onnen Sie \glq\verb|A"~H"ornchen| eingeben. \verb|"~|
+erzeugt einen expliziten Bindestrich, an dem aber nicht getrennt
+werden kann.
+
+\r Also k"onnte ich das (Sub-)Index-Problem auch mittels
+%
+\begin{ogfudatim}
+(Sub"~)""Index
+\end{ogfudatim}
+%
+l"osen, denn \glq\verb|"~|\grq\ erzeugt einen Bindestrich, an
+dem die Trennung unterdr"uckt wird und
+\glq\verb|""|\grq\ erzeugt ja eine explizite leere
+Trennstelle. Gibt es in \sty{german} noch weitere
+Varianten des Trennungsstriches?
+
+\p Ja, ich stelle Sie Ihnen insgesamt vor.
+\begin{enumerate}
+\item Da ist zun"achst einmal die Ihnen bekannte Trennhilfe
+\glq\verb|"~|\grq. Im Gegensatz zu \glq\verb|\-|\grq\ verhindert sie
+jedoch nicht die Trennung an anderen, ohne die Eingabe von
+\glq\verb|"-|\grq\ gemachten, Wortstellen.
+
+\item \glq\verb|""|\grq\ f"ugt eine Trennstelle ein, die im Falle der
+Trennung an dieser Stelle allerdings keinen Trennungsstrich erzeugt.
+
+\item \glq\verb|"~|\grq\ erzeugt, wie wir oben sahen, einen
+Bindestrich, an dem nicht getrennt werden kann.
+
+\item \glq\verb|"=|\grq\ schlie"slich erzeugt einen Bindestrich,
+unterdr"uckt jedoch nicht die Trennung an anderen Wortstellen, wie es
+ein gew"ohnlicher Bindestrich machen w"urde.
+\end{enumerate}
+
+\r Welche Parameter beeinflussen die Trennung noch?
+
+\p \TeX\ ab der Version 3.0
+kennt noch zwei weitere wichtige Parameter, die die Trennung eines
+Wortes beeinflussen, n"amlich \cs{lefthyphenmin} bzw.\
+\cs{righthyphenmin}. Diese Parameter geben an, wieviele Buchstaben
+bei einer Trennung mindestens links bzw.\ rechts vom Trennungsstrich
+stehen m"ussen. "Ublicherweise sind diese Parameter in einer deutschen
+Version auf \glq2\grq\ gesetzt, so da"s auch ein Wort wie beispielsweise
+\glq al-so\grq\ getrennt werden kann.
+
+\subsection{Trennung in verschiedenen Sprachen}
+
+\r Nun, das war viel auf einen Schlag; aber ich mu"s noch wissen, woher
+denn \TeX\ wei"s, gem"a"s welcher Sprache die W"orter zu trennen sind?
+
+\p Auch auf diese wichtige Frage will ich Ihnen die Antwort nicht
+schuldig bleiben. \TeX\,$3.x$ (und diese Version verwenden Sie ja)
+erlaubt es Ihnen im Unterschied zu "alteren \TeX-Versionen, Trennmuster
+f"ur verschiedene Sprachen in einem Dokument zu benutzen. \TeX\ mit
+einer Versionsnummer 3.0 oder h"oher besitzt einen neuen internen
+Z"ahler namens \cs{language}, der eine von bis zu 256 Trenntabellen
+ausw"ahlt. Nach \cs{language=1} wird die Trenntabelle verwendet, die
+auf Position~1 im Ini\TeX-Lauf geladen wurde. Wurden f"ur eine
+Position {\em keine\/} Patterns geladen, so wird nicht mehr getrennt.
+(Wie sollte \TeX\ denn auch?!) \sty{german} setzt nun auch beim
+Sprachwechsel diesen neuen Counter mit um und nimmt dabei an, da"s f"ur
+\cs{language=0} die US-amerikanische (englischen) und f"ur
+\cs{language=1} die deutsche Trenntabelle geladen wurden. Daher
+sind beim Erzeugen des Formatfiles noch folgende lokale Modifikationen
+vorzunehmen.
+
+\begin{ogfudatim}
+\language=0
+\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
+\input ehyphen
+
+\language=1
+\lefthyphenmin=2 \righthyphenmin=2
+\input ghyphen
+\language=0
+\end{ogfudatim}
+
+\r Lokale Modifikationen? Was verstehen Sie darunter?
+
+\p Nun, bei meiner Implementierung verh"alt es sich so: Es existiert
+eine Datei namens {\tt lplain.tex}, die eine an \LaTeX\ angepa"ste
+Version der {\sc Knuth}schen {\tt plain.tex}-""Makrodatei enth"alt. Am
+Ende dieser Datei finden Sie die Zeilen:
+\begin{ogfudatim}
+\typeout{Input any local modifications here.}.
+\end{ogfudatim}
+Und eben nach diesen Zeilen f"ugen Sie o.\,g.\ lokalen Modifikationen
+ein. (Das ist "ubrigens auch der Ort, an dem s"amtliche andere
+Modifikationen, wie zum Beispiel das Einlesen von \AmS-\LaTeX\ und
+\PiCTeX, durchzuf"uhren sind.) Da wir gerade bei den Modifikationen
+sind, mu"s ich Sie auf Folgendes aufmerksam machen. In {\tt
+latex.tex} wird dem Symbol \glq\verb|@|\grq\ eine besondere Bedeutung
+beigemessen.
+
+\r Ja, das habe ich schon gesehen; es taucht in vielen
+Kontrollsequenzen auf.
+
+\r Dieses Zeichen weist darauf hin, da"s die Kontrollsequenz, die es
+enth"alt, ein {\em low-level}-Kommando ist. Um dem Normalanwender
+"Arger zu ersparen, kann dieses Zeichen nicht mehr als ein normaler
+Buchstabe im Text eingegeben werden, damit nicht versehentlich eine
+dieser Kontrollsequezen umdefiniert wird.
+
+\r Eine durchaus sinnvolle Einrichtung.
+
+\p Durchaus. Wollen Sie daher mit den lokalen Modifikationen
+beispielsweise erzielen, da"s h"aufig ben"otigte {\tt .sty}-Dateien
+in die {\tt .fmt}-Datei mit aufgenommen werden, so sollten Sie
+\begin{ogfudatim}
+\makeatletter
+\input{xyz.sty}
+\makeatother
+\end{ogfudatim}
+eingeben. Der Befehl \cs{makeatletter} verwandelt \glq\verb|@|\grq\
+in einen Buchstaben und \cs{makeatother} macht ihn wieder zu einem
+Nicht-Buchstaben.
+
+\r Vielen Dank f"ur diesen wichtigen Hinweis. Allerdings sollte man
+doch gewi"s nicht jede beliebige {\tt .sty}-Datei mitdumpen.
+
+\p Durchaus nicht. Geeignete Kandidaten sind etwa \PiCTeX\ oder
+\AmS-\LaTeX. Und gerade bei \AmS-\LaTeX\ ist etwas wesentliches zu
+beachten. In \AmS-\LaTeX\ wird n"amlich \cs{makeatother} umdefiniert,
+was zur Folge hat, da"s andere {\tt .sty}-Dateien, die den
+Klammeraffen \verb|@| als Befehlszeichen nutzen (wie etwa
+\sty{array}), gef"ahrlich ins Schleudern kommen. Sie sollten, wenn
+Sie \AmS-\LaTeX\ mit in die {\tt .fmt}-Datei aufnehmen wollen, etwa
+Folgendes als lokale Modifikation eintragen.
+\begin{ogfudatim}
+\makeatletter % macht @ zu einem Buchstaben
+\input{amstex.sty}
+% Wegen der Umdefinition von \makeatother in amstex.sty wird die
+% Originaldefinition von \makeatletter aus latex.tex jetzt
+% restauriert...
+\def\makeatother{\catcode`\@=12\relax}
+% ... und nun auch verwenden:
+\makeatother
+\end{ogfudatim}
+
+\r Ein brauchbarer Hinweis. Lassen Sie uns aber jetzt auf unser
+Trennproblem zur"uckkommen!
+
+\p Das sollten wir tun.
+In \sty{german} ist standardm"a"sig das deutsche Trenntabelle
+aktiv. Mittels \verb|\selectlanguage{USenglish}| kann dann im Text auf
+englische Trennmuster umgeschaltet werden. Blicken wir noch einmal auf
+das erste Zitat von \DEK; der Eingabetext lautete hier:
+\begin{ogfudatim}
+\begin{quote}\selectlanguage{USenglish}
+``[\dots] Thus, a box or rule or math formula or discretionary
+ following too closely [...] will not be further hyphenated
+ by the algorithm.)''
+\end{quote}.
+\end{ogfudatim}
+Ohne das Umschalten auf englische Trennmuster mittels der Anweisung
+\begin{ogfudatim}
+\selectlanguage{USenglish},
+\end{ogfudatim}
+w"are der Text so umgebrochen worden:
+\begin{quote}
+``[\dots] Thus, a box or rule or math formula or discretionary following
+ too closely upon the trial word will inhibit hyphenation. (Since \TeX\
+ inserts empty discretionaries after explicit hyphens, these rules
+ imply that already-hyphenated compound words will not be further
+ hyphenated by the algorithm.)''
+\end{quote}
+Beachten Sie die falsche Trennung des Wortes `following'!
+
+\r Man kann also einfach mittels des Kommandos \cs{selectlanguage}
+in den Trennalgorithmus einer andern Sprache umschalten (sofern daf"ur
+eben Trenntabellen mitgedumpt wurden). Jetzt habe ich nur noch ein
+letztes Problem mit Trennungen.
+
+\subsection[Zu lange Abschnittstitel]{Was kann man machen, wenn eine
+Kapitel"uberschrift zu lang ist, als da"s sie in den lebenden
+Kolumnentitel pa"st?}
+
+\p Die Antwort auf diese Frage ist leicht. Sie denken sich einen
+pr"agnanten Titel f"ur den lebenden Kolumnentitel aus und notieren Ihr
+Abschnittskommando etwa so:
+%
+\begin{ogfudatim}
+\subsection[Zu lange Abschnittstitel]{Was kann man manchen, wenn
+eine Kapitel"uberschrift zu lang ist, als da"s sie in den
+lebenden Kolumnentitel pa"st?}
+\end{ogfudatim}
+\endinput