Vor allem in schmalen Tabellen-Spalten bemerke ich manchmal, dass keine Silbentrennung stattfindet, obwohl ich babel mit deutschen Trennmustern nutze und das gleiche Wort an anderer Stelle erwiesenermaßen getrennt werden kann.

Ich habe das Problem auf ein Beispiel reduzieren können.

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\begin{tabular}{|p{2.1cm}|}
  \hline
  Personalcomputer \\
  \hline
  Ein Personalcomputer \\
  \hline
\end{tabular}
\end{document}

Zum Sichtbarmachen der Zellen-Bereiche habe ich Linien eingebaut, die ich sonst vermeide. Hier sieht man das Überschreiben der Zellbegrenzung und die Trennbarkeit:

Problembeispiel Silbentrennung

Warum ist das so, und wie kann ich das reparieren?

gefragt 16 Jun '13, 15:51

Felix's gravatar image

Felix
1.3k225366
Akzeptiert: 89%

Das erste Wort in einem Absatz wird nie getrennt. Das Standardmittel dagegen ist, LaTeX vorzugaukeln, es wäre nicht das erste Wort, indem man \hspace*{0pt} davor setzt

(16 Jun '13, 16:04) Clemens

@Clemens Danke! Geht das kürzer, wie mit \mbox{} oder weniger? Kann man das global korrigieren, wenn nicht dann wenigstens für Tabellen? Kann mir vorstellen, dass Leerraum ohne Breite nicht schadet.

(16 Jun '13, 16:11) Felix

Von einer globalen Lösung, die das Trennen des ersten Wortes erlauben würde, weiß ich nichts. Soweit ich weiß, ist das Verhalten fest in TeX selbst verankert... Möglicherweise kann LuaTeX da was, damit kenne ich mich aber nicht aus.

(16 Jun '13, 16:27) Clemens

TeX trennt nie das erste Wort eines Absatzes. Das Standardmittel dagegen ist, ein \hspace{0pt} davor zu setzen. Dadurch beginnt der Absatz mit einem horizontalen Skip der Länge Null und es wird ein break point eingefügt, was im Endeffekt bedeutet, dass das erste Wort von TeX nicht als das erste Wort wahrgenommen wird. Das Einfügen einer \mbox{} nützt an dieser Stelle nichts. Ich bin mir nicht sicher warum, nehme aber an, dass es daran liegt, dass die \mbox{} noch keinen break point einfügt.

Für Tabellen gibt es durch das array-Paket eine bequeme Möglichkeit, das \hspace{0pt} in jeder Zelle der p{}-Spalte an den Anfang zu setzen: mit der >{<code>} Syntax in der Spalten-Deklaration. Damit wird <code> vor jede Zelle der folgenden Spalte eingefügt:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\begin{tabular}{|p{2.1cm}|}
  \hline
  \hspace{0pt}Personalcomputer \\
  \hline
  Ein Personalcomputer \\
  \hline
\end{tabular}

\begin{tabular}{|>{\hspace{0pt}}p{2.1cm}|}
  \hline
  \hspace{0pt}Personalcomputer \\
  \hline
  Ein Personalcomputer \\
  \hline
\end{tabular}
\end{document}

Ergebnis

Noch bequemer ist es vielleicht, einen neuen Spaltentyp dafür zu definieren:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{array}

\newcolumntype{P}[1]{>{\hspace{0pt}}p{#1}}

\begin{document}

\begin{tabular}{|P{2.1cm}|}
  \hline
  Personalcomputer \\
  \hline
  Ein Personalcomputer \\
  \hline
\end{tabular}

\end{document}
Permanenter link

beantwortet 16 Jun '13, 16:22

Clemens's gravatar image

Clemens
19.0k113060

bearbeitet 20 Jun '13, 04:17

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×185
×11

Frage gestellt: 16 Jun '13, 15:51

Frage wurde angeschaut: 6,505 Mal

Zuletzt aktualisiert: 20 Jun '13, 04:17