Tablas de ajuste automático en LaTeX: de OpenOffice Calc a LaTeX, con Calc2LaTeX, booktabs y tabulary

Siento escribir poco, pero se acercan los terribles exámenes de la Licenciatura y hay que ir terminando muchas prácticas.

Hoy os traigo una macro que me parece interesantísima y que, junto al artículo de tabulary que publiqué en este post, dotan de una gran potencia al diseño de tablas con ajuste automático para LaTeX.

La macro en cuestión se llama Calc2LaTeX y se integra en el editor de hojas de cálculo (oocalc) de OpenOffice. Veamos los pasos para tenerlo funcionando y unos sencillos ejemplos.

Paso 1.
Descargar la macro de este enlace y descomprimir el archivo en algún sitio. Respecto a la instalación de la macro una vez descomprimido el archivo descargado, tenéis una estupenda guía de instalación aquí, proporcionada por sus creadores y que, debido a su simplicidad, no voy a comentar. La guía contiene una buena cantidad de imágenes que os dirigen paso a paso.

Paso 2.
Una vez instalada la macro con los sencillos pasos anteriores, pasamos a crear una tabla cualquiera en OpenOffice. En la siguiente imagen podéis ver un ejemplo, una tabla cualquiera que he creado.

01.png

Paso 3.
Ahora hay que seleccionar la porción de celdas a exportar. Seguidamente, para obtener el código fuente en LaTeX de esta tabla, sólo es necesario acudir a OpenOffice y seguir la siguiente ruta en los menús: Herramientas – Macros – Ejecutar macro. A continuación, en la ventana que aparece, simplemente desplegamos el elemento Calc2LaTeX y, dentro de él, escogemos la macro Calc2LaTeX. Con estos pasos, a la derecha nos aparecen las funciones a ejecutar de esta macro, seleccionamos Main y ya podemos pulsar el botón de Ejecutar.

La siguiente ventana que aparece ya es la de la macro en todo su apogeo, con una serie de opciones. La verdad es que suelo dejar las que vienen por defecto porque creo que son las más acertadas. Pulsando en el botón Convert, la macro os devuelve el código en LaTeX, que sólo tenéis que pegar en vuestro proyecto Kile o en vuestro editor de textos preferido.

Debajo podéis ver el proceso en imágenes.

02.png03.png
04.png05.png
06.png07.png

El código único de la tabla que nos ha devuelto la macro es el siguiente:

begin{table}[htbp]
caption{}
begin{tabular}{|r|r|r|r|r|r|r|r|r|r|}
hline
multicolumn{1}{|l|}{} & textbf{0} & textbf{1} & textbf{2} & textbf{3} & textbf{4} & textbf{5} & textbf{6} & textbf{7} & textbf{8} \ hline
textbf{0} & 0 & 1,3 & 0,6 & 1,6 & 1,7 & 10 & 1,4 & 0,7 & 1,6 \ hline
textbf{1} & 1,3 & 0 & 0,8 & 1,8 & 1,1 & 9,4 & 1,6 & 0,7 & 1,8 \ hline
textbf{2} & 0,6 & 0,8 & 0 & 1,8 & 1,8 & 9,6 & 1,5 & 0,6 & 1,8 \ hline
textbf{3} & 1,6 & 1,8 & 1,8 & 0 & 0,8 & 10 & 0,5 & 1 & 0,3 \ hline
textbf{4} & 1,7 & 1,1 & 1,8 & 0,8 & 0 & 10 & 1,1 & 0,3 & 1,3 \ hline
textbf{5} & 10 & 9,4 & 9,6 & 10 & 10 & 0 & 10 & 9,6 & 10 \ hline
textbf{6} & 1,4 & 1,6 & 1,5 & 0,5 & 1,1 & 10 & 0 & 10 & 1,5 \ hline
textbf{7} & 0,7 & 0,7 & 0,6 & 1 & 0,3 & 9,6 & 10 & 0 & 1,1 \ hline
textbf{8} & 1,6 & 1,8 & 1,8 & 0,3 & 1,3 & 10 & textit{1,5} & textit{1,1} & 0 \ hline
end{tabular}
label{}
end{table}

