Como quebrar texto em tabelas LaTeX?


454

Estou criando um relatório no LaTeX que envolve algumas tabelas. Estou preso nisso porque meus dados de célula na tabela estão excedendo a largura da página. Posso, de alguma forma, quebrar o texto para que ele caia na próxima linha na mesma célula da tabela?

De alguma forma, está relacionado à largura da tabela? Mas, ao ultrapassar a largura da página, isso fará diferença?


Eu estava procurando uma maneira de envolver palavra longa, a outra solução melhor se adapte às minhas necessidades tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
— Miranda

Respostas:


513

Use p {width} para os especificadores da coluna em vez de l / r / c.

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

37
Boa solução, mas perde o '|' se você não quiser uma borda ao redor da mesa. \begin{tabular}{p{1cm}p{3cm}}
— Tornaria-

83
Existe alguma maneira de fazer isso enquanto especifica o alinhamento em cada célula?
— Dylan Knowles

7
Eu encontrei uma maneira de especificar o alinhamento em cada célula! Crie uma macro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Comparação} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L |}
— Veridian

8
E se eu tiver duas colunas em que a primeira deve ter o tempo necessário para ajustar seu conteúdo e a outra deve preencher a largura da linha durante a quebra? Então, basicamente, eu precisobegin{tabular}{lp{<whatever is left to fill the line width>}}
— Sander

118
Ótima solução. No entanto, eu recomendo usar valores relativos ao invés de dimensão arbitrária, por exemplop{0.2\linewidth}p{0.6\linewidth}}
— jgyou

139

Com o tabularambiente regular , você deseja usar o p{width}tipo de coluna, como indica o marcog. Mas isso força você a fornecer larguras explícitas.

Outra solução é o tabularxmeio ambiente:

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

Todas as colunas X têm a mesma largura. Você pode influenciar isso configurando \hsizena declaração de formato:

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

mas todos os fatores precisam somar até 1, suponho (peguei isso do companheiro do LaTeX). Há também o pacote tabularyque ajustará as larguras das colunas para equilibrar as alturas das linhas. Para detalhes, você pode obter a documentação de cada pacote com texdoc tabulary(no TeXlive).


3
Interessante, isso parece realmente útil. Quão inteligente é quando se trata de selecionar as larguras das colunas? Por exemplo, se você tem duas colunas que precisam ser quebradas, mas uma com texto muito mais longo que a outra, ainda assim as atribui largura igual?
— moinudin

2
Eu editei minha resposta. Mas, na prática, tento simplificar minhas tabelas para que eu só precise do X para uma única coluna. Eu só tabulary descoberto :)
— Damien Pollet

50

Outra opção é inserir uma minipágina em cada célula onde o agrupamento de texto é desejado, por exemplo:

\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
Obrigado, isso me permitiu colocar itemizelistas em minhas células.
— Quentin Pradet

Eu acho que a resposta deve explicar o significado de \columnwidth: Quando eu tentei, parecia ter mais largura da tabela do que largura da coluna, então tive que definir uma proporção manual 0.2\columnwidthpara obter uma largura razoável.
— U. Windl

37

Eu gosto da simplicidade do tabularypacote:

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

No exemplo, você organiza toda a largura da tabela em relação a \ textwidth. Por exemplo, 0,4. O restante é feito automaticamente pelo pacote.

A maior parte do exemplo é retirada de http://en.wikibooks.org/wiki/LaTeX/Tables .


20

Simples como um pedaço de bolo!

Você pode definir um novo tipo de coluna como ( Lneste caso) enquanto mantém o alinhamento atual ( c, rou 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}

insira a descrição da imagem aqui


5

Se você deseja agrupar o texto, mas manter o alinhamento, poderá agrupar a célula em um ambiente minipageou varwidth(a largura da largura vem do pacote da largura da largura). A largura da largura será "tão larga quanto seu conteúdo, mas não maior que X". Você pode criar um tipo de coluna personalizado que age como "p {xx}", mas diminui para caber usando

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

o que pode exigir o arraypacote. Então, quando você usar algo como \begin{tabular}{llM{2in}}as duas primeiras colunas, ficaremos alinhados à esquerda e a terceira coluna ficará alinhada à esquerda, mas se for maior que 2 polegadas, o texto será quebrado.


1

Para alterar o texto ABpara A \r Bnuma célula de tabela, colocar isso em posição de célula: \makecell{A \\ B}.

Antes de fazer isso, você também precisa incluir o pacote 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}

Voto negativo. Esta é uma resposta apenas de código, sem nenhuma explicação.
— Starbeamrainbowlabs # 2/19

1
Além disso, está errado de qualquer maneira, já que a segunda linha contém 4 células em que a tabela foi projetada para acomodar apenas duas colunas. E não está relacionado à quebra do conteúdo da célula.
— Ahmed salah
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.