In meinem mathematischen Dokument verwende ich oft Theoreme und Konstanten, die nach mehreren Autoren benannt sind, und daher mit Bindestrich geschrieben werden. Oder z.B. die Tschebyscheff-Funktion, die als Tschebyschefffunktion nicht gut aussieht, auch nicht mit nur zwei f, daher der Bindestrich.

LaTeX trennt die Wörter nicht, obwohl ich babel mit ngerman-Option geladen habe. Ich lasse die Trennstellen nach Herberts Tipp mit showhyphens anzeigen:

\documentclass{article}
\usepackage[ngerman]{babel}
\begin{document}
\showhyphens{Euler-Mascheronische Konstante}
\showhyphens{Tschebyscheff-Funktion}
\end{document}

zeigt mir in der Log-Datei:

\OT1/cmr/m/n/10 Euler-Mascheronische Kon-stan-te
\OT1/cmr/m/n/10 Tschebyscheff-Funktion

Nur "Konstante" kann getrennt werden.

Wir kann ich erreichen, dass auch zusammengesetzte Wörter getrennt werden können?

gefragt 27 Jun '13, 21:45

jan12's gravatar image

jan12
770272732
Akzeptiert-Rate: 100%


Wörter mit Bindestrichen wie

Tschebyscheff-Funktion

trennt TeX nur an den Bindestrichen und sonst nicht, weil der Bindestrich - (genauer: ein Zeichen mit Codewert \hyphenchar) automatisch eine explizite Trennstelle in Form von \discretionary{}{}{} einfügt. Da bestimmte Dinge verhindern, dass TeX ein Wort trennt, darunter ein im Wort vorkommendes \discretionary, aber auch eine direkt an einem Wort stehende Box (daher ist in LaTeX \footnote bzw. \footnotemark auch nicht einfach als Box mit hochgestelltem Zeichen definiert), wird nur noch am Bindestrich getrennt.

Damit die mit Bindestrich verbundenen Wortteile automatisch von TeX getrennt werden, muss man diesen automatisch eingefügten \discretionary entweder vermeiden oder "maskieren". Hierfür definiert im Babel-Paket die Option "german" bzw. "ngerman" (und einige weitere) die Kürzel

  • "= ... Bindestrich mit automatischer Trennung davor und danach,
  • "- ... Trennstelle, bei Trennung wird Trennstrich wie gewohnt eingefügt,
  • "" ... Trennstelle, bei Trennung wird nichts eingefügt,

neben dem Standard-TeX-Befehl \-, der nur eine Abkürzung für \discretionary{-}{}{} ist, aber eben die Trennung in den Wortteilen davor und danach verhindert. Verwendet man das Kürzel wie in

Tschebyscheff"=Funktion

werden alle möglichen Trennstellen gefunden.

Wie funktionieren diese Kürzel?

Wie erlauben diese Kürzel die Trennung in den Wortteilen davor und danach?

Das Kürzel "= ist intern als

\penalty 10000     % = \nobreak
-%
\hskip 0pt\relax  % = \allowhyphens

definiert. Im "The TeXbook" am Ende von Anhang H "Hyphenation" oder im Buch "TeX by Topic" in Abschnitt 19.4 "Hyphenation" wird beschrieben, wie TeX nach einem zu trennenden Wort in der Abfolge von Zeichen sucht und welche Regeln und Einschränkungen sonst noch gelten:

Die Suche nach einem zu trennenden Wort beginnt immer an einem Glue/Skip-Node, d.h. vor einem Wort muss ein dehnbarer Abstand existieren. Das obige \hskip 0pt\relax (entspricht in LaTeX \hspace{0pt}) fügt einen solchen Abstand ein, so dass nun das Wort nach dem Bindestrich im verwendeten Kürzel "= wieder getrennt wird.

Diese Beschränkung von TeX ist übrigens auch der Grund, wieso das erste Wort eines Absatzes nicht getrennt wird. Zu Beginn eines Absatzes ist vor dem ersten Wort entweder nichts, falls kein Einzug (\parindent = 0pt) eingefügt wird, oder als Einzug ein fester Abstand eingefügt worden, jedoch kein dehnbarer Abstand. Tipp: Um bei einem sehr langen ersten Wort eines Absatzes die Trennung zu erlauben, markiert man die erste sinnvolle Trennstelle mit "-.

