648 Stimmen

Wie kann man Text in LaTeX-Tabellen umbrechen?

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

Hängt es irgendwie mit der Breite des Tisches zusammen? Aber da es die Breite der Seite überschreitet, macht es einen Unterschied?

0 Stimmen

Ich war auf der Suche nach einer Möglichkeit, ein langes Wort umzubrechen, die andere Lösung entspricht besser meinen Bedürfnissen tex.stackexchange.com/questions/198325/wrap-word-in-table-cell

798voto

moinudin Punkte 125641

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

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

EDIT: (aufgrund der Kommentare)

\begin{table}[ht]
    \centering
    \begin{tabular}{p{0.35\linewidth} | p{0.6\linewidth}}
      Column 1  & Column2 \\ \hline
      This text will be wrapped & Some more text \\
      Some text here & This text maybe wrapped here if its tooooo long \\
    \end{tabular}
    \caption{Caption}
    \label{tab:my_label}
\end{table}

erhalten wir:

enter image description here

52 Stimmen

Gute Lösung, aber lassen Sie das "|" weg, wenn Sie keinen Rand um den Tisch haben wollen. Es würde dann zu \begin{tabular}{p{1cm}p{3cm}}

115 Stimmen

Gibt es eine Möglichkeit, dies zu tun und trotzdem die Ausrichtung in jeder Zelle anzugeben?

11 Stimmen

Ich habe eine Möglichkeit 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 {Tabellen}{|L|L|L|L|L|L|L|L|L|L|L|L|L}

170voto

Damien Pollet Punkte 6288

Mit dem regulären tabular Umgebung wollen Sie die p{width} Spaltentyp, wie marcog angibt. Aber das zwingt Sie dazu, explizite Breiten anzugeben.

Eine weitere Lösung ist die tabularx Umwelt:

\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 erhalten die gleiche Breite. Sie können dies beeinflussen, indem Sie \hsize in der Formatangabe:

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

aber dann müssen sich alle Faktoren zu 1 summieren, nehme ich an (ich habe dies aus dem LaTeX-Begleitheft übernommen). Es gibt auch das Paket tabulary der die Spaltenbreiten anpasst, um die Zeilenhöhen auszugleichen. Für die Details können Sie die Dokumentation für jedes Paket mit texdoc tabulary (in TeXlive).

5 Stimmen

Interessant, das sieht wirklich nützlich aus. Wie intelligent ist es, wenn es um die Auswahl der Spaltenbreite geht? Wenn Sie zum Beispiel zwei Spalten haben, die umbrochen werden müssen, aber eine viel länger ist als die andere, werden sie dann trotzdem gleich breit?

4 Stimmen

Ich habe meine Antwort geändert. Aber in der Praxis versuche ich, meine Tabellen so zu vereinfachen, dass ich nur X für eine einzige Spalte brauche. Ich habe gerade Tabulary entdeckt :)

63voto

Neil Rubens Punkte 691

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

\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}

9 Stimmen

Danke, dadurch konnte ich die itemize Listen in meinen Zellen.

1 Stimmen

Ich denke, die Antwort sollte die Bedeutung von \columnwidth : Als ich es ausprobierte, schien es eher eine Tabellenbreite als eine Spaltenbreite zu sein, also musste ich eine manuelle Proportion einstellen wie 0.2\columnwidth um eine angemessene Breite zu erhalten.

51voto

ozi Punkte 1451

Ich mag die Einfachheit von tabulary paquete:

\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} 

In diesem Beispiel ordnen Sie die gesamte Breite der Tabelle in Bezug auf die \textwidth. Z.B. 0,4 davon. Der Rest wird dann automatisch vom Paket erledigt.

Die meisten Beispiele stammen aus http://en.wikibooks.org/wiki/LaTeX/Tables .

0 Stimmen

Haben Sie eine Idee, warum das bei mir nicht funktionieren würde?

51voto

Shayan Amani Punkte 4881

Einfach wie ein Stück CAKE!

Sie können einen neuen Spaltentyp definieren wie ( L in diesem Fall), während Beibehaltung der derzeitigen Ausrichtung ( c , r o 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}

enter image description here

0 Stimmen

Wie kann man den Text in dem "mehrzeiligen Stück ..." zentriert ausrichten?

0 Stimmen

@Jung bemerken, dass sie L in der entsprechenden Spalte \begin{tabular}{|c|L|L|}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X