viernes, 27 de enero de 2012

Cómo hacer tablas largas que ocupen varias hojas en LaTeX

A continuación mostraré cómo se pueden realizar tablas largas en LaTeX, que ocupen más de un folio. Para ello, hay que utilizar el paquete {longtable}. Este paquete, no es perfecto, y en estas tablas no vamos a poder utilizar todos los comandos que usamos en las tablas normales.

Para añadir una tabla larga, usamos el comando {longtable}. Primero definimos el encabezado de la primera hoja. A continuación definimos el encabezado del resto de hojas. Luego, definimos el fondo de la tabla en todas las hojas menos en la última. Y luego el fondo en la última hoja. Finalmente, escribimos el cuerpo de la tabla. Aquí muestro un ejemplo:

\usepackage{longtable} % para tablas largas

\begin{longtable}{c c}

% aquí añadimos el encabezado de la primera hoja.

\hline
Letra & Código \\
\hline \hline
\endfirsthead


% aquí añadimos el encabezado del resto de hojas.
\hline
Letra & Código \\
\hline \hline
\endhead


% aquí añadimos el fondo de todas las hojas, excepto de la última.
\multicolumn{2}{c}{Sigue en la página siguiente.}
\endfoot


% aquí añadimos el fondo de la última hoja.
\endlastfoot

% aquí añadimos el cuerpo de la tabla.
A & . -\\
\hline
B & - . . .\\
\hline
C & - . - .\\
\hline
D & - . .\\
\hline
E & .\\
\hline
F & . . - .\\
\hline
G & - - .\\
\hline
H & . . . .\\
\hline
I & . .\\
\hline
J & . - - -\\
\hline
K & - . -\\
\hline
L & . - . .\\
\hline
M & - -\\
\hline
N & - .\\
\hline
O & - - -\\
\hline
P & . - - .\\
\hline
Q & - - . -\\
\hline
R & . - .\\
\hline
S & . . .\\
\hline
T & -\\
\hline
U & . . -\\
\hline
V & . . . -\\
\hline
W & . - -\\
\hline
X & - . . -\\
\hline
Y & - . - -\\
\hline
Z & - - . .\\
\hline
\\
% esta línea es importante para que deje un espacio entre la tabla y el nombre de la tabla.
\caption{Código Morse.}
\label{ta:morse}
\end{longtable}


Tablas con LaTeX (3)

A continuación mostraré más ejemplos sobre tablas avanzadas. Nuestro documento .tex tendrá que tener la forma siguiente, donde se cargan los paquetes {graphicx}, para insertar figuras, {multirow}, para fusionar celdas de la misma columna, {array} para centrar verticalmente los elementos de una casilla, y {float}, para usar el comando [H].

\documentclass[a4paper,openright,10pt]{report}
\usepackage[spanish]{babel} % para escribir en espanol
\usepackage[latin1]{inputenc} % para acentos sin codigo
\usepackage{graphicx} % graficos
\usepackage{multirow, array} % para las tablas
\usepackage{float} % para usar [H]

\begin{document}

\end{document}



  • Cómo obligar a LaTeX a que situe una tabla (o figura) en un sitio determinado.
LaTeX suele colocar las tablas (y figuras) donde él considera mejor. Podemos indicarle el orden de nuestra preferencia con [htb] (here, top, bottom), pero no siempre funciona bien. Si queremos forzar a LaTeX que coloque la tabla justo en un sitio, hay que poner [H]. Para usar este comando, es necesario cargar el paquete {float}.

\begin{table}[H]

\end{table}



  • Cómo amoldar el texto de una celda, a un ancho fijo. Y que automáticamente el texto vaya saltando de línea.
Para ello, podemos utilizar el comando p{xcm}. Donde "xcm" es la anchura que queremos dar a la columna. (Podemos usar "in", "mm", "cm", etc.)

