LaTeX para profes: utlizando etoolbox para tomar decisiones en LaTeX

📆 16 de junio de 2020 | 📖 3 minutos | 🏷️ latexdocencia

Desde que empecé con la docencia en línea tuve claro que necesitaba preparar los temas en dos formatos, uno que se pudiera ver bien en un PC y otro para dispositivos móviles. Por eso los documentos los entrego en formato PDF, en tamaños a4 y b5.

El problema de mantener dos versiones por separado es evidente. Si hago algún cambio en una de las versiones tengo que acordarme de corregir la otra versión. Si por lo que sea me despisto, la información podría no estar actualizada en ambos documentos. Para evitar este problema decidí utilizar dos preámbulos diferentes que usan el mismo documento fuente de texto. Es decir, tengo un documento con el preámbulo para a4, otro para b5 y otro que contiene el texto del documento. De esa forma, cualquier cambio que haga en el texto queda reflejado en ambas versiones.

Hasta aquí todo bien. Pero a la hora de incluir imágenes hay un problema. En el documento b5 las imágenes tienen que ser siempre grandes, para aprovechar el máximo de pantalla y que se puedan leer bien pero en el a4, esas mismas imágenes resultan excesivamente grandes. Si las ajusto a que se vean bien en a4 en b5 casi no se distinguen. Así que hasta hace poco optaba por el mal menor y las imágenes iban siempre con una anchura igual a la línea de texto, para que en b5 se pudieran ver bien.

El resultado no era el mejor, así que busqué un poco y así di con el paquete etoolbox que permite, entre otras cosas, crear condicionales en un documento. De ese modo puedes obtener dos resultados diferentes a partir del mismo documento fuente.

Para usarlo hay que incluir el paquete en ambos preámbulos y definir el toggle o condición en un preámbulo como verdadero y en el otro como falso.

Este es un preámbulo para la versión b5:

% Preámbulo del documento en formato b5

\documentclass[12pt]{article}
\usepackage[b5paper]{geometry}
\usepackage{etoolbox}
\newtoggle{BCINCO} % se define la condición BCINCO
\toggletrue{BCINCO} % se cumple la condición BCINCO

\input{documento.tex}

Y este un preámbulo para la versión a4:

%% Preámbulo del documento en formato a4

\documentclass[12pt]{article}
\usepackage[a4paper]{geometry}
\usepackage{etoolbox}
\newtoggle{BCINCO} % se define la condición BCINCO
\togglefalse{BCINCO} % no se cumple la condición BCINCO

\input{documento.tex}

Ahora solo falta definir en el documento las partes en las que queremos que haya el procesado alternativo del texto en función de la versión. Para eso utilizamos \iftoggle{}{}{}. En el primer par de llaves definimos el toggle que estamos procesando, en el segundo lo que ocurrirá cuando la condición sea cierta y en el tercero lo que ocurrirá cuando la condición no sea cierta:

\iftoggle{BCINCO}
{ Esto ocurre cuando el documento es b5 }
{ Esto ocurre cuando el documento es a4 }

Como dije antes yo lo estoy usando para seleccionar un tamaño alternativo en las imágenes, de forma que queda así:

% documento.tex

\begin{document}

\begin{figure}

\iftoggle{BCINCO}

{ \includegraphics[width=0.8\linewidth]{image.jpg} }
{ \includegraphics[width=0.5\linewidth]{image.jpg} }

\end{figure}

\end{document}

De esta forma, cuando se está compilando el documento b5 la anchura de la imagen se ajusta a 0.8\linewidth mientras que cuando se compila el a4 la imagen tiene una anchura de 0.5\linewidth.

Resultado utilizando etoolbox para a4 (izquierda) y b5 (derecha)
Resultado utilizando etoolbox para a4 (izquierda) y b5 (derecha)

Por supuesto, se podrían haber cambiado más cosas o incluir dos imágenes diferentes en función del tipo de formato. Es cuestión de encontrar el mejor uso de esta opción. Y no solo con imágenes o con tamaños de formato. Por ejemplo podríamos tener dos documentos uno que incluyera una información concreta y a lo mejor algún anexo en la versión alternativa.

Además, etoolbox permite muchas más cosas. Hay otras opciones para incluir condicionales pero a mí me parece una opción muy cómoda e interesante.

¿Algún otro uso que se le pueda dar? Si tienes una idea déjala en los comentarios.

Un saludo.

Puedes compartirlo si te gustó

También puedes dejar un comentario

Comentarios vía Talkyard.