Compilación condicional en LaTeX

Publicado: 2021-07-09

Resulta que mi libro en LaTeX lo diseñé con las dimensiones de los libros de No Starch Press en mente, que son 9.25 pulgadas de alto por 7 pulgadas de ancho…

Para la etapa de impresión, descubrí que estas medidas no son estándar, y después de tres meses de buscar dónde imprimirlo, sin llegar a concluir la tarea, me decidí a cambiar las dimensiones a un tamaño ofrecido por Lulu: elegí el de 9x6in (esto es, 0.25in menos de alto y 1in menos de ancho).

Como no quería lidiar con el cambio de contenido, de tener que reacomodar para que el cambio de hoja se viera bien, sin interrumpir código, y muchas cosas más, opté simplemente por cambiar los márgenes. Pero quería dos ajustes:

  1. Los márgenes y dimensiones estilo No Starch Press para el PDF.
  2. Los márgenes y dimensiones para impresión en Lulu.

Así fue como terminé con algo así:

% Márgenes para impresión en Lulu, de 9x6in (con margen de recorte).
\newcommand{\anchoDocumentoImpresion}{6.25in}
\newcommand{\altoDocumentoImpresion}{9.25in}
\newcommand{\margenIzquierdoImpresion}{0.4375in}
\newcommand{\margenDerechoImpresion}{0.4375in}
\newcommand{\margenSuperiorImpresion}{0.5625in}
\newcommand{\margenInferiorImpresion}{0.8625in}
\newcommand{\margenAdicionalImpresion}{0.250in}
\newcommand{\margenAdicionalWidthImpresion}{0.21875in}
\newcommand{\margenAdicionalSepImpresion}{0.03125in}
% Márgenes del diseño de No Starch Press.
\newcommand{\anchoDocumentoNoStarch}{7in}
\newcommand{\altoDocumentoNoStarch}{9.25in}
\newcommand{\margenIzquierdoNoStarch}{0.6875in}
\newcommand{\margenDerechoNoStarch}{0.6875in}
\newcommand{\margenSuperiorNoStarch}{0.625in}
\newcommand{\margenInferiorNoStarch}{0.800in}
\newcommand{\margenAdicionalNoStarch}{0.500in}
\newcommand{\margenAdicionalWidthNoStarch}{0.4375in}
\newcommand{\margenAdicionalSepNoStarch}{0.0625in}

Ahora que ya tenía ambas dimensiones en una variable/macro/lo-que-sea, ¿cómo hacer para generar el PDF para lectura y cómo para el PDF de impresión?

La respuesta es: con un if. Este se puede crear de la siguiente manera:

\newif\iflulu

Y ya está. Ya tengo un nuevo condicional llamado \iflulu. Si no se escribe nada más de código al respecto, el valor de lulu es falso (lo que quiere decir que el PDF con estilo No Starch Press sería el predeterminado).

Con ese \if puedo decidir cuál de las dos dimensiones utilizar:

\iflulu
    \newcommand{\anchoDocumento}{\anchoDocumentoImpresion}
    \newcommand{\altoDocumento}{\altoDocumentoImpresion}
    \newcommand{\margenIzquierdo}{\margenIzquierdoImpresion}
    \newcommand{\margenDerecho}{\margenDerechoImpresion}
    \newcommand{\margenSuperior}{\margenSuperiorImpresion}
    \newcommand{\margenInferior}{\margenInferiorImpresion}
    \newcommand{\margenAdicional}{\margenAdicionalImpresion}
    \newcommand{\margenAdicionalWidth}{\margenAdicionalWidthImpresion}
    \newcommand{\margenAdicionalSep}{\margenAdicionalSepImpresion}
\else
    \newcommand{\anchoDocumento}{\anchoDocumentoNoStarch}
    \newcommand{\altoDocumento}{\altoDocumentoNoStarch}
    \newcommand{\margenIzquierdo}{\margenIzquierdoNoStarch}
    \newcommand{\margenDerecho}{\margenDerechoNoStarch}
    \newcommand{\margenSuperior}{\margenSuperiorNoStarch}
    \newcommand{\margenInferior}{\margenInferiorNoStarch}
    \newcommand{\margenAdicional}{\margenAdicionalNoStarch}
    \newcommand{\margenAdicionalWidth}{\margenAdicionalWidthNoStarch}
    \newcommand{\margenAdicionalSep}{\margenAdicionalSepNoStarch}
\fi

Recordemos, como nunca dije que lulu era verdadero, lo predeterminado es escoger el \else.

Si quiero hacerlo verdadero, basta con agregar la línea:

\lulutrue

Y si quiero regresar a falso:

\lulufalse

Es decir, algo así luce mi código condicional:

\newif\iflulu
% \lulutrue % Debe ser verdadero si se planea mandar a impresión

% Márgenes para impresión en Lulu, de 9x6in (con margen de recorte).
\newcommand{\anchoDocumentoImpresion}{6.25in}
    % Otros ocho comandos...
% Márgenes del diseño de No Starch Press.
\newcommand{\anchoDocumentoNoStarch}{7in}
    % Otros ocho comandos...

\iflulu
    \newcommand{\anchoDocumento}{\anchoDocumentoImpresion}
        % Otros ocho comandos...
\else
    \newcommand{\anchoDocumento}{\anchoDocumentoNoStarch}
        % Otros ocho comandos...
\fi

Y sí, son más líneas de código, quizá todo se podía hacer dentro del mismo \if, sin definir una variable/comando para No Starch y otra para impresión. No obstante, creo que es más claro separarlo así. Tengo dos posibles valores, los declaro, y luego elijo uno de los dos.

¿Tienes algún comentario?

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *