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?

Arnkrishn
quelle
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}
Moinudin
quelle
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).

Damien Pollet
quelle
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}
Neil Rubens
quelle
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 .

ozi
quelle
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

Shayan Amani
quelle
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.

cheshirekow
quelle
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.

FlowerBeach
quelle
-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}
Md Monjur Ul Hasan
quelle
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