Fijaos que la macro incluso nos ha respetado las negritas de la primera fila y la primera columna y las cursivas de los dos últimos elementos de la última fila ;).

Vamos a solucionar un pequeño errorcillo que introduce la macro. Como podéis ver en el código interior, se introduce un multicolumn de una sola columna. Pensando con un poco de lógica, una multicolumna de una sola columna… sobra. Así que, cuando peguéis el código de la tabla, si encontrais el siguiente código:

 multicolumn{1}{|l|}{loquesea} & ... 

debéis eliminar el multicolumn y dejar únicamente

 loquesea & ... 

Otros cambios serían bajar el caption{} debajo de la tabla (justo antes o después de label{}), además de reducir un poco el tamaño de la fuente y centrar la tabla, escribiendo debajo del begin{table}[htbp]:

 centering scriptsize 

En este caso la tabla se ha ajustado bien por su estructura, pero… ¿y si resulta que es tan larga que se sale por los bordes? No hay problema, como explicaba en este artículo, podemos hacer uso del magnífico paquete tabulary. Simplemente importamos el paquete al principio del documento, debajo de documentclass, con la siguiente línea:

 usepackage{tabulary} 

y después modificamos la línea begin{tabular} de nuestra tabla, sustituyéndola por:

 begin{tabulary}{15cm}{|C|C|C|C|C|C|C|C|C|C|} 

El tamaño en centímetros es el ancho deseado para nuestra tabla. En cuanto al tercer parámetro, C => centrado, L => ajustado a la izquierda, R => a la derecha, J => justificado. No se nos puede olvidar tampoco realizar un cierre correcto sustituyendo:

 end{tabular} 

por esto otro:

 end{tabulary} 

Ahora se trata antes que nada de dar un buen formato a la tabla. Hace poco leí un buen documento (en inglés) sobre cómo realizar tablas bastante profesionales. Se lo dedicaban al paquete booktabs. El documento en concreto podéis descargarlo de aquí. Es necesario cargar el paquete booktabs de la forma que ya sabéis:

 usepackage{booktabs} 

El documento explica en primer lugar que las barras verticales son poco recomendables, por lo que el begin{tabulary} queda de la siguiente forma:

 begin{tabulary}{15cm}{CCCCCCCCCC} 

