Jak zawijać tekst w tabelach LaTeX?

454

Tworzę raport w LaTeX, który obejmuje kilka tabel. Utknąłem na tym, ponieważ dane mojej komórki w tabeli przekraczają szerokość strony. Czy mogę w jakiś sposób owinąć tekst, aby znalazł się w następnym wierszu w tej samej komórce tabeli?

Czy ma to jakiś związek z szerokością stołu? Ale czy przekracza to szerokość strony, czy to coś zmieni?

Arnkrishn
źródło
Szukałem sposobu na zawarcie długiego słowa, inne rozwiązanie lepiej odpowiada moim potrzebom tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Odpowiedzi:

513

Użyj p {szerokość} dla specyfikatorów kolumn zamiast l / r / c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
moinudin
źródło
37
Dobre rozwiązanie, ale stracić „|” jeśli nie chcesz obramowania wokół stołu. Stało się wtedy\begin{tabular}{p{1cm}p{3cm}}
Andrejas
83
Czy jest jakiś sposób, aby to zrobić, jednocześnie określając wyrównanie w każdej komórce?
Dylan Knowles
7
Znalazłem sposób na określenie wyrównania w każdej komórce! Utwórz makro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Porównanie} \ centrowanie% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian
8
Co jeśli mam dwie kolumny, w których pierwsza powinna być tak długa, jak to konieczne, aby zmieścić jej zawartość, a druga powinna wypełniać się do szerokości linii podczas owijania? Tak więc w zasadzie potrzebujębegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander
118
Świetne rozwiązanie. Zalecam jednak stosowanie wartości względnych zamiast arbitralnego wymiaru, np.p{0.2\linewidth}p{0.6\linewidth}}
jgyou,
139

W zwykłym tabularśrodowisku chcesz używać p{width}typu kolumny, jak wskazuje marcog. Ale to zmusza cię do podania wyraźnych szerokości.

Innym rozwiązaniem jest tabularxśrodowisko:

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

Wszystkie kolumny X mają tę samą szerokość. Możesz na to wpłynąć, ustawiając \hsizew deklaracji formatu:

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

ale potem wszystkie czynniki muszą sumować się do 1, jak sądzę (wziąłem to od towarzysza LaTeXa). Istnieje również pakiet, tabularyktóry dostosuje szerokości kolumn w celu zrównoważenia wysokości wierszy. Aby uzyskać szczegółowe informacje, możesz uzyskać dokumentację dla każdego pakietu za pomocą texdoc tabulary(w TeXlive).

Damien Pollet
źródło
3
Ciekawe, to wygląda naprawdę przydatne. Jak inteligentny jest wybór szerokości kolumn? Na przykład, jeśli masz dwie kolumny, które muszą być zawinięte, ale jedna z dużo dłuższym tekstem niż druga, czy nadal przypisuje im równą szerokość?
moinudin
2
Zredagowałem swoją odpowiedź. Ale w praktyce próbuję uprościć swoje tabele, tak że potrzebuję tylko X dla jednej kolumny. Właśnie odkryłem tabulaturę :)
Damien Pollet,
49

Inną opcją jest wstawienie minipage w każdej komórce, w której pożądane jest zawijanie tekstu, np .:

\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
źródło
8
Dzięki, dzięki temu mogłem umieszczać itemizelisty w moich komórkach.
Quentin Pradet,
Myślę, że odpowiedź powinna wyjaśniać znaczenie \columnwidth: Kiedy spróbowałem, wydawało się, że ma ona większą szerokość tabeli niż szerokość kolumny, więc musiałem ustawić proporcję manualną, 0.2\columnwidthaby uzyskać rozsądną szerokość.
U. Windl
37

Podoba mi się prostota tabularypakietu:

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

W tym przykładzie ustawiasz całą szerokość tabeli w odniesieniu do \ textwidth. Np. 0,4. Następnie reszta jest automatycznie wykonywana przez pakiet.

Większość przykładów pochodzi z http://en.wikibooks.org/wiki/LaTeX/Tables .

ozi
źródło
20

Prosty jak kawałek ciasta!

Można zdefiniować nowy typ kolumny podobne ( Lw tym przypadku), podczas gdy utrzymanie obecnego wyrównanie ( c, rlub 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}

wprowadź opis zdjęcia tutaj

Shayan Amani
źródło
5

Jeśli chcesz zawinąć tekst, ale zachować wyrównanie, możesz owinąć tę komórkę w środowisku minipagelub varwidth(zmienność pochodzi z pakietu zmienności). Szerokość będzie „tak szeroka, jak jej zawartość, ale nie szersza niż X”. Możesz utworzyć niestandardowy typ kolumny, który działa jak „p {xx}”, ale zmniejsza się w celu dopasowania, używając

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

które mogą wymagać arraypakietu. Następnie, gdy użyjesz czegoś takiego jak \begin{tabular}{llM{2in}}pierwsze dwie kolumny, będziemy normalnie wyrównani do lewej, a trzecia kolumna będzie normalnie wyrównana do lewej, ale jeśli będzie szersza niż 2 cale, tekst zostanie zawinięty.

Cheshirekow
źródło
1

Aby zmienić tekst ABna A \r Bw komórce tabeli, umieścić to w pozycji komórek: \makecell{A \\ B}.

Zanim to zrobisz, musisz również dołączyć pakiet makecell.

FlowerBeach
źródło
-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
źródło
Głosuj To jest odpowiedź tylko na kod, bez żadnego wyjaśnienia.
starbeamrainbowlabs,
1
Co więcej, jest to i tak błędne, ponieważ drugi wiersz zawiera 4 komórki, w których tabela jest zaprojektowana tak, aby pomieścić tylko dwie kolumny. I tak nie jest to związane z zawijaniem zawartości komórki.
Ahmed salah