¿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?


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}

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).


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}

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 .


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í


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á.


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.


-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 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.