Wie wird Text in LaTeX-Tabellen eingeschlossen?


454

Ich erstelle einen Bericht in LaTeX, der einige Tabellen enthält. Ich bleibe dabei, da meine Zellendaten in der Tabelle die Breite der Seite überschreiten. Kann ich den Text irgendwie so umbrechen, dass er in die nächste Zeile in derselben Zelle der Tabelle fällt?

Hat es etwas mit der Breite des Tisches zu tun? Aber macht es einen Unterschied, wenn die Seitenbreite überschritten wird?


Ich suchte nach einer Möglichkeit, ein langes Wort zu schreiben. Die andere Lösung passt besser zu meinen Anforderungen. Tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Antworten:


513

Verwenden Sie p {width} für Ihre Spaltenspezifizierer anstelle von l / r / c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}

37
Gute Lösung, aber verlieren Sie das '|' wenn Sie keinen Rand um den Tisch wollen. Es würde dann werden\begin{tabular}{p{1cm}p{3cm}}
Andrejas

83
Gibt es eine Möglichkeit, dies zu tun, während die Ausrichtung in jeder Zelle angegeben wird?
Dylan Knowles

7
Ich habe einen Weg gefunden, die Ausrichtung in jeder Zelle festzulegen! Erstellen Sie ein Makro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Vergleich} \ centering% \ begin {tabellarisch} {| L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian

8
Was ist, wenn ich zwei Spalten habe, in denen die erste so lang sein sollte, wie es für den Inhalt erforderlich ist, und die andere beim Umbrechen bis zur Zeilenbreite gefüllt werden sollte? Also im Grunde brauche ichbegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander

118
Tolle Lösung. Ich würde jedoch empfehlen, relative Werte anstelle einer beliebigen Dimension zu verwenden, z. B.p{0.2\linewidth}p{0.6\linewidth}}
jgyou

139

In der regulären tabularUmgebung möchten Sie den p{width}Spaltentyp verwenden, wie Marcog angibt. Das zwingt Sie jedoch dazu, explizite Breiten anzugeben.

Eine andere Lösung ist die tabularxUmwelt:

\usepackage{tabularx}
...
\begin{tabularx}{\linewidth}{ r X }
    right-aligned foo & long long line of blah blah that will wrap when the table fills the column width\\
\end{tabularx}

Alle X-Spalten haben die gleiche Breite. Sie können dies beeinflussen, indem Sie \hsizein der Formatdeklaration Folgendes festlegen:

>{\setlength\hsize{.5\hsize}} X >{\setlength\hsize{1.5\hsize}} X

aber dann müssen sich wohl alle Faktoren zu 1 summieren (ich habe dies dem LaTeX-Begleiter entnommen). Es gibt auch das Paket, mit tabularydem die Spaltenbreiten angepasst werden, um die Zeilenhöhen auszugleichen. Für die Details erhalten Sie die Dokumentation für jedes Paket mit texdoc tabulary(in TeXlive).


3
Interessant, das sieht wirklich nützlich aus. Wie intelligent ist es bei der Auswahl der Spaltenbreiten? Wenn Sie beispielsweise zwei Spalten haben, die umbrochen werden müssen, aber eine mit viel längerem Text als die andere, werden sie dann immer noch gleich breit zugewiesen?
Moinudin

2
Ich habe meine Antwort bearbeitet. In der Praxis versuche ich jedoch, meine Tabellen so zu vereinfachen, dass ich nur X für eine einzelne Spalte benötige. Ich habe gerade Tabulary entdeckt :)
Damien Pollet

49

Eine andere Möglichkeit besteht darin, in jede Zelle, in der ein Textumbruch gewünscht wird, eine Minipage einzufügen, z.

\begin{table}[H]
\begin{tabular}{l}
\begin{minipage}[t]{0.8\columnwidth}%
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line %
\end{minipage}\tabularnewline
\end{tabular}
\end{table}

8
Danke, so konnte ich itemizeListen in meine Zellen einfügen.
Quentin Pradet

Ich denke, die Antwort sollte die Bedeutung von erklären \columnwidth: Als ich es versuchte, schien es eher eine Tabellenbreite als eine Spaltenbreite zu sein, also musste ich ein manuelles Verhältnis festlegen 0.2\columnwidth, um eine angemessene Breite zu erhalten.
U. Windl

37

Ich mag die Einfachheit des tabularyPakets:

\usepackage{tabulary}
...
\begin{tabulary}{\linewidth}{LCL}
    \hline
    Short sentences      & \#  & Long sentences                                                 \\
    \hline
    This is short.       & 173 & This is much loooooooonger, because there are many more words.  \\
    This is not shorter. & 317 & This is still loooooooonger, because there are many more words. \\
    \hline
\end{tabulary} 

Im Beispiel ordnen Sie die gesamte Breite der Tabelle in Bezug auf \ textwidth an. ZB 0,4 davon. Der Rest erledigt dann automatisch das Paket.

Der größte Teil des Beispiels stammt von http://en.wikibooks.org/wiki/LaTeX/Tables .


20

Einfach wie ein Stück Kuchen!

Sie können einen neuen Spaltentyp wie (definieren Lin diesem Fall) , während die aktuelle Ausrichtung beibehalten wird ( c, roder l):

\documentclass{article}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}

\begin{document}

\begin{table}
    \begin{tabular}{|c|L|L|}
        \hline
        Title 1 & Title 2 & Title 3 \\
        \hline 
        one-liner & multi-line and centered & \multicolumn{1}{m{3cm}|}{multi-line piece of text to show case a multi-line and justified cell}   \\
        \hline
        apple & orange & banana \\
        \hline
        apple & orange & banana \\
        \hline
    \end{tabular}
\end{table}
\end{document}

Geben Sie hier die Bildbeschreibung ein


5

Wenn Sie Ihren Text umbrechen möchten, aber die Ausrichtung beibehalten möchten, können Sie diese Zelle in eine minipageoder eine varwidthUmgebung einschließen (varwidth stammt aus dem varwidth-Paket). Die Varwidth ist "so breit wie der Inhalt, aber nicht breiter als X". Sie können einen benutzerdefinierten Spaltentyp erstellen, der sich wie "p {xx}" verhält, jedoch mithilfe von "verkleinert" wird

\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}

das kann das arrayPaket erfordern . Wenn Sie dann so etwas wie \begin{tabular}{llM{2in}}die ersten beiden Spalten verwenden, sind wir normal linksbündig und die dritte Spalte ist normal linksbündig, aber wenn sie breiter als 2 Zoll wird, wird der Text umbrochen.


1

Um den Text ABin A \r Beine Tabellenzelle zu ändern , platzieren Sie diesen an der Zellenposition : \makecell{A \\ B}.

Zuvor müssen Sie auch das Paket einschließen makecell.


-11
\begin{table}
 \caption{ Example of force text wrap}
 \begin{center}
  \begin{tabular}{|c|c|}
   \hline
   cell 1       &   cell 2 \\   \hline
   cell 3                &       cell 4 & & very big line that needs to be wrap. \\ \hline
   cell 5       &   cell 6 \\   \hline
  \end{tabular}
  \label{table:example}
 \end{center}
\end{table}

Downvote. Dies ist eine reine Code-Antwort ohne jegliche Erklärung.
Starbeamrainbowlabs

1
Außerdem ist es sowieso falsch, da die zweite Zeile 4 Zellen enthält, in denen die Tabelle nur zwei Spalten aufnehmen kann. Und es hat sowieso nichts mit dem Umschließen von Zelleninhalten zu tun.
Ahmed Salah
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.