\begin{table}[H]
\centering
\begin{tabular}{p{2cm} p{5cm}}
\hline
Autor & Poema \\
\hline \hline
Espronceda & Con diez cañones por banda, viento en popa, a toda vela, no corta el mar, sino vuela un velero bergantín... \\
\hline
Bécquer & Volverán las oscuras golondrinas, en tu balcón sus nidos a colgar, y otra vez con el ala, a sus cristales jugando llamarán... \\
\hline
\end{tabular}
\caption{Autores españoles.}
\label{tabla:autores}
\end{table}




  • Cómo centrar verticalmente el texto de una celda.
Para ello, podemos cargar la librería {array} y usar los comandos >{\arraybackslash}m{xcm}, como se muestra a continuación. (Si además queremos que el texto esté centrado horizontalmente, añadimos \centering.)

\begin{table}[H]
\centering
\begin{tabular}{>{\centering\arraybackslash}m{2cm} >{\arraybackslash}m{5cm} }
\hline
Autor & Poema \\
\hline \hline
Espronceda & Con diez cañones por banda, viento en popa, a toda vela, no corta el mar, sino vuela un velero bergantín... \\
\hline
Bécquer & Volverán las oscuras golondrinas, en tu balcón sus nidos a colgar, y otra vez con el ala, a sus cristales jugando llamarán... \\
\hline
\end{tabular}
\caption{Autores españoles.}
\label{tabla:autores}
\end{table}



  • Cómo insertar una imagen en una celda de una tabla.
Las imágenes se insertan fácilmente con \includegraphics[width=15mm]{dibujo}. En estos casos, suele ser importante que las celdas queden centradas verticalmente, utilizando los comandos explicados previamente.

\begin{table}[H]
\centering
\begin{tabular}{ >{\centering\arraybackslash}m{2cm} >{\arraybackslash}m{5cm}}
\hline
Autor & Poema \\
\hline \hline
\includegraphics[width=15mm]{./figuras/espronceda} & Con diez cañones por banda, viento en popa, a toda vela, no corta el mar, sino vuela un velero bergantín... \\
\hline
\includegraphics[width=15mm]{./figuras/becquer} & Volverán las oscuras golondrinas, en tu balcón sus nidos a colgar, y otra vez con el ala, a sus cristales jugando llamarán... \\
\hline
\end{tabular}
\caption{Autores españoles.}
\label{tabla:autores}
\end{table}




Por último, muestro un ejemplo de tabla un poco más complejo. Donde los versos de ambos poemas se han escrito en líneas distintas.

\begin{table}[H]
\centering
\begin{tabular}{ >{\centering\arraybackslash}m{2cm} >{\centering\arraybackslash}m{6cm}}
\hline
Autor & Poema \\
\hline \hline
\multirow{4}{2cm}{\centering\includegraphics[width=15mm]{./figuras/espronceda}} & Con diez cañones por banda,\\
& viento en popa, a toda vela,\\
& no corta el mar, sino vuela \\
& un velero bergantín... \\
\hline
\multirow{4}{2cm}{\centering\includegraphics[width=15mm]{./figuras/becquer}} & Volverán las oscuras golondrinas,\\
& en tu balcón sus nidos a colgar,\\
& y otra vez con el ala,\\
& a sus cristales jugando llamarán... \\
\hline
\end{tabular}
\caption{Autores españoles.}
\label{tabla:autores}
\end{table}

Cómo hacer que LaTeX iguale verticalmente las dos últimas columnas

Cuando estamos escribiendo un artículo con dos columnas, las dos últimas columnas suelen quedar a distinta altura. Sin embargo, suele quedar más bonito, que sean del mismo tamaño.

Para hacerlo, basta con cargar el paquete \usepackage{flushend}. En la siguiente imagen se muestra un mismo documento, sin usar, y usando, dicho paquete.

Cómo evitar que LaTeX distribuya los espacios en blanco a lo largo de la hoja

LaTeX tiene la costumbre de distribuir los espacios en blanco, a lo largo de toda la página. En mi opinión, resulta más grato a la vista, que los espacios en blanco queden en el fondo de la página.

Para ello, basta con añadir el comando \raggedbottom antes de \begin{documment}. En la siguiente imagen se muestra un mismo documento, sin usar, y usando, dicho comando.