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.

martes, 13 de diciembre de 2011

Cómo trabajar con encabezados muy largos con LaTeX

Cuando usamos el formato {book} con LaTeX, por defecto, en la cabecera de las páginas pares, aparece el título del capítulo. De forma general, esto está bien, pero cuando tenemos un título muy largo, tenemos problemas. Por ejemplo, si tenemos el siguiente código:

\documentclass[twoside,a4paper,openright,12pt]{book}
\usepackage[spanish]{babel} % espanol
\usepackage[latin1]{inputenc} % acentos sin codigo

\begin{document}

\tableofcontents

\chapter{Sobre cómo descubrí que no había ningún monstruo debajo de la cama}
bla bla bla...

\end{document}

El título del capítulo es tan largo, que el resultado de la cabecera es el siguiente:


Una primera solución, sería indicar un título alternativo más cortito. Esto se hace introduciéndolo entre corchetes después de \chapter, como se muestra a continuación:

\chapter[Sobre cómo descubrí...]{Sobre cómo descubrí que no había ningún monstruo debajo de la cama}



Sin embargo, esto tiene un problema. En el índice de contenidos, se muestra el título alternativo, no el largo.


Una solución mejor sería indicar el encabezado con el comando "\markboth{x}{y}". Donde x e y son los encabezados de las hojas pares e impares respectivamente. Como muestro a continuación:

\begin{document}

\tableofcontents % Indice de contenidos

\chapter{Sobre cómo descubrí que no había ningún monstruo debajo de la cama}
\label{ch:sobre}
\markboth{CAPÍTULO \ref{ch:sobre}. SOBRE CÓMO DESCUBRÍ...}{}

\end{document}



martes, 8 de noviembre de 2011

Cómo modificar el texto de una figura vectorial

Una de las ventajas de LaTeX es su tratamiento de figuras vectoriales. En esta entrada mostraré cómo se puede modificar en LaTeX el texto de una figura vectorial. Nuestro documento .tex tendrá la forma siguiente, donde además se cargan las librerias graphicx y psfrag, necesarias para insertar figuras y para tratar el texto de figuras, respectivamente:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel} % espanol, ingles
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{graphicx} % graficos
\usepackage{psfrag} % modificar texto en graficos

\begin{document}

\end{document}

Supongamos que tenemos un dibujo vectorial con un texto (dragon.eps). Entre los distintos programas que se pueden usar para crear el dibujo en eps, yo utilizo Diaw.exe, que es muy sencillo y gratuito. En el siguiente enlace puedes ver un tutorial de dicho programa (click aquí), realizado por el grupo CAChemE.org.


Insertamos el dibujo fácilmente en nuestro documento con las instrucciones siguientes:

\begin{figure}[htb]
\centering
\includegraphics[width=0.4\textwidth]{./dragon}
\caption{Farola y dragón.} \label{fig:dragon}
\end{figure}



Sin embargo, nos encontramos con un pequeño inconveniente. El formato del texto del dibujo, no coincide con el formato del texto del resto del documento. Para solucionarlo, usamos la instrucción psfrag{texto1}{texto2}, que busca en el dibujo vectorial el texto "texto1" y lo sustituye por "texto2", con la fuente, tamaño y formato correspondiente.

\begin{figure}[htb]
\centering
\psfrag{Bicho}{Dragón}
\includegraphics[width=0.4\textwidth]{./dragon}
\caption{Farola y dragón.} \label{fig:dragon}
\end{figure}

lunes, 7 de noviembre de 2011

Listas y enumeraciones en LaTeX

En la siguiente entrada mostraré cómo se pueden crear fácilmente listas y enumeraciones con LaTeX. Nuestro archivo .tex tendrá la siguiente forma. Donde se carga también el paquete {enumerate}, que aunque no es necesario para trabajar con listas, sí que lo es para poder editar su formato:

\documentclass[a4paper,openright,12pt]{article}
\usepackage[spanish]{babel} % espanol
\usepackage[utf8]{inputenc} % acentos sin codigo
\usepackage{enumerate} % enumerados

\begin{document}

\end{document}



Las listas se crean entre los comandos \begin{itemize} e \end{itemize}, y cada elemento se indica con el comando \item, como se muestra a continuación:

Futuros viajes:

\begin{itemize}
    \item Madrid.
    \item Castilla la Mancha.
    \item Castilla y León.
    \begin{itemize}
         \item Segovia.
         \item Ávila.
    \end{itemize}
\end{itemize}


Si queremos cambiar el símbolo de un elemento en particular, usamos "\item[$*$]", donde dentro de los corchetes podemos escribir el símbolo que queramos. Si queremos cambiar todos los símbolos, usamos el comando "\renewcommand{\labelitemi}{$*$}". Donde \labelitemi, \labelitemii, \labelitemiii, \labelitemiv, etc... hacen referencia a los iconos de los niveles 1, 2, 3, 4, etc... respectivamente.

\renewcommand{\labelitemi}{$-$}
\renewcommand{\labelitemii}{$\cdot$}

Futuros viajes:

\begin{itemize}
    \item[$*$] Madrid.
    \item Castilla la Mancha.
    \item Castilla y León.
    \begin{itemize}
        \item Segovia.
        \item Ávila.
    \end{itemize}
\end{itemize}


Si queremos añadir una sangría en la lista, podemos hacerlo indicándo con "leftmargin". Para lo cual, es necesario cargar el paquete {enumerate}: 

\usepackage{enumerate}

Qué visitar en Cáceres:
\begin{itemize}[leftmargin=2cm]
  \item Ciudad vieja.
  \item Guadalupe.
  \item Trujillo.
  \item Plasencia.
\end{itemize}





De forma similar, las enumeraciones se crean con los comandos \begin{enumerate} e \end{enumerate}. Además, el formato de la enumeración se puede definir entre corchetes después de \begin{enumerate}. Podemos poner 1, I, a, A, etc... como se muestra en los ejemplos siguientes:

\usepackage{enumerate}

Lista de la compra:

\begin{enumerate}[1.]
    \item Manzanas.
    \item Plátanos.
    \item Pescado fresco.
    \begin{enumerate}[a)]
        \item Emperador.
        \item Gallo.
    \end{enumerate}
\end{enumerate}


\usepackage{enumerate}

\begin{enumerate}[{Ejercicio} 1.]
    \item Visitar tres lugares.
    \item Leer tres libros.
    \item Conocer tres personas.
\end{enumerate}




Un comando similar a los anteriores es \begin{description}. Es útil cuando se quiere dar una pequeña definición a una serie de palabras. Como se muestra a continuación:

Animales símbolo de países:

\begin{description}
    \item[Australia:] Canguro.
    \item[EEUU:] Águila calva.
    \item[España:] Toro.
    \item[México:] Águila real.
\end{description}

sábado, 29 de octubre de 2011

Comentarios en LaTeX

Los comentarios en Latex se pueden poner línea a línea con un % delante. Pero si lo que queremos es comentar varias líneas, lo mejor es usar el paquete verbatim, y encerrar las líneas comentadas entre \begin{comment} \end{comment}, como se muestra a continuación:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{verbatim} % comentarios

\begin{document}

\begin{comment}
Líneas comentadas...
Líneas comentadas...
\end{comment}

\end{document}

Y una forma más fácil aún. Si usas TexnicCenter, con Ctrl+Q, comentas las líneas seleccionadas, y con Ctrl+W, las descomentas. :-)

viernes, 28 de octubre de 2011

Cómo añadir las figuras y tablas al final de un artículo en LaTeX

Algunas revistas exigen que las figuras y tablas se coloquen al final del artículo, una en cada página. LaTeX permite realizar esto fácilmente con el paquete "endfloat".

Por ejemplo, supongamos que tenemos el caso siguiente, con una tabla y dos figuras:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel} % espanol
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{graphicx} % graficos

\begin{document}

Ejemplo con una tabla \ref{tabla:capitales} y unas fotos \ref{fig:perth}, \ref{fig:sidney}.

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
País & Capital \\
\hline \hline
España & Madrid \\ \hline
Australia & Camberra \\ \hline
\end{tabular}
\caption{Capitales.} \label{tabla:capitales}
\end{table}

\begin{figure}[htb]
\centering
\includegraphics[width=0.5\textwidth]{./perth}
\caption{Perth de noche.} \label{fig:perth}
\end{figure}

