¡Usa LaTeX para tus informes!

o ¡No más Word!

 

Esta es una página que muestra una forma para iniciarse en el uso de LaTeX en Windows. Está orientado a elaborar un informe general por lo que no aborda con detalle lo que es el entorno matemático ni la creación de ecuaciones ni contiene una lista de comandos de referencia (hay varias en Internet). Algunos detalles de la plantilla de ejemplo están pensados para los alumnos que estudian Ingeniería Civil en Computación en la Universidad de Chile.
Juan M. Barrios Núñez (jbarrios@dcc.uchile.cl)

 

Introducción

En el transcurso de la carrera es necesario elaborar muchos informes ya sea para cursos, prácticas o titulación. Normalmente, una gran cantidad de alumnos se deciden (o nos decidimos) sin pensarlo mucho por utilizar MS Word. Sin embargo, luego de haber tenido traumáticas experiencias e historias de horror usando Word aprendí algunas "reglas morales":

Pero digamos algo a favor... es bien fácil pegar gráficos de Excel e importar imágenes flotantes (¡ah!, se me olvidaba la "gran idea" de reubicar las imágenes dejando la mitad fuera de la hoja). También es fácil cambiar y utilizar varios tipos de letras (¡bah! se me olvidaban los pintorescos documentos escritos con letra "comic").

En esta columna daré una pequeña introducción práctica para comenzar a utilizar una forma alternativa a Word para hacer los informes: LaTeX.

LaTeX

LaTeX es un sistema para crear textos principalmente estructurados y/o con fórmulas matemáticas. La principal razón para usar LaTeX es la uniformidad del documento. La principal preocupación al escribir será el texto mismo y no las cosas "cosméticas" a éste, como el lugar donde tener un salto de página o el tipo de letra de los títulos y subtítulos. Nótese que este enfoque sirve para documentos donde lo gráfico no es esencial si no que lo es el texto y su estructura (capítulos y secciones). Claramente no haríamos en LaTeX un tríptico publicitario, un collage de fotos o la portada de una revista, pero funcionará muy bien para informes de tareas, prácticas o trabajos de título.

LaTeX funciona en un modo relativamente similar a Linux, existen diferentes distribuciones cada una otorgando las funcionalidades básicas de todo LaTeX (actualmente en la versión 2e), y agregan las características propias como forma de configuración, paquetes, comandos extras, etc. Para Linux el mas usual es teTeX que es el que viene preinstalado en varias distribuciones y para Windows es MiKTeX. Ahora los créditos: LaTeX en realidad es sólo un conjunto de macros (créditos a Leslie Lamport) que permite simplificar el uso del verdadero paquete que se encarga de hacer el trabajo: TeX (créditos a Donald Knuth).

Veamos como se inicia un documento en LaTeX. Lo esencial es tener latex instalado, el cual es el "compilador" que trasforma un documento escrito por nosotros (.tex) en un archivo para visualizar e imprimir (un .dvi). Una vez instalado se obtiene el comando latex que recibe como parámetro el archivo de entrada y genera el archivo dvi más otros auxiliares. Luego se puede utilizar algún visualizador del archivos dvi incluido para ver el documento al estilo vista previa e imprimir el resultado.

A continuación nos centraremos en MiKTeX y Windows (para mostrar una opción a utilizar Word mientras se cambian a Linux), aunque muchas de las cosas serán generales a cualquier latex. Dejo abierta la propuesta para que alguien proponga un buen entorno específico a Linux.

MiKTeX y Windows

MiKTeX es una implementación freeware de LaTeX para Windows. Su página es http://www.miktex.org/ desde la cual se pueden bajar todos los archivos necesarios. Luego de instalarlo y configurarlo, en general basta con la instalación por defecto, y luego hay que recordar habilitar el idioma español en la configuración de lenguajes (si no fallará la división de palabras).

Para crear nuestro documento puede servir cualquier editor de texto plano, sin embargo existen algunos especializados. Para Windows un editor funcional es WinEdt que tiene botones y ayudas especiales para ser utilizado con MiKTeX. Por ejemplo para transformar de .tex a .dvi basta presionar un sobre botón y con otro botón para ver el dvi . Se puede conseguir una versión shareware en http://www.winedt.com/. Tiene además un diccionario en español con el cual se pueden hacer revisiones ortográficas.

