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, 21:51

Felix's gravatar image

Felix
1.3k525667
Akzeptiert-Rate: 47%

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, 22:04) cgnieder

@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, 22: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, 22:27) cgnieder

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, 22:22

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 20 Jun '13, 10:17

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:

×257
×16

gestellte Frage: 16 Jun '13, 21:51

Frage wurde gesehen: 22,880 Mal

zuletzt geändert: 20 Jun '13, 10:17