Curso no convencional de LaTeX: abramos la caja de herramientas

Ya sabemos usar LaTeX, crear documentos complejos, presentaciones y hasta macros propias. Este capítulo es un poco diferente a los anteriores ya que en lugar de averiguar cómo se hacen las cosas en LaTeX, vamos a hablar de herramientas externas y trucos que nos pueden ayudar a la hora de crear nuestro documento.

Veremos algunos paquetes que simplifican el proceso de probar el formato, cómo crear una plantilla o un registro de cambios y algunas herramientas que no pertenecen a LaTeX propiamente dicho pero que son interesantes.

Fase de pruebas

Vamos a ver dos partes del proceso de testar nuestro precioso formato: crear un borrador y generar un documento de prueba en el que podemos cambiar el formato sin necesidad de tener contenido.

Un borrador

Podemos crear un borrador del documento gracias al argumento opcional draft de \documentclass. Tiene dos ventajas:

  • Se reduce el tiempo de compilación ya que no se pinta todo el contenido. Por ejemplo, se sustituyen las imágenes por cajas del mismo tamaño que contienen el nombre de la imagen.

  • Permite ver más fácilmente errores como las overfull boxes1, lugares en los que el texto invade el margen, que marca con una barra.

Muchos paquetes tienen esta opción, cada cual con sus características concretas. Si establecemos draft como opción de la clase afecta a todos ellos, si queremos que solo afecte a alguno, podemos darla como opción del paquete.

Texto e imágenes de prueba

Existen un par de paquetes que nos rellenan las páginas de texto sin sentido para que nos resulte más fácil ver el efecto de algún paquete u opción. El más sencillito es lipsum, la implementación para LaTeX del típico Lorem Ipsum. No puede ser más fácil de usar:

\documentclass[draft]{article}
\usepackage{lipsum}
\begin{document}
  \lipsum % Texto Lorem Ipsum completo
  \lipsum[17] % El párrafo 17 será texto sin sentido
\end{document}

Otra opción un poco más potente es blindtext, que tiene varias ventajas respecto a lipsum:

  • Depende del idioma así que se puede ver qué tal va la silabación. Ahora mismo los idiomas disponibles son inglés, francés, alemán, latín y catalán.

  • A diferencia del paquete lipsum, que solo nos crea texto, tenemos la posibilidad de generar listas, ecuaciones y hasta un documento completo si se lo pedimos.

  • Podemos crear texto formado por pangramas, frases que contienen todas las letras del abecedario de un idioma concreto, interesante para probar tipografías. También podemos usar trozos de la Biblia, cosa que me parece absolutamente genial aunque utilidad práctica le veo menos.

Veamos ahora cómo se usa, que es un poco más complejo que lipsum. Para crear texto tenemos dos comandos:

  • \blindtext crea un trozo de texto corto. Opcionalmente le podemos dar el número de veces que queremos que repita el texto con \blindtext[REPETICIONES].

  • \Blindtext crea un trozo de texto largo. Puede tomar como opciones el número de párrafos y el de repeticiones con \Blindtext[PARRÁFOS][REPETICIONES]

Podemos fabricar un documento completo, largo o corto, con y sin ecuaciones:

  • \blindocument crea un documento corto, si delante activamos las matemáticas con \blindmathtrue tendrá también ecuaciones. El documento tendrá títulos de sección de todos los niveles y varios tipos de listas.

  • \Blindocument crea un documento largo, funciona exactamente igual que el anterior.

  • \blindmathpaper crea un documento con ecuaciones.

Hay otras opciones para crear listas y así, en el manual lo tenéis bien explicado.

En cuanto a las imágenes, el paquete mwe (Minimal Working Example) nos proporciona diversas imágenes de prueba2 de diferentes proporciones y formatos. Este paquete también nos carga graphicx y si están instalados, lipsum y blindtext. No hace falta que carguemos el paquete para usar estas imágenes, las instala de tal manera que al compilar se pueda acceder a ellas.

Para usarlas simplemente las llamamos por su nombre:

\includegraphics{example-image-a}

Una plantilla

Cuando ya tengamos nuestro formato perfectamente definido, si vamos a usarlo a menudo podemos crear una plantilla a partir del documento. Todos los IDEs que yo conozco permiten exportar una plantilla a partir del documento actual, más adelante podremos importarla y tendremos una base desde la que trabajar.

Otra opción es crear nuestra propio paquete (sty) o clase (cls). Crearemos un paquete si nuestras macros valen para diferentes clases, y si, en cambio,estamos definiendo un tipo de documento, crearemos una clase. Tanto las clases como los paquetes consisten en lo que escribimos en el preámbulo de nuestros documentos formateado de otra manera.

Os pongo como ejemplo un paquete muy poco ortodoxo que nos carga los paquetes de idioma para cuando queremos escribir en español. Consistiría en el archivo español.sty con el siguiente contenido:

% Versión de LaTeX usada
\NeedsTeXFormat{LaTeX2e}[1994/06/01]

% Nombre del paquete creado
\ProvidesPackage{español}

% Paquetes usados
\RequirePackage[utf8]{inputenc}
\RequirePackage[spanish]{babel}
\RequirePackage[T1]{fontenc}
\RequirePackage{lmodern}

Como veis, usamos \RequirePackage en lugar de \usepackage, pero se parece bastante a un preámbulo de toda la vida. Guardamos nuestro paquete en un lugar accesible y lo llamamos como a cualquier otro con \usepackage{español}.

Hay más información sobre la creación de clases y paquetes en las referencias.

Cambios y versiones

Que manejemos texto plano tiene una gran ventaja: podemos fácilmente incluir software de control de versiones en nuestro flujo de trabajo. Además de las ventajas que ya tiene el control de versiones de por sí, nos permite incluir información sobre las versiones y los cambios en el propio documento

Tenemos, además, un montón de paquetes para añadir información sobre los cambios al documento. Algunos incluyen al pie o en una marca de agua la versión actual, como [gitinfo2], con otros como [vhistory] registramos el historial de cambios en una tabla de manera manual mediante el comando \vhEntry:

\vhEntry{VERSIÓN}{FECHA}{AUTOR}{CAMBIOS}

Después, podemos hacer referencia a esta información en el cuerpo del documento, ya sea el número de versión o la lista de autores. Aquí tenéis el manual del paquete si queréis echarle un ojo.

Es fácil crear registro de cambios casero si usamos git. Una manera es etiquetar los puntos más interesantes, exportar una tabla con la información deseada e incluirla en el documento mediante el comando \input{}.

Para etiquetar podemos usar una etiqueta anotada o ligera, con la primera podemos añadirle un mensaje a la etiqueta, la ligera simplemente marca el commit anterior. Yo voy a usar etiquetas ligeras como ejemplo. Procedamos:

git tag NOMBRE

Luego, para exportar en formato LaTeX la información de cada etiqueta que hemos creado usamos algo de este estilo, dependiendo de qué queramos conseguir:

git for-each-ref --format="%(refname:short) & %(authordate:short) & %(subject) \\\\" refs/tags > log.tex

Como hemos formateado la información como si fuera el contenido de una tabla (¡mirad los separadores de columna y el salto de línea!) , lo incluimos dentro de un entorno tabular en el que escribimos los encabezados:

\begin{tabular}{l l l}
  \textbf{Versión} & \textbf{Fecha} & \textbf{Descripción} \\
  & & \\
  \input{log.tex} % incluir datos
\end{tabular}

Por supuesto, podríamos crear una macro, formatear la información de cualquier otro modo o incluso fusionarlo con el paquete vhistory, simplemente os enseño mi sistema, a partir de ahí cada que haga uso de su libre albedrío.

Para automatizar esto hay varias maneras, una de ellas es escribir un hook de git, otra es incluir la línea anterior en el Makefile, si lo estamos usando, y la más simple es modificar la orden de compilación que ejecuta nuestro IDE.

Cambiando ligeramente de tema, una manera interesante de mostrar los cambios entre dos versiones de un documento es [latexdiff], un script de Perl que compara dos archivos de LaTeX y genera un tercer archivo destacando los cambios.

Una vez instalados Perl y latexdiff, si no los teníamos ya, no hay más que escribir lo siguiente en la terminal3:

latexdiff viejo.tex nuevo.tex > dif.tex

Si compilamos dif.tex conseguiremos algo así:

Marcando las diferencias

Tacha en rojo lo que hemos borrado y destaca en azul lo que hemos añadido. Me parece especialmente útil para cuando estamos colaborando, se ve de un vistazo cómo quedan los cambios.

Por cierto, si no queréis instalar nada también hay una versión online en la que pegamos el contenido de los archivos a comparar y nos aparece el archivo de diferencias que podemos a su vez copiar y compilar.

Exportar a LaTeX

Este último apartado sobre las herramientas trata de exportar contenido que tenemos en otros formatos a LaTeX. De esta manera conseguimos dos cosas:

  • Incluir con facilidad contenido creado en otros programas en LaTeX.

  • Ayudarnos a crear elementos que resultan complejos de llevar a cabo en LaTeX, como podrían ser las tablas y las portadas.

En el caso de las tablas se entrelazan ambas problemáticas, cuesta escribir tablas en LaTeX y, además, muchas veces tenemos esas tablas en otros formatos. Si nuestro problema es el primero, tenemos editores online con los que crear la tabla de manera visual y exportarla a continuación. Si nos pasan un poco de las dos cosas tenemos varias herramientas, la que más he usado ha sido Excel2Latex, un plugin para Excel que nos permite seleccionar y exportar una tabla concreta en formato LaTeX, la verdad es que funciona bastante bien. También hay una versión para OpenOffice, Calc2LaTeX, pero es viejecita y no sé qué tal funciona, y tenemos Matrix2LaTeX para Python y Matlab que no he usado.

Una herramienta similar es Writer2LaTeX que sirve para exportar de Libre Office Writer a LaTeX, no es la panacea pero nos puede ayudar cuando tenemos que seguir cierta plantilla y solo nos proporcionan un doc, ¿os suena esto?

Sin duda el programa definitivo para las labores de conversión es Pandoc, del que ya hemos hablado y que trataremos largo y tendido dentro de poco. Con una terminal y una orden muy sencilla transforma casi cualquier formato de texto a casi cualquier otro:

pandoc OPCIONES INPUT -o OUTPUT

Resumen

En este capítulo he mencionado diferentes herramientas útiles sin entrar demasiado en detalle para que vosotros mismos investiguéis las que mejor se adapten a vuestras necesidades. Hemos hablado de borradores, texto e imágenes de prueba, plantillas, clases y paquetes, control de versiones y sobre cómo exportar el contenido creado en otros programas a LaTeX. Evidentemente, hay muchas más herramientas relacionadas con LaTeX ahí fuera, estas son las que me han servido a mí en mi larga relación con este lenguaje de marcado tan simpático.

Referencias

What does the draft mode change? en TeXExchange

Creating a LaTeX Minimal Example (pdf)

El paquete lipsum

El paquete blindtext

Example images in LaTeX? en TexExchange

Creating a default preamble en TeXExchange

Manual de Kile (pdf)

Manual de TexStudio

LaTeX/Creating Packages en Wikibooks

LaTeX 2ε for class and package writers

Best practice for maintaining change history in tex en TeXExchange

Tracking changes in LaTeX files

Registro de cambios en un documento LaTeX con git

LaTeX packages for use with revision control

Highlighting the different between Latex Documents in Windows 7 using Latexdiff

LaTeX/Collaborative Writing of LaTeX Documents en Wikibooks

When and why should I use % !TEX TS-program and % !TEX encoding? en TeXExchange

Converting a spreadsheet to LaTeX



  1. Las overfull boxes ocurren a menudo porque LaTeX no sabe cómo partir una palabra (pasa mucho con las direcciones de correo electrónico y las URLs) y haga lo que haga el pobre acaba invadiendo el margen, ahí tenemos que entrar nosotros 
  2. Viven en /usr/share/texlive/texmf-dist/tex/latex/mwe/ si las queréis mirar. 
  3. Si estáis en Windows y después de instalar Perl no os funciona, probad latexdiff-so, la versión standalone. Hablé de ello un poco más en detalle aquí
Anuncios

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s