martes, 28 de octubre de 2014

Cómo girar 90 grados una sola celda en una tabla en LaTeX

Una de las asignaturas pendientes de LaTeX son las tablas. Hay que reconocer que, por ejemplo con Word, es inmensamente más fácil girar un texto de una celda, alinearlo, centrarlo vertical y horizontalmente, etc. ¿Cuál es mi consejo entonces? Bueno, cuando trabajo con LaTeX siempre trato de hacer las tablas lo más sencillitas posibles.

En esta entrada explicaré un poco cómo se puede girar verticalmente un texto. Las tablas se empiezan a complicar un poco, así que, es algo que recomendaría hacer solo en casos sencillos, como los siguientes.

En primer lugar, parto del siguiente ejemplo. Es una tabla normal, excepto quizás, en que en la primera columna fusiono las primeras 5 filas, y luego las 2 siguientes. Para lo que necesito el paquete {multirow}. Ahora, la idea sería girar 90º, las palabras Cretácico y Jurásico.

\usepackage{multirow}

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
\multirow{5}{2cm}{Cretácico} & Tiranosaurio\\ \cline{2-2}
& Triceratops \\ \cline{2-2}
& Velociraptor \\ \cline{2-2}
& Anquilosaurio \\ \cline{2-2}
& Hadrosaurio \\ \hline
\multirow{2}{2cm}{Jurásico} & Alosaurio\\ \cline{2-2}
& Estegosaurio \\ \hline
\end{tabular}
\caption{Dinosaurios.}
\label{ta:dino}
\end{table}


Esto se puede hacer con el paquete {rotating}, que entre otras funciones, tiene la funcion "\rotatebox{xx}{yyy}", que nos gira la palabra yyy, el ángulo xx en grados (cuyo valor puede ser positivo o negativo). El resultado lo muestro a continuación. Por cierto, fíjate que ahora, la primera columna va a ser más estrechita. Y en vez de los 2cm de antes, pongo solo 0.5 cm.

\usepackage{multirow}
\usepackage{rotating}

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
\multirow{5}{0.5cm}{\rotatebox{90}{Cretácico}} & Tiranosaurio\\ \cline{2-2}
& Triceratops \\ \cline{2-2}
& Velociraptor \\ \cline{2-2}
& Anquilosaurio \\ \cline{2-2}
& Hadrosaurio \\ \hline
\multirow{2}{0.5cm}{\rotatebox{90}{Jurásico}} & Alosaurio\\ \cline{2-2}
& Estegosaurio \\ \hline
\end{tabular}
\caption{Dinosaurios.}
\label{ta:dino}
\end{table}


Crétacico ha quedado bien, pero Jurásico es demasiado largo. Aquí empiezan los problemas que mencionaba con LaTeX... Bueno, esto se puede solucionar, por ejemplo, añadiendo un cierto espacio extra en las dos últimas filas. Esto se puede hacer añadiendo justo después del salto de línea, [ZZex] donde ZZ corresponde al espacio añadido, como se ve a continuación:

\usepackage{multirow}
\usepackage{rotating}

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
\multirow{5}{0.5cm}{\rotatebox{90}{Cretácico}} & Tiranosaurio\\ \cline{2-2}
& Triceratops \\ \cline{2-2}
& Velociraptor \\ \cline{2-2}
& Anquilosaurio \\ \cline{2-2}
& Hadrosaurio \\ \hline
\multirow{2}{0.5cm}{\rotatebox{90}{Jurásico }} & Alosaurio\\[1.8ex] \cline{2-2}
& Estegosaurio \\[1.8ex] \hline
\end{tabular}
\caption{Dinosaurios.}
\label{ta:dino}
\end{table}


Un último pequeño problema es que ahora las palabras Alosaurio y Estegosaurio quedan muy arriba de sus respectivas celdas. Quedaría más bonito si estuvieran centradas verticalmente. Para solucionarlo, he añadido 2 filas extra (ahora con Jurásico fusiono 4 columnas, no solo 2), y añado al final de cada salto de línea los espacios extra con [ZZex]

\usepackage{multirow}
\usepackage{rotating}

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
\multirow{5}{0.5cm}{\rotatebox{90}{Cretácico}} & Tiranosaurio\\ \cline{2-2}
& Triceratops \\ \cline{2-2}
& Velociraptor \\ \cline{2-2}
& Anquilosaurio \\ \cline{2-2}
& Hadrosaurio \\ \hline
\multirow{4}{0.5cm}{\rotatebox{90}{Jurásico }} & \\[-1ex]
& Alosaurio\\[0.9ex] \cline{2-2}
& \\[-1ex]
& Estegosaurio \\[0.9ex] \hline
\end{tabular}
\caption{Dinosaurios.}
\label{ta:dino}
\end{table}

2 comentarios:

Leviathan Cerebrate dijo...

Es bastante interesante, y engorroso ni se diga!! Pero, ¿no sería más fácil aprovechar las 4 celdas de "Jurásico" y la orden \multirow para unir las 2 de arriba en "Alosaurio" y las 2 de abajo en "Estegosaurio"? Así ya no habría forma de liarse con longitudes. Intenté hacer eso y el resultado es más o menos el mismo, salvo que los dinosaurios quedan perfectamente centrados en sus celdas. Aquí esa parte del código :)

\multirow{4}{0.5cm}{\rotatebox{90}{Jurásico}} & \multirow{2}{0cm}{Alosaurio}\\
& \\ \cline{2-2}
&\multirow{2}{0cm}{Estegosaurio}\\
& \\ \hline
\end{tabular}
\caption{Dinosaurios.}
\label{ta:dino}
\end{table}

Son necesarias las filas "en blanco" porque representan la segunda fila a fusionar de cada dinosaurio. Si se fusionaran más de ellas, habría que poner entonces las filas en blanco correspondientes. Espero no haber liado más el asunto, que de por sí ya es bastante difícil, jaja. Saludos desde México! :)

marlon xavier dijo...

Hola a todos tengo dos preguntas, la primera me encuentro editando textos en latex necesito en una tabla combinar varias filas pero el texto no respeta la columna este se escribe totalmente en una sola linea, este texto tiene mas de 10 lineas, como puedo hacer esto.?? y la segunda como puedo compilar un documento latex en html.??

Gracias de antemano