Además, especifica otra forma de utilizar reglas horizontales, en lugar de usar hrule para todas las filas, utiliza:

  • toprule para la primera fila.
  • midrule para las filas centrales.
  • bottomrule para la última fila.
  • La verdad es que cuando acercas con zoom el documento y ves las reglas o líneas de celda mucho más ajustadas (automáticamente) y ordenadas en grosor, el resultado es mucho más profesional que con hrule. Podéis ver el resultado en la siguiente imagen:

    08.png

    En este enlace os dejo el código LaTeX de la tabla correctamente creada.

    Puede ocurrir que debido a la estructura de la tabla se ajuste bien y, a la primera, tengamos ya todo terminado. Pero hay otras tablas un poco más dificilitas debido a su estructura, y a lo mejor tengamos en los títulos de la primera celda las palabras muy cortadas. Pongamos por ejemplo la tabla de la siguiente imagen, que al usar tabulary se ajusta perfectamente al tamaño especificado pero se ven las cabeceras un poco feotas:

    09.png

    Para estas tablas tendremos que usar ciertas armas, como si de un procesador de textos se tratase. Utilizamos los siguientes comandos:

    • newline, para dar intros a las palabras necesarias.
    • hspace*{«x»cm}, cambiando «x» por 1, 2, 3 cm… lo necesario. Esto mete espacios en una celda.
    • para forzar que una frase se parta en una posición determinada de la celda, por ejemplo Museo arqueo-lógico dará un retorno de carro a lógico y colocará un guión indicando que la palabra está fraccionada.

    Con esta simple combinación, dando intros y espacios horizontales podemos ajustar la tabla a nuestro antojo. El código de la tabla terminada queda de la siguiente forma:

    begin{table}[htbp]
    scriptsize centering
    begin{tabulary}{15cm}{CCCCCCCCCC}
    toprule
    & Torrenewline de lanewline Calahorra & Sinagogahspace*{2cm} & Alcázar de los Reyesnewline Cristianoshspace*{1cm} & Museo arqueo-lógicohspace*{1cm} & Arco del Triunfohspace*{1cm} & Medina Azaharahspace*{1.5cm} & Museo Julio hspace*{0.2cm}Romerohspace*{2cm} & Baños califaleshspace*{1cm} & Mezquita Catedralhspace*{2cm} \ midrule
    Torre denewline Calahorra & 0 & 1,3 & 0,6 & 1,6 & 1,7 & 10 & 1,4 & 0,7 & 1,6 \ midrule
    Sinagoga & 1,3 & 0 & 0,8 & 1,8 & 1,1 & 9,4 & 1,6 & 0,7 & 1,8 \ midrule
    Alcázar de los Reyes Cristianoshspace{1cm} & 0,6 & 0,8 & 0 & 1,8 & 1,8 & 9,6 & 1,5 & 0,6 & 1,8 \ midrule
    Museonewline arqueológico & 1,6 & 1,8 & 1,8 & 0 & 0,8 & 10 & 0,5 & 1 & 0,3 \ midrule
    Arco del Triunfo & 1,7 & 1,1 & 1,8 & 0,8 & 0 & 10 & 1,1 & 0,3 & 1,3 \ midrule
    Medina Azahara & 10 & 9,4 & 9,6 & 10 & 10 & 0 & 10 & 9,6 & 10 \  midrule
    Museo Julio Romero de Torres & 1,4 & 1,6 & 1,5 & 0,5 & 1,1 & 10 & 0 & 10 & 1,5 \  midrule
    Baños califales & 0,7 & 0,7 & 0,6 & 1 & 0,3 & 9,6 & 10 & 0 & 1,1 \  midrule
    Mezquita Catedral & 1,6 & 1,8 & 1,8 & 0,3 & 1,3 & 10 & 1,5 & 1,1 & 0 \ bottomrule
    end{tabulary}
    caption{Tabla ejemplo blog Neonigma}
    label{tbl:id-tabla}
    end{table}

    Fijaos el escaso número de líneas para que la tabla quede profesional. Pero si esto lo veis complicado, hay una forma de que la tabla casi siempre encaje con el documento de forma automática. Esta forma es utilizar tablas apaisadas. Para ello, tenemos que importar el paquete rotating:

     usepackage{rotating} 

    De esta forma, si vemos una tabla complicada que no queda bien a la primera, no hay ganas de dar intros y espacios y no importa presentarla apaisada, cambiamos el siguiente código de apertura de comando tabla:

     begin{table}[htbp] 

    por este:

     begin{sidewaystable}[htbp] 

    y el de cierre del comando:

     end{table}

    por este otro:

     end{sidewaystable}

    Podemos decirle ahora a tabulary que queremos la tabla de unos 21 centímetros, con lo que el ajuste automático queda perfecto a la primera ;). Además, fijaos como al utilizar booktabs, se ajustan automáticamente al centro los contenidos de cada celda. Os dejo el código de la tabla apaisada aquí.

    A 8 personas les gusta esta entrada

9 pensamientos en “Tablas de ajuste automático en LaTeX: de OpenOffice Calc a LaTeX, con Calc2LaTeX, booktabs y tabulary

  1. Estimado muchas gracias por este post he estado buscando esta solución hace tiempo!

    Saludos!

  2. Buena entrada, me ha gustado la facilidad de uso de calc2latex, una pena no haberlo conocido antes jeje.

    Saludos.

  3. Se me olvidaba comentar, hace muchos años que estuve allí, pero creo que es así; la imagen del encabezado del blog es Medina Azahara ¿verdad? De lo que deduzco que eres Cordobés jeje. Un saludo de un boquerón.

  4. Hay un problema con el enlace al documento sobre BookTabs. Lo he descargado de la siguiente dirección: www-control.eng.cam.ac.uk/~pcr20/latex/booktabs.pdf
    Gracias por el post!

  5. Hola, he estado construyendo tablas como lo indicas pero quiero alinear la información de la primera columna a la izquierda, excepto la primera fila, tu sabes como hacerlo? Gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *