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}


11 comentarios:

Marlita linda dijo...

Excelente, ¡gracias!

Luis dijo...

No hay de qué :-)

Alvaro Camello Lázaro dijo...

Hola buenas, en primer lugar excelente el blog!! Es mi primera opción en recurrir cuando nose hacer algo en Latex.

Me surge la duda de cómo implementar dos tablas largas pero que aparezcan juntas.

Siempre he utilizado el entorno minipage y todo me iba genial pero nunca me había encontrado con el problema de reproducir dos tablas juntas que me ocupan más de una página.

El problema es que a la hora de general el pdf se me queda colgado y tengo que cerrarlo.

Mi código actual es el siguiente (se quito el entorno minipage me funciona perfectamente pero pierdo el poder poner dos tablas juntas)

\begin{longtable}{|c|c|}
\begin{minipage}{0.5 \textwidth}
\hline
D (cm) & I ($\cdot$10$^{-9}$ A) \\
\hline
\hline
\endfirsthead
\hline
D (cm) & I ($\cdot$10$^{-9}$ A) \\
\hline
\hline
\endhead
\multicolumn{2}{c}{Sigue en la página siguiente}
\endfoot
\endlastfoot
10.0 & 0.06$\pm$0.02 \\
\hline
9.5 & 0.06$\pm$0.04 \\
\hline
9.0 & 0.06$\pm$0.04 \\
\hline
8.5 & 0.04$\pm$0.02 \\
\hline
8.0 & 0.04$\pm$0.02 \\
\hline
7.5 & 0.04$\pm$0.04 \\
\hline
7.0 & 0.02$\pm$0.02 \\
\hline
\caption{Datos experimentales}
\label{}
\end{minipage}
\end{longtable}


Un saludo y muchas gracias!!

Luis dijo...

Hola Álvaro, gracias. :-)

como digo en la entrada, el paquete {longtable} no funciona bien con todos los paquetes de LaTeX.

De todos modos, en este caso, creo que todo se puede hacer con una sola tabla, sin necesidad de usar minipage...

\begin{longtable}{|c|c| p{1cm} |c|c|}
\cline{1-2} \cline{4-5}
1 & 2 & & a & b\\
\cline{1-2} \cline{4-5}
3 & 4\\
\cline{1-2}
\end{longtable}

Hasta luego

Camilo Andres dijo...

Excelente blog!
Me surge una duda ¿Puedo usar el comando \resizebox junto con tablas en dos páginas?

Gracias

Luis dijo...

Gracias Camilo,
nunca he usado ese comando, y sé que longtable falla con algunos paquetes... Pero prueba a ver lo que quieres hacer, y me dices si funciona o no. :-)

Camilo Andres dijo...

No funciona pero habría alguna forma de modificar el paquete para que funcione?

Gracias

Luis dijo...

Hola Camilo,
pues no sabría decirte. Nunca he usado ese comando. Pero quizás lo que quieras hacer, se pueda hacer de alguna otra manera...
Hasta luego

J. Osmar Artola García dijo...

Hola, tengo definida una tabla grande pero no me aparece centrada en la página, uso el siguiente código y nada:

\begin{center}
\begin{longtable}{|p{1cm}|p{1.8cm}|p{6cm}|p{6cm}|p{2.2cm}|}
\end{longtable}
\end{center}

Qué puedo hacer para que me aparezca centrada?

.. dijo...

Buenas noches.. una pregunta.
Longtable funciona bien con threeparttable. Se debe tener en cuenta alguna consideración especial??? Gracias...

Ana Paula Moreno Madrid dijo...

Hola! como haria para que la tabla ocupe el ancho del texto?