¿Cómo envolver texto en tablas LaTeX?

454

Estoy creando un informe en LaTeX que involucra algunas tablas. Estoy atascado en eso ya que los datos de mi celda en la tabla exceden el ancho de la página. ¿Puedo ajustar el texto de alguna manera para que caiga en la siguiente línea en la misma celda de la tabla?

¿Está relacionado de alguna manera con el ancho de la tabla? Pero como está excediendo el ancho de la página, ¿hará alguna diferencia?

Arnkrishn
fuente
Estaba buscando una manera de resumir, la otra solución se adapta mejor a mis necesidades tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Respuestas:

514

Use p {ancho} para sus especificadores de columna en lugar de l / r / c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
moinudin
fuente
37
Buena solución, pero pierde el '|' si no quieres un borde alrededor de la mesa. Entonces se convertiría\begin{tabular}{p{1cm}p{3cm}}
Andrejas
83
¿Hay alguna forma de hacer esto sin dejar de especificar la alineación en cada celda?
Dylan Knowles
77
¡Encontré una manera de especificar la alineación en cada celda! ¡Crea una macro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Comparación} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian
8
¿Qué sucede si tengo dos columnas donde la primera debe ser tan larga como sea necesario para ajustar su contenido y la otra debe llenarse hasta el ancho de la línea, mientras se ajusta? Básicamente, necesitobegin{tabular}{lp{<whatever is left to fill the line width>}}
Sander
118
Gran solución Sin embargo, recomendaría usar valores relativos en lugar de una dimensión arbitraria, por ejemplop{0.2\linewidth}p{0.6\linewidth}}
jgyou
139

Con el tabularentorno normal , desea utilizar el p{width}tipo de columna, como indica marcog. Pero eso te obliga a dar anchos explícitos.

Otra solución es la tabularx medio 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 las columnas X tienen el mismo ancho. Puede influir en esto configurando\hsize en la declaración de formato:

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

pero supongo que todos los factores tienen que sumar 1 (tomé esto del compañero de LaTeX). También está el paquete tabularyque ajustará los anchos de columna para equilibrar las alturas de las filas. Para obtener detalles, puede obtener la documentación de cada paquete con texdoc tabulary(en TeXlive).

Damien Pollet
fuente
3
Interesante, eso se ve muy útil. ¿Qué tan inteligente es cuando se trata de seleccionar anchos de columna? Por ejemplo, si tiene dos columnas que necesitan ser ajustadas pero una con texto mucho más largo que la otra, ¿todavía les asigna el mismo ancho?
moinudin
2
Edité mi respuesta. Pero en realidad en la práctica trato de simplificar mis tablas para que solo necesite X para una sola columna. Acabo de descubrir la tabla :)
Damien Pollet
50

Otra opción es insertar una minipagina en cada celda donde se desea ajustar el texto, por ejemplo:

\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
fuente
8
Gracias, esto me permitió colocar itemizelistas en mis celdas.
Quentin Pradet
Creo que la respuesta debería explicar el significado de \columnwidth: Cuando lo probé, parecía ser más ancho de tabla que ancho de columna, así que tuve que establecer una proporción manual como 0.2\columnwidthpara obtener un ancho razonable.
U. Windl
37

Me gusta la simplicidad del tabularypaquete:

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

En el ejemplo, organiza todo el ancho de la tabla con respecto a \ textwidth. Ej. 0.4 de eso. Luego, el resto lo hace automáticamente el paquete.

La mayor parte del ejemplo está tomado de http://en.wikibooks.org/wiki/LaTeX/Tables .

ozi
fuente
20

¡Simple como un pedazo de TORTA!

Se puede definir un nuevo tipo de columna como ( Len este caso), mientras que el mantenimiento de la alineación actual ( 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}

ingrese la descripción de la imagen aquí

Shayan Amani
fuente
5

Si desea ajustar su texto pero mantener la alineación, puede ajustar esa celda en un entorno minipageo varwidth(varwidth proviene del paquete varwidth). Varwidth será "tan ancho como su contenido pero no más ancho que X". Puede crear un tipo de columna personalizada que actúe como "p {xx}" pero se reduzca para ajustarse usando

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

que puede requerir el arraypaquete. Luego, cuando use algo como \begin{tabular}{llM{2in}}las dos primeras columnas, estaremos alineados a la izquierda y la tercera columna estará alineada a la izquierda, pero si se ensancha más de 2 pulgadas, el texto se ajustará.

Cheshirekow
fuente
1

Para cambiar el texto ABen A \r Buna celda de la tabla, poner esto en la posición de la celda: \makecell{A \\ B}.

Antes de hacerlo, también debe incluir el paquete makecell.

FlorPlaya
fuente
-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}
MD Monjur Ul Hasan
fuente
Voto a favor. Esta es una respuesta de solo código, sin ninguna explicación.
starbeamrainbowlabs
1
Además, está mal de todos modos ya que la segunda fila contiene 4 celdas donde la tabla está diseñada para acomodar solo dos columnas. Y de todos modos no está relacionado con el contenido de la celda de ajuste.
Ahmed Salah