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}