Luego de crear un dvi es interesante poder crear un ps o un pdf para imprimir en impresora láser o para distribuirlo en Internet. Para esto es recomendable instalar ghostscript y gsview. Si están instalados correctamente, funcionarán unos botones especiales en WinEdt para crear los archivos ps y pdf de tu documento. Con esto ya estamos listos con el software para crear un documento inicial. Tip: Probablemente necesitarás agregar el directorio bin de ghostscript al path del sistema.

Iniciando el documento

Los documentos se escriben en texto plano, por lo cual existen algunos comandos especiales que hay que conocer (y que es exactamente lo que escandaliza a las personas pro-Word). Para escribir los comandos especiales se utilizan uno o más de los siguientes caracteres especiales, ojo con ellos: \ (para escribir comandos), { y } (para los parámetros de los comandos), # (para referencias de parámetros), $ (para el modo matemático), % (para escribir comentarios), & (separador de columnas de tablas), _ (para subíndices) y ^ (para superíndices).

Para escribir un documento al comienzo debe ir el encabezado (también conocido como preámbulo) con instrucciones con definiciones generales al documento (como tipo y tamaño de letra), inclusión de funcionalidades (paquetes) y definición de nuevos comandos. Luego se debe señalar el inicio y el fin de nuestro texto a través de los comandos el begin document y end document:

\documentclass[12pt,letterpaper]{article}
\usepackage[spanish]{babel}
\usepackage[ansinew]{inputenc}
\usepackage[right=2cm,left=3cm,top=2cm,bottom=2cm,headsep=0cm,footskip=0.5cm]{geometry}
\usepackage[dvips]{graphicx}
\begin{document} ... acá se escribe todo ... \end{document}

Aquí se define el documento como tipo article, útil para pequeños informes. El tipo report nos servirá para informes más grandes que se dividan en capítulos. Se define que el tamaño por defecto para el documento será de 12 puntos y que el papel será tamaño carta. Tip: En WinEdt haces Control-F1 sobre un comando de LaTeX y muestra una ayuda específica.

Los paquetes se utilizan a través del comando usepackage, donde el nombre va entre { } y los parámetros entre [ ]. El paquete babel sirve para crear documentos en distintos idiomas (en este caso español) cambiando los nombres de los encabezados predefinidos. El paquete inputenc sirve para que reconozca un documento de texto escrito con caracteres extendidos, con esto no tendremos problemas en escribir las palabras con acentos o ñ, la opción ansinew es la que se utiliza en Windows y para Linux se utiliza latin1 (aunque no tienen gran diferencia). graphicx nos servirá para incluir imágenes en nuestro texto y dvips será el driver que se utilizará para ser desplegado e impreso (es el driver utilizado normalmente). El paquete geometry es de gran ayuda para definir los márgenes del documento fácilmente.

Nota: Atención que el comando inicial es \documentclass y no \documentstyle que es el comando utilizado para la versión anterior de LaTeX 2.09.

Escribiendo el texto...

Entre el begin document y el end document comenzamos a escribir nuestro informe. Lo único importante al escribir es hacer la separación entre párrafos con una línea en blanco. No importan las separaciones entre palabras ni los quiebres de línea de un mismo párrafo, pues latex las espaciará, quebrará líneas y dividirá palabras según estime mas conveniente para una mejor visualización.

Al escribir un informe debemos declarar cual es su estructura como documento, definiendo las secciones, subsecciones y subsubsecciones con los comandos \section, \subsection y \subsubsection. Como consecuencia de declarar la estructura del documento latex podrá crear el índice automáticamente mediante el comando \tableofcontents.

Para dar formato al texto se puede usar el comando \textbf{texto} para negrita (viene de "bold-face") y \textit{texto} para cursiva (viene de "italic"), para recordar los comandos WinEdt tiene botones para los mas usados (existe \emph{texto} que es una cursiva que al ser aplicada dos veces vuelve al original y se utiliza para destacar una palabra dentro de un texto destacado). Para ingresar un salto de línea obligatorio dentro de un párrafo se puede escribir con \\. Si quieres escribir un pie de página utiliza el comando \footnote{texto}. Para escribir comillas los mejor es utilizar dos acentos graves para abrir (``) y dos simples para cerrar(''), por ejemplo ``hola''.

Para el caso de referencias cruzadas debes marcar un sitio de la página con un nombre a través del comando \label{id} y luego las referencias las haces con \ref{id} para la sección o con \pageref{id} para el número de página donde está ubicado el label. Para documentos grandes, es recomendable utilizar prefijos para diferenciar secciones (sec:), figuras (fig:) y tablas (tab:) para mantener un orden. Tip: Si en WinEdt escribes \ref{} aparecerá un listado con labels existentes para que puedas elegir uno.

