2009-04-26 17 views
317

Sto creando un report in LaTeX che prevede alcune tabelle. Sono bloccato su questo come i miei dati di cella nella tabella è superiore alla larghezza della pagina. Posso in qualche modo avvolgere il testo in modo che cada nella riga successiva nella stessa cella del tavolo?Come avvolgere il testo nelle tabelle LaTeX?

È in qualche modo correlato alla larghezza della tabella? Ma dato che sta superando la larghezza della pagina, non farà la differenza, vero?

risposta

344

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

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

Buona soluzione, ma perdere il '|' se non vuoi un bordo attorno al tavolo. Diventerebbe quindi '\ begin {tabular} {p {1cm} p {3cm}}' – Andrejas

+62

Esiste un modo per farlo mentre si specifica ancora l'allineamento in ogni cella? –

+5

Ho trovato un modo per specificare l'allineamento in ogni cella! Crea una macro! \ Newcolumntype {L} {> {\ centraggio \ arraybackslash} {m.8 centimetri}} \ begin {table *} [t] % \ piccolo \ caption {Confronto} \ centraggio % \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |} – Veridian

115

Con la regolare tabular ambiente, si desidera utilizzare il tipo di p{width} colonna, come indica marcog. Ma questo ti costringe a dare ampiezze esplicite.

Un'altra soluzione è l'ambiente tabularx:

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

Tutti X colonne ottenere la stessa larghezza. Si può influenzare questo impostando \hsize nella dichiarazione Formato:

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

ma poi tutti i fattori devono sommare fino a 1, suppongo (ho preso questo dal compagno di LaTeX). C'è anche il pacchetto tabulary che regola le larghezze delle colonne per bilanciare l'altezza delle file. Per i dettagli, è possibile ottenere la documentazione per ogni 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 avvolte, ma una con un testo molto più lungo dell'altro, le assegna comunque una larghezza uguale? – marcog

+2

Ho modificato la mia risposta. Ma in pratica cerco di semplificare le mie tabelle in modo tale che ho bisogno solo di X per una singola colonna. Ho appena scoperto il tabulary :) –

39

Un'altra opzione è quella di inserire un minipage in ogni cella in cui si desidera il testo da imballaggio, per 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} 
+4

Grazie, questo mi ha permesso di inserire liste 'itemize' nelle mie celle. –

5

Se si vuole avvolgere il testo, ma mantenere l'allineamento allora si può avvolgere quella cella in un minipage o varwidth ambiente (varwidth proviene dal pacchetto varwidth). Varwidth sarà "ampio quanto il suo contenuto ma non più largo di X". È possibile creare un tipo di colonna personalizzata che agisce come "p {xx}", ma si restringe per adattarsi utilizzando

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

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

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

mi piace la semplicità di tabulary pacchetto:

\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, ad organizzare l'intera larghezza della tabella rispetto a \ textwidth. E.g 0.4 di esso. Quindi il resto viene fatto automaticamente dal pacchetto.

La maggior parte dell'esempio è presa da http://en.wikibooks.org/wiki/LaTeX/Tables.

+0

grazie :) questo si adatta bene alle tabelle basate sul testo. – sb32134

Problemi correlati