Nach dem Glue-Node sucht TeX die Liste der nachfolgenden Zeichen nach dem Start eines Wortes, also nach einem Zeichen, das einen zugeordneten Kleinbuchstaben besitzt (\lccode (zeichen) > 0), oder eine Ligatur, die aus einem solchen Zeichen besteht. Bei der Suche werden alle Zeichen, die keinen Kleinbuchstaben zugeordnet haben (\lccode (zeichen) = 0 bzw. außerhalb des Bereichs 0..255), ignoriert. Dies sind meist Satz- oder Interpunktionszeichen, die eine Trennung nicht verhindern sollen. Außerdem werden auch implizite Kerns, also feste Abstände, die aus der Unterschneidung stammen, ebenfalls ignoriert. Trifft TeX bei der Suche nach einem ersten Zeichen eines Wortes auf andere Dinge, wie Box-, Rule-, Whatsit-, Mathon- und die anderen Node-Typen, wird die weitere Suche abgebrochen und beim nächsten Glue wieder neu begonnen.

Hat TeX nun einen Wortanfang gefunden, werden alle nachfolgenden Zeichen, die einen zugeordneten Kleinbuchstaben haben, aufgesammelt. Dabei werden Ligaturen wieder in die Einzelbuchstaben aufgebrochen und implizite Kerns (aus den Unterschneidungen) überlesen.

Trifft TeX beim Aufsammeln schließlich auf ein Zeichen ohne zugeordneten Kleinbuchstaben oder auf ein Nicht-Zeichen, stoppt das weitere Aufsammeln des zu trennenden Wort. Je nachdem, welche Dinge nach dem letzten Zeichen des zu trennenden Wort folgen, bricht TeX die Trennung komplett ab, trennt das Wort also nicht ... oder, wenn alles ok ist, trennt TeX das soeben aufgesammalte Wort:

  • Die Trennung wird verhindert, wenn danach eine Box, eine Rule, eine mathematische Formel oder ein discetionary folgt. Letzteres ist auch der Grund, wieso Wörter mit Bindestrich nicht automatisch getrennt werden.
  • Die Trennung wird durchgeführt, wenn danach ein Glue oder ein expliziter Kern folgt, ein penalty, ein Whatsit, ein mark, insert oder vadjust folgt. Von diesen Dingen hat ein penalty, der eine Trennung verhindert, die wenigsten Seiteneffekte, so dass im Kürzel "= vor dem Bindestrich ein penalty10000 (= nobreak) verwendet wird, so dass ein Zeilenumbruch an dieser Stelle verhindert, die automatische Trennung des Wortes vor dem Bindestrich ermöglicht wird.

Die anderen Kürzel sind entsprechend definiert, also beim Kürzel "" ganz ohne Bindestrich in der Definition oder beim Kürzel "- mit \- statt des einfachen Bindestrichs.

Wer noch mehr wissen will und die vollständigen Regeln und Ausnahmen wissen will, sei auf die genannten Literaturstellen verwiesen.

Permanenter link

beantwortet 28 Jun '13, 20:40

bernd's gravatar image

bernd
21614
Akzeptiert-Rate: 33%

Meines Wissen bedeutet "", dass eine "Trennstelle ohne Trennfunktion" eingefügt wird. Oder anders ausgedrückt: an der so markierten Stelle kann LaTeX nicht trennen ...