Una consideración a tener en cuenta es que en el comportamiento por defecto latex prefiere que una palabra traspase el margen derecho (llamado un "overfull box") a tener que bajarla a la línea siguiente y dar un espacio demasiado grande entre las palabras restantes. Sin embargo, no siempre es eso lo que se quiere, así que hay que utilizar el comando \sloppy en el preámbulo para evitarlo.

El caracter % se utiliza para escribir comentarios, por lo que si no lo escapas con \% estarás comentando el resto de la línea y al párrafo le faltarán algunas palabras. Es muy útil poner comentarios ya sea para ordenarte en la escritura texto escribiendo o para separar capítulos y secciones con líneas de asteriscos o guiones.

Los Entornos

Un entorno permite aplicar propiedades a cierto conjunto de texto del documento y son delimitados por los comandos \begin{entorno} y \end{entorno}. Existen entornos para cambiar la alineación del texto, por ejemplo flushleft (para alineado a la izquierda), flushright (adivina) y center (también adivina).

Para cambiar los tipos de letras puedes utilizar entornos o comandos, es decir puedes utilizar los entornos small, large, Large, huge, Huge (entre varios otros) que modifican el texto dentro de él. Los comandos son declarativos porque no reciben argumentos \small, \large, \Large, \bfseries (para negrita), \itshape (para cursiva), etc. y modifican todo el texto hasta algún fin de agrupación (que puede ser el final de un entorno, el final de un grupo de texto definido por { y } o hasta el final del archivo).

Para crear las viñetas es necesario utilizar el entorno itemize para puntos o enumerate para viñetas numeradas. Luego escribiendo \item se definirá cada viñeta. Por ejemplo:

\section{Título}
El primer párrafo será éste.
Este es el segundo párrafo del texto que contiene un\\quiebre.
\subsection{Subtítulo}
Los puntos a presentar son los siguientes:
\begin{itemize}
\item Punto uno.
\item Punto dos.
\end{temize}

Para escribir códigos de programa es muy útil el entorno verbatim que permite escribir en un modo en el cual no existen comandos ni caracteres especiales, cambiando el tipo de letra a una de espaciado regular, por ejemplo:

\begin{verbatim}
for(i=0; i<N; ++i){
   S=S+i;
}
\end{verbatim}

El entorno matemático permite crear ecuaciones complejas y caracteres especiales. Para ingresar a él de forma simple existe una abreviación que es escribir un signo "$" para ingresar y otro signo "$" para terminar. Dentro del entorno matemático se pueden escribir subíndices como $X_{i}$, superíndices como $a^{2}$, el caracter "\" con $\backslash$, símbolos griegos, raíces, integrales, etc. Como recordatorio sirve la serie de botones de la GUI Palette de WinEdt.

Las Tablas

Para crear tablas puede ser un poco complicado: se utiliza el entorno tabular donde se definen el número de columnas a crear y su alineación. Luego para separar columnas se ingresa un & y para separar filas se ingresa un \\. Por ejemplo, para una tabla con 3 celdas, la primera con el texto alineado a la izquierda, la segunda centrada, y la tercera a la derecha sería:

\begin{tabular}{lcr}
valores de la primera fila: & val 1 & val 2\\
valores de la segunda fila: & val 3 & val 4\\
\end{tabular}

Ahora si queremos que aparezcan las líneas de separación es necesario escribir un "|" entre la definición de las columnas para las líneas verticales y \hline al final de cada fila para líneas horizontales. La misma tabla ahora cuadriculada sería:

\begin{tabular}{|l|c|r|} \hline
valores de la primera fila: & val 1 & val 2\\ \hline
valores de la segunda fila: & val 3 & val 4\\ \hline
\end{tabular}

Hay algunos programas para ayudar a crear tablas en LaTeX de forma visual. El que he probado y funciona bien se llama LaTable y se puede bajar desde http://www.g32.org/latable/.

¿Y las imágenes?

Para las imágenes se pueden utilizar directamente bmp en miktex, sin embargo hay que definir a mano sus tamaños (alto y ancho) por lo que es recomendable utilizar eps (postcript encapsulado) porque toma automáticamente los tamaños y se incluyen mejor para crear ps o pdf. Para pasar una imagen a eps puedes hacerlo instalando una impresora postcript hacia un archivo, o instalar algún programa especial como adobe illustrator o macromedia freehand para abrir una imagen y guardarla como eps.

