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.

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.






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:

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:

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