\begin{figure}[htb]
\centering
\includegraphics[width=0.5\textwidth]{./sidney}
\caption{Sidney de día.} \label{fig:sidney}
\end{figure}

\end{document}



Cargando el paquete "endfloat", LaTeX coloca las figuras y tablas al final del documento.

\usepackage{endfloat}


Pero además, hay que tener en cuenta una serie de consideraciones:

Nota 1: Los símbolos no anglosajones dentro de tablas y figuras no funcionan correctamente. Para ello, es mejor usar los comandos \' \~ como se muestra a continuación.
Nota 2: LaTeX añade por defecto una señal donde indica dónde se encontraban las figuras y las tablas. Para evitarlo, se puede añadir la opción nomarkers.
Nota 3: LaTeX añade por defecto dos listas con las figuras y tablas. Para evitarlo, se pueden añadir las opciones nofiglist y notablist.
Nota 4: LaTeX pone por defecto las figuras delante de las tablas. Si queremos lo contrario, se puede añadir la opción tablesfirst.
Nota 5: El paquete endfloat es específico para artículos, en otro tipo de documentos puede que no funcione correctamente.

\documentclass[a4paper,openright,12pt]{article}
\usepackage[spanish]{babel} % espanol
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{graphicx} % graficos

% librerias particulares
\usepackage[nofiglist,notablist,tablesfirst,nomarkers]{endfloat} % figuras al final

\begin{document}

Ejemplo con una tabla \ref{tabla:capitales} y unas fotos \ref{fig:perth}, \ref{fig:sidney}.

\begin{table}[htb]
\centering
\begin{tabular}{|l|l|}
\hline
Pa\'is & Capital \\
\hline \hline
Espa\~na & Madrid \\ \hline
Australia & Camberra \\ \hline
\end{tabular}
\caption{Capitales.} \label{tabla:capitales}
\end{table}

\begin{figure}[htb]
\centering
\includegraphics[width=0.5\textwidth]{./perth}
\caption{Perth de noche.} \label{fig:perth}
\end{figure}

\begin{figure}[htb]
\centering
\includegraphics[width=0.5\textwidth]{./sidney}
\caption{Sidney de d\'ia.} \label{fig:sidney}
\end{figure}

\end{document}

viernes, 14 de octubre de 2011

Símbolos de monedas y tanto por mil en LaTeX

En la siguiente entrada mostraré cómo insertar algunos símbolos en LaTeX. Nuestro archivo .tex tendrá la forma siguiente. Donde además, se carga la librería {amssymb}, para escribir el símbolo yen; {eurosym}, para poder escribir el símbolo euro, y la librería {wasysym}, para escribir los símbolos centavo y por mil:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}

\usepackage{amssymb} % para yen
\usepackage{eurosym} % para el euro
\usepackage{wasysym} % para centavo y pormil

\begin{document}

\end{document}



  • Cómo poner el símbolo de varias divisas. 
Los símbolos de libra, yen, dólar, centavo y euro, se ponen fácilmente como se muestra a continuación:

Varios símbolos de monedas: \pounds, \yen, \$, \cent, \euro.
 
Cuando usamos estos comandos dentro de una ecuación, el resultado es el siguiente:

\begin{equation}
1 \pounds = 1.19 \euro = 1.59 \$ = 159 \cent = 128 \yen
\end{equation}



Los símbolos de dólar, centavo y yen, los ha puesto correctamente. El de libra lo ha puesto en cursiva, y el de euro lo ha puesto directamente mal. Para estos dos casos, podemos usar el comando \textup{}:

\begin{equation}
1 \textup{\pounds} = 1.19 \textup{\euro} = 1.59 \$ = 159 \cent = 128 \yen
\end{equation}

  • Cómo poner el símbolo del bitcoin. 
Creo que todavía no hay un símbolo estándar para el bitcoin, pero sí varias propuestas, todas adaptaciones de una B. En cualquier caso, en el siguiente enlace (click aquí), puedes encontrar la forma para escribirlas en LaTeX.


  • Cómo poner el símbolo de tanto por mil.
Los símbolos de tanto por ciento y tanto por mil, se pueden escribir de la forma siguiente. (Para el símbolo del tanto por mil, es necesario cargar la librería wasysym.)

Símbolos de por cierto \% y por mil \permil.