Come avvolgere il testo nelle tabelle LaTeX?


454

Sto creando un rapporto in LaTeX che coinvolge alcune tabelle. Sono bloccato su questo dato che i miei dati di cella nella tabella stanno superando la larghezza della pagina. Posso in qualche modo avvolgere il testo in modo che rientri nella riga successiva nella stessa cella della tabella?

È in qualche modo correlato alla larghezza della tabella? Ma siccome sta superando la larghezza della pagina, farà la differenza?


Stavo cercando un modo per racchiudere la parola lunga, l'altra soluzione si adatta meglio alle mie esigenze tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Risposte:


514

Utilizzare p {larghezza} per gli identificatori di colonna anziché l / r / c.

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

37
Buona soluzione, ma perdi il '|' se non vuoi un bordo attorno al tavolo. Dopodiché diventerebbe\begin{tabular}{p{1cm}p{3cm}}
Andrejas il

83
C'è un modo per farlo mentre si specifica ancora l'allineamento in ogni cella?
Dylan Knowles,

7
Ho trovato un modo per specificare l'allineamento in ogni cella! Crea una macro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Comparison} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian

8
Cosa succede se ho due colonne in cui la prima dovrebbe essere lunga quanto basta per adattarsi al suo contenuto e l'altra dovrebbe riempire per la larghezza della linea, mentre si avvolge? Quindi, fondamentalmente, ho bisogno dibegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander,

118
Ottima soluzione Tuttavia, consiglierei di utilizzare valori relativi anziché dimensioni arbitrarie, ad esempiop{0.2\linewidth}p{0.6\linewidth}}
jgyou

139

Con l' tabularambiente normale , si desidera utilizzare il p{width}tipo di colonna, come indica marcog. Ma questo ti costringe a dare larghezze esplicite.

Un'altra soluzione è l' tabularxambiente:

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

Tutte le colonne X hanno la stessa larghezza. Puoi influenzarlo impostando \hsizela dichiarazione del formato:

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

ma poi tutti i fattori devono riassumere fino a 1, suppongo (l'ho preso dal compagno LaTeX). C'è anche il pacchetto tabularyche regolerà le larghezze delle colonne per bilanciare le altezze delle file. Per i dettagli, è possibile ottenere la documentazione per ciascun pacchetto con texdoc tabulary(in TeXlive).


3
Interessante, sembra davvero utile. Quanto è intelligente quando si tratta di selezionare le larghezze delle colonne? Ad esempio, se hai due colonne che devono essere racchiuse ma una con un testo molto più lungo dell'altra, le assegna comunque alla stessa larghezza?
Moinudin,

2
Ho modificato la mia risposta. Ma in pratica, provo a semplificare le mie tabelle in modo che mi serva solo X per una singola colonna. Ho appena scoperto il tabulario :)
Damien Pollet,

50

Un'altra opzione è quella di inserire un minipage in ogni cella in cui si desidera avvolgere il testo, ad esempio:

\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
Grazie, questo mi ha permesso di inserire itemizeelenchi nelle mie celle.
Quentin Pradet,

Penso che la risposta dovrebbe spiegare il significato di \columnwidth: Quando l'ho provato, sembrava essere più larghezza della tabella piuttosto che larghezza della colonna, quindi ho dovuto impostare una proporzione manuale come 0.2\columnwidthottenere una larghezza ragionevole.
U. Windl,

37

Mi piace la semplicità del tabularypacchetto:

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

Nell'esempio, disponi l'intera larghezza della tabella rispetto a \ textwidth. Ad esempio 0,4. Quindi il resto viene eseguito automaticamente dal pacchetto.

Gran parte dell'esempio è tratto da http://en.wikibooks.org/wiki/LaTeX/Tables .


20

Semplice come un pezzo di TORTA!

Puoi definire un nuovo tipo di colonna come ( Lin questo caso) mantenendo l'attuale allineamento ( c, ro 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}

inserisci qui la descrizione dell'immagine


5

Se vuoi racchiudere il testo ma mantenere l'allineamento, puoi avvolgere quella cella in un minipageo varwidthambiente (varwidth deriva dal pacchetto varwidth). Varwidth sarà "largo quanto i suoi contenuti ma non più largo di X". Puoi creare un tipo di colonna personalizzato che si comporta come "p {xx}" ma si restringe per adattarsi utilizzando

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

che potrebbe richiedere il arraypacchetto. Quindi quando usi qualcosa come \begin{tabular}{llM{2in}}le prime due colonne, siamo allineati a sinistra normali e la terza colonna sarà allineata a sinistra normale, ma se diventa più larga di 2 pollici, il testo verrà spostato.


1

Per modificare il testo ABin A \r Buna cella di una tabella, mettere questo nella posizione della cella: \makecell{A \\ B}.

Prima di farlo, devi anche includere il pacchetto makecell.


-12
\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. Questa è una risposta di solo codice, senza alcuna spiegazione.
Starbeamrainbowlabs

1
Inoltre, è sbagliato comunque poiché la seconda riga contiene 4 celle in cui la tabella è progettata per contenere solo due colonne. E non è comunque correlato al wrapping del contenuto delle celle.
Ahmed Salah,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.