(01 Jul '13, 23:47) kurt
1

@kurt "" ist definiert als \declare@shorthand{ngerman}{""}{\hskip\z@skip}, fügt also eine erlaubte Trennstelle ein und sonst nichts

(01 Jul '13, 23:56) cgnieder

@kurt, @Clemens: "" fügt keine Trennstelle, sondern eine mögliche Umbruchstelle (im Gegensatz zu Trennstellen ohne Trennstrich) in Form von horizontalem Abstand der Länge 0 ein. Das ist aber keineswegs nichts, weil es (als Nebeneffekt) sowohl Ligaturen als auch das Kerning bricht. Bei Verwendung von lmodern kann man das beispielsweise bei der Kombination V""A im Gegensatz zu VA oder f""l im Gegensatz zu fl erkennen.

(02 Jul '13, 12:49) saputello
1

@saputello ich stelle fest, dass auf deutsch zu antworten (für mich) offenbar viel schwieriger ist als auf englisch... Mit „Trennstelle“ meinte ich „Umbruchstelle“. Aber das \hskip\z@ nichts wäre, habe ich nicht behauptet... ;)

(02 Jul '13, 12:54) cgnieder

@clemens Ich will Dir auch gar nichts unterstelle, ich will nur Missverständnissen vorbeugen. Und »fügt also eine erlaubte Umbruchstelle [Anm. korrgiert durch mich] ein und sonst nichts« birgt für mich das Potential für das Missverständnis, dass es eben außer einem möglichen Umbruch keine weiteren Auswirkungen habe. Daher mein Kommentar.

(02 Jul '13, 13:09) saputello

@saputello so hab ich Dich auch verstanden. :) Mein Kommentar ist wohl eher eine Notiz an mich zu versuchen, mich weniger missverständlich auszudrücken...

(02 Jul '13, 13:18) cgnieder
Ergebnis 5 von 6 show 1 more comments

Bindestrichwörter mit ngerman und babel im Text immer so: Euler"=Mascheronische, Tschebyscheff"=Funktion Vorausgesetzt, dass auch andere Trennungen zulässig sein sollen. Weitere Erklärungen findest du in der Doku zu babel.

Permanenter link

beantwortet 27 Jun '13, 21:56

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 27 Jun '13, 22:09

@Herbert Ich möchte ja nich fies sein, aber kannst du das bitte im Satz formulieren und dann bitte meinen Kommentar löschen? ;- )

(27 Jun '13, 21:59) Johannes

Wenn ich's nicht schon wüsste, würde ich jetzt zwei Dinge nachfragen: wieso funktioniert "=? Whoher kommt das und was macht das? Und was mache ich in einem nicht-deutschen Dokument, also ohne Option ngerman?

(27 Jun '13, 22:02) cgnieder
1

@clemens: Das hängt damit zusammen, wie TeX zu trennende Wörter bzw. besser Folge von Glyphen bestimmt: Vereinfacht beginnt TeX an einem Skip/Glue - üblicherweise ein dehnbarer Wortzwischenraum, also vor einem Wort - mit dem Aufsammeln der Buchstaben eines Wortes. Dann sammelt er solange, bis eine Nicht-Glyphe, dem kein Kleinbuchstabe (lccode) zugeordnet ist, auftaucht - üblicherweise also wieder ein Wortzwischenraum oder ein Satzzeichen, also das Wortende. Bevor begonnen wird, werden noch Sonderfälle abgefragt ... und genau die verhindern die Trennung.

(27 Jun '13, 23:33) bernd
1

(Forts.) "= nutzt nun zwei Tricks: Es fügt ein zulässiges Wortende ein, das gleichzeitig eine Trennung verhindert, fügt dann ein `-' ein und anschließend noch einen 0pt-Skip, damit der Wortteil, nach dem Bindestrich auch getrennt werden kann. Die Kürzel "-, "", "= verwenden alle denselben "Trick", damit die automatische Trennung davor und danach weiterhin bzw. wieder funktioniert.

(27 Jun '13, 23:38) bernd

@bernd Danke! Mir ist durchaus klar, wieso die Trennung funktioniert wie sie funktioniert und was babel macht, damit man mit "= (in deinem deutschen Dokument) Hilfe bekommt. Allerdings könnte ich mir vorstellen, dass es anderen nicht so klar ist, die die Frage hier lesen und dann doch wieder auf die englische Doku verwiesen werden, und hätte mir darum eine etwas ausführlichere Antwort gewünscht...

(27 Jun '13, 23:42) cgnieder

Danke! Ich lasse mal noch offen - evtl. kennt jemand noch einen Weg, wo ich nicht ein ganzes Dokument durcharbeiten muss und den Quelltest weniger leserlich mache. Danke für den Tipp mit "=, das hilft schonmal.

(27 Jun '13, 23:44) jan12
Ergebnis 5 von 6 show 1 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×16
×1

gestellte Frage: 27 Jun '13, 21:45

Frage wurde gesehen: 52,579 Mal

zuletzt geändert: 12 Mai '16, 13:53