Para el primer caso hay que elegir una impresora postcript (por ejemplo la "HP LaserJet 6P/6MP PostScript" o la "IBM 4029 LaserPrinter PS39" funcionan bien) y configurarla para que imprima sobre un archivo (puerto FILE) y encapsulado (output options: EPS), y para cada eps creado tener cuidado con el llamado BoundingBox que señalan los márgenes de la imagen y que utiliza latex para conocer su tamaño, porque por lo general quedarán marcados como el margen de la página impresa y no rodeando la imagen, pero se pueden redefinir automáticamente para que rodeen la imagen utilizando gsview (abrir el archivo y seleccionar "PS to EPS").

Para importar una imagen en tu documento se usa \graphics[parámetros]{nombreArchivo}. Entre los parámetros útiles están width, height y scale para el tamaño. El programa de visualización de dvi (de nombre yap) hace sólo una vista previa de las imágenes por lo que no te escandalices si en el visor no tienen mucha definición. Tips: En la primera utilización de yap recuerda configurarlo (view->options) para que el tamaño de la página sea el que desees y que al hacer doble clic sobre el texto invoque a WinEdt para editar la línea. Al contener imágenes se vuelve más lenta la visualización, pero puedes escribir la opción draft al importar el paquete graphicx para sólo desplegar un cuadro vacío.

Nota: Esta NO es la única forma de hacer o incluir imágenes si no que existen varias, desde utilizar otros paquetes u otras comandos para crear imágenes (epsfig, ps2epsi, etc.). A modo de recomendación, un buen programa existente para crear diagramas y exportarlos como imágenes es SmartDraw.

Normalmente, cada imagen existente dentro de un documento debe ser referenciada dentro del texto, para esto se puede utilizar el entorno figure para definir un objeto flotante, luego definir un nombre y número con el comando \caption para luego hacer referencias cruzadas como se explicó más arriba. El entorno figure recibe como parámetro los criterios a utilizar para la ubicación del objeto: h para preferir el mismo lugar donde se ingresó comando (ya sea al principio o fin de una página), t para que se ubique al inicio de la próxima página, b para el fin de la próxima página, o p para que exista una página exclusiva para objetos flotantes sin mezclarse con el texto, por ejemplo:

La figura \ref{fig:grafico} muestra un gráfico con los valores de ...
\begin{figure}[ht]
  \begin{center}
    \includegraphics[scale=.75]{grafico.eps}
    \caption{Gráfico de valores} 
    \label{fig:grafico}
  \end{center}
\end{figure}

Recuerda: Si dentro del documento utilizarás muchas veces un código similar, es muy útil crear un comando personalizado o un entorno personalizado para evitar sucesivos copy-paste y asegurarse que quedará un documento uniforme. Para esto utiliza los comandos \newcommand{nombre}{comandos} o \newenvironment{nombre}{comandos al iniciar}{comandos al cerrar}, respectivamente. Por ejemplo es útil definir un comando especial para importar un gráfico, para escribir código fuente, o para escribir nombres de funciones o variables para definir en un solo punto el tipo de letra a utilizar.

Crear una Bibliografía

Para una memoria es usual utilizar bibliografías de un tamaño que se comienza a hacer difícil de manejar, en especial para hacer referencias hacia ella. Para esto funciona bien el paquete BibTeX, donde guardas todos tus libros con sus datos, y luego lo referencias en el documento por un identificador definido por ti. Debes crear un archivo .bib donde van los datos de todos los libros que tienes, no solo los de el trabajo actual si no que tu librería completa, de los cuales referencias sólo los libros que utilizarás en el documento en particular. Puedes registrar varios tipos de fuentes, para cada una existiendo un comando especial (los más usuales son @book, @article, @misc, @manual) y dependiendo de esto son los campos particulares que se despliegan. Un ejemplo de un registro de un libro es el siguiente (el primer campo es el identificador único):

@BOOK{tutorial,
AUTHOR = "S. Bodoff and D. Green and K. Haase and E. Jendrock and B. Stearns",
TITLE = "The J2EE Tutorial",
PUBLISHER = "Addison-Wesley",
YEAR = 2002,
ORGANIZATION = "Sun Microsystems, Inc."}

Para referenciar el libro dentro del documento bastaría con escribir \cite{tutorial}, o si quieres señalar un capítulo o página en especial puedes hacerlo por ejemplo con \cite[cap.7]{tutorial}.

Existen varios tipos de bibliografías, las más usadas en papers son alpha y plain. La primera crea los nombres de los documentos con el autor y el año por ej. [Tho97] y la segunda sólo con un número correlativo por ej. [3]. Para crear la página de bibliografía incluye los siguientes dos comandos:

\bibliographystyle{plain} 
\bibliography{archivo}

El primero define el tipo de bibliografía a usar y el segundo para definir el archivo (.bib) con la base de datos de los libros. Para el caso que desees agregar un libro que no hayas referenciado dentro del texto agrégalo con \nocite{id}.

Compilación

Ya había mencionado que para compilar un documento con WinEdt basta presionar el botón que dice LaTeX, en ese instante aparece una ventana de DOS con la ejecución del programa latex. Si todo va bien al final del proceso aparecerá un mensaje similar a "output writted to" y se habrán creado un conjunto de archivos auxiliares (.aux, .toc, .log, etc.) más el .dvi. En el caso que estés generando el índice de contenidos o estés haciendo referencias cruzadas deberás ejecutar dos veces seguidas latex, la primera para que recorra el archivo y guarde todos los datos en archivos auxiliares y en la segunda los incluya en el dvi. Si estas usando BibTeX luego de compilar con latex hay que compilar con bibtex para crear las referencias a los libros utilizados y luego compilar con latex nuevamente para incluirlas. Tip: En WinEdt puedes seleccionar una configuración "MiKTeX Direct" que elimina el mensaje "presione una tecla para continuar" luego de cada compilación.

Durante la compilación suelen suceder una serie de warnings que los puedes recorrer a través de WinEdt presionando sobre el botón para ver el log. Los más usuales son:

En el caso de que suceda un error, latex señalará la línea en la cual se produce el error y esperará que el usuario ingrese una solución, mejor lee el mensaje y escribe una X para salir de latex y revisa la línea del error. Los mensajes más usuales son:

Algunas veces ocurren errores debido a que los archivos auxiliares contienen información errónea producto de cambios drásticos de la estructura del documento, como por ejemplo cambiar el estilo del documento de report a article invalidando los capítulos existentes en el archivo .toc. Para este tipo de situaciones la solución es eliminar los archivos auxiliares, que para el caso de WinEdt es presionar sobre "Erase Output Files".

Imprimir

Una vez terminado tu informe y lo quieras imprimir en la impresora láser, lo que mejor me ha funcionado ha sido imprimir con el archivo pdf que ha sido generado a partir del archivo ps y con todas las imágenes como eps. En WinEdt sería presionar sobre los botones: LaTeX, luego dvi->ps, y finalmente ps->pdf.

Si quieres conseguir un archivo pdf para distribuir en la web el cual contenga la tabla de contenidos dentro de él y que el índice funcione como links deberás utilizar pdftex. Si quieres crear una versión en html de tu informe tendrás que utilizar latex2html.

Ejemplo

A continuación publico parte del archivo .tex con el informe de mi memoria para que te sirva como base para que inicies la tuya, ya que contiene los formatos que entregan en la Oficina de Títulos y Grados de la Escuela (al menos al año 2002):

Ejemplo Trabajo de Título / Ejemplo BibTeX

A modo de ejemplo este es el informe final de mi trabajo de título que fue escrito en LaTeX:

Informe elaborado en LaTeX [800k]

Si te interesó el tema de mi trabajo de título puedes ver la página donde contengo información relativa a J2EE.

Conclusión

Espero esta columna te haya motivado (y no desmotivado) para al menos probar un informe en latex. De más está decir que todas las formas que están escritas no son las únicas formas de hacerlo (en particular en lo que se refiere a editor, paquetes utilizados, formas de incluir una imagen o crear un pdf), pero es al menos un inicio para que después cada uno investigue la forma que más le acomoda. Existen una gran cantidad de paquetes que permiten hacer un sinfín de cosas en latex (por ejemplo texto que rodee una imagen, cambiar encabezados de página, estilos para títulos, escribir en colores, hacer diapositivas o transparencias, utilizar TeX, etc.), pero hay que ir de a poco... Inicialmente esta columna puede ser una gran cantidad de información, pero luego de ser asimilada puedes sacar provecho de latex y crear unos documentos impecables.

Algunos links útiles (a parte de los dados anteriormente) son:


30 de Mayo de 2003
Juan Manuel Barrios