LaTeX para apuntes: encabezados y más.

Ayer me metí de nuevo todavía más profundo en LaTeX en este proyecto para crear una plantilla para unos apuntes chulos para Dani. Como seguramente me llevará un rato contar lo que aprendí, vamos directamente a la chicha del asunto.

Los requerimientos

Vamos a empezar haciendo una recapitulación de lo que hay por hacer. ¿Qué queremos conseguir?

Dani me envió un email con un par de ejemplos de apuntes y una plantilla que tenía en mente. Básicamente había que entrar en algunos elementos del documento:

Encabezado

El encabezado debe:

  • Contener tres líneas de texto en la parte de la izquierda. Cada línea variará con el tipo de apunte. Las dos primeras líneas de texto son algo más pequeñas que la tercera.
  • Tener el logo del instituto en la parte derecha
  • Tener una línea horizontal bajo el encabezado
  • Estar completamente en un color ligeramente gris

Pie de página

El pie de página debe estar a la derecha y tener el formato “Página X de Y”, siendo X la página actual e Y el total de páginas.

Márgenes de página

Los márgenes de página deben ser de dos centímetros.

Tipo de letra

El tipo de letra debe ser Verdana.

Show me the code!

A lo largo de un par de horas tuve que investigar para lograr lo requerido. Era la primera vez que iba tan profundo en LaTeX, por ejemplo modificando los encabezados o cambiando el color de la fuente. Algunas cosas fueron muy específicas y tuve que rebuscar en foros y probar diferentes soluciones.

Vamos ya con el despiece del código. Añadir primero que tomé el documento inicial y le quité todo lo que sobraba a partir de las nuevas especificaciones, como el título, el nombre del autor o el índice.

También mencionar que terminé editando el fichero tex en TeXworks. Intenté hacer funcionar el asunto LaTeX en Visual Studio Code mediante la extensión LaTeX Workshop, pero, aunque funcionaba el resaltado de sintaxis, fracasé en mi intento de compilar el documento y mostrarlo, y lo que pude investigar con respecto al asunto fue en vano. Finalmente edité en TeXworks en lugar de TeXstudio, pues encontré el editor más ligero y más sencillo e igualmente funcional.

Por cierto, una cosa que me sorprendió agradablemente de TeXworks es que tiene una pequeña ventana de mensajes en la que, durante la compilación, se puede ver lo que está ocurriendo. Esto me permitió descubrir por qué a veces tarda más en compilar. Por ejemplo, cuando se incluye un paquete nuevo, se establece una conexión con los repositorios LaTeX para descargarlo y después se instala, lo que demora algo la compilación del documento. Cuando el ordenador hace algo, me gusta saber de qué se trata; comprender me sirve para ser más paciente.

Ahora sí, vamos con el nuevo código:

Redefiniendo el documento

Vamos a seguir usando la clase article. Dos requerimientos al respecto son:

  • Usar una fuente de tamaño 12pt
  • Imprimir a una única cara. Es decir, no hacemos distinción entre páginas pares e impares: todas son iguales.
\documentclass[
12pt, % Tamaño de fuente
oneside % Imprimimos a una cara
]{article}

Mencionar que he formateado el código repartiendo las opciones en líneas para poder comentarlas una a una.

Definiendo el tipo de fuente

\usepackage{helvet}

Esto tiene poco misterio, salvo encontrar el nombre LaTeX específico para la familia que queramos usar. En la red podemos encontrar el Catálogo de Fuentes LaTeX, que nos muestra un vasto catálogo de fuentes que podemos usar así como la manera de hacerlo.

Incluyendo los paquetes nuevos necesarios

Para poder acceder a algunas de las funcionalidades precisadas por los nuevos requerimientos, tuve que recurrir al uso de algunos paquetes nuevos. Además, conservé los necesarios del documento original, como los relativos a las fuentes, el idioma o las ecuaciones matemáticas.

Los paquetes nuevos fueron:

Para poder acceder al número de la última página para construir el pie de página:

\usepackage{lastpage}

Para poder incluir el logo:

\usepackage{graphicx}

Para poder generar texto lorem ipsum para ver claramente el formato de las páginas en acción:

\usepackage{lipsum}

Para poder gestionar los márgenes del documento:

\usepackage[]{geometry} 

Este paquete lo usamos en este caso con todas estas opciones para responder a los requerimientos:

\usepackage[
a4paper, % Tamaño de hoja A4
margin=2cm, % Márgenes
top=10mm, % Margen superior
bottom=20mm, % Margen inferior
includehead, % Incluir el encabezado al calcular el margen
includefoot, % Incluir el pie de página al calcular el margen
headheight=55pt % Empezamos el texto a 50pt del borde superior para dar cabida al encabezado de tres líneas
]{geometry}

Para poder cambiar el color del encabezado:

\usepackage{color}

Para poder hacer filigranas con el encabezado:

\usepackage{fancyhdr}

Encabezando

Vamos a empezar el festival LaTeX modificando el encabezado según los requerimientos.

Definimos el estilo de la página haciendo uso de las opciones que nos ofrece el paquete fancyhdr. Usaremos el estilo de página tipo fancy:

\pagestyle{fancy}

La parte izquierda de la parte contratante

Dado que las tres líneas de texto del encabezado del documento variarán de un documento a otro, vamos a probar, también para practicar, el crear tres comandos que, al ser invocados, imprimirán el texto de estas líneas:

% Nombre del documento (puede ser: Apuntes, Actividades, Examen, Documento, Trabajo, Criterios…) 
\newcommand{\nombreDocumento}{NOMBRE_DEL_DOCUMENTO}
% Nombre de la Unidad en concreto
\newcommand{\nombreUnidad}{NOMBRE_DE_LA_UNIDAD}
% Nombre del módulo (asignatura)
\newcommand{\nombreModulo}{NOMBRE_DEL_MODULO}

Lo escrito en mayúsculas lo cambiaremos en cada documento y podremos usar entonces los comandos definidos en su lugar. Esto es: puedo escribir en 20 lugares diferentes \nombreDocumento y, solamente cambiando la definición que aquí he puesto en mayúsculas, se cambiará automáticamente en esos veinte lugares del documento. En esta ocasión, como sólo vamos a usar estos datos en el encabezado, tiene poca utilidad, pero puede ser útil para otros proyectos y conviene saberlo.

A continuación, usamos estas variables/nuevos comandos para definir la parte izquierda el encabezado. Como vamos a hacer el encabezado en un cierto tono de gris, comenzaremos definiendo ese color:

\definecolor{light-gray}{gray}{0.15}

Con esto hemos definido un color nuevo llamado light-gray que, si lo he entendido bien, está hecho de negro con un 15% de gris.

A continuación, definimos la parte izquierda del encabezado en sí:

\lhead{
{\color{light-gray} \small \nombreDocumento} \\
{\color{light-gray} \small \nombreUnidad} \\
\color{light-gray} \nombreModulo
}

A notar aquí

  • \lhead = left head = parte izquierda del encabezado
  • Usamos el color que hemos definido
  • En las dos primeras líneas, usamos \small para reducir un punto el tamaño de la letra.
  • Utilizamos, en cada línea, el comando que hemos definido anteriormente.
  • Al final de las dos primeras líneas forzamos un salto de carro con la doble barra invertida
  • Las dos primeras líneas necesitan esos corchetes extra para delimitar el ámbito de acción de \small

La parte derecha

Vamos ahora con el logo, que resolvemos con esta línea:

\rhead{\includegraphics[width=2.25cm]{Logo.png}}

Esto es lo que hemos hecho:

  • En la parte derecha del encabezado (rhead = right head = parte derecha del encabezado), importamos el logo mediante el comando \includegraphics.
  • Para ello le pasamos como parámetro el nombre del fichero y como opción su anchura. A partir de la anchura se deriva la altura.
  • Mencionar también que la imagen a importar debe estar en el mismo directorio que el fichero tex que estamos editando. Si lo hubiéramos guardado, para organizarnos mejor, en una carpeta por ejemplo llamada “images”, tendríamos que pasarle la ruta hasta la misma (images/Logo.png).

La línea bajo el encabezado

Por último, hay que hacer algo de orfebrería para cambiar el color de la línea que subraya el encabezado. Lo conseguimos de la siguiente manera:

\let\oldheadrule\headrule % Copy \headrule into \oldheadrule
\renewcommand{\headrule}{\color{light-gray}\oldheadrule} % Add colour to \headrule

Estas dos líneas las encuentro confusas, y de hecho he dejado los comentarios en inglés que encontré en mi investigación. Mi interpretación de lo que hacen es la siguiente:

\let\oldheadrule\headrule % Copy \headrule into \oldheadrule

\let hace una asignación del tipo: primer_comando = segundo_comando. Es decir, hacemos una copia de la línea de la cabecera y la almacenamos en la variable oldheadrule.

\renewcommand{\headrule}{\color{light-gray}\oldheadrule} % Add colour to \headrule

A continuación reescribimos el comando headrule usando la línea original pero asignándole el nuevo color.

El pie de página

Tras finiquitar el encabezado, vayamos al pie de página, que tiene mucha menos enjundia. Lo resolvemos de la siguiente manera:

\rfoot{Página \thepage\ de \pageref{LastPage}}  % Número de página

rfoot hace referencia a right foot, pie derecho, la parte derecha del pie de página. Como parámetro del comando le pasamos el texto que queremos que contenga. En esta ocasión, el texto contiene dos variables:

  • \thepage – Es una variable que hace referencia a la página actual
  • \pageref{LastPage} – Es una referencia a la última página del documento

Notar que, después de \thepage, por algún motivo hay que escapar el espacio que viene a continuación para que aparezca. Lo escapamos de esta manera: “\ ” (he puesto las comillas para que se vea el espacio).

El estilo de página fancy tiene el número de página en el centro del pie por defecto, así que lo vamos a “vaciar” con el comando \cfoot y el parámetro “vacío”.

\cfoot{}    % Eliminamos el número central del estilo fancy original

Con esto hemos resuelto el pie de página.

Creando un documento de ejemplo

Lo único que queda ya es generar un esqueleto mínimo viable de documento con el que podamos hacernos una idea del aspecto final de nuestra creación:

% Inicio del documento
\begin{document}
% Aquí va el texto del documento
   \section{Primera sección}
   \lipsum
\subsection{Aquí una prueba de subsección}
\lipsum

% Finalizamos el documento
\end{document}

Lo único nuevo que aparece aquí es el uso del paquete lipsum que hemos incluido al principio, entre los paquetes nuevos. Lo que hace es soltar un chorro de dos páginas de lorem ipsum cada vez que lo invocamos con \lipsum. Fenomenal.

Despedida y cierre

Con esto terminamos este segundo artículo acerca de la creación de una plantilla para los apuntes de Dani aprendiendo lo necesario de LaTeX por el camino. La cosa ha sido laboriosa pero satisfactoria.

What’s next?

El desarrollo de software, como cualquier otra cosa en la vida, es un proceso iterativo: se define un resultado a obtener, se hace una primera ejecución, se devuelve para obtener feedback y, después, se usa ese feedback para seguir avanzando hasta el resultado final que culmina con la satisfacción de la necesidad inicial. Así, le envié a Dani el resultado y me dio feedback en forma de dos nuevos requerimientos:

  • Eliminar la sangría inicial de los párrafos: No sé si eso va en contra de la gramática española más correcta ni si se puede hacer en LaTeX. Toca investigar.
  • Aumentar el espaciado entre párrafos: ¿Lo permite la plantilla? Interesante. Investigar.

Y eso es todo, folks! Vaya panzada de artículo con casi 2.000 palabras. Otro día más.

Vamos por fin con la serie del Tegernsee en otoño
3

#aprender#apuntes#código#documento#encabezado#pie de página#tex

Respuestas

  1. Adrian - 26 de noviembre de 2020 @ 08:54

    Buenas,

    Para el indentado tienes \noindent. Siempre viene bien, incluso si no quieres que todos los párrafos vayan sin indentar, puedes empezar un párrafo, meter código entre medias y continuar el párrafo debajo usando este comando.
    Una manera cutre de aumentar espacio entre párrafos son más saltos de línea o \vspace (espacio vertical).

    Saludos,
    Adrián

    • Javier - 26 de noviembre de 2020 @ 17:21

      Ostras, Adrián, te veo muy puesto en LaTeX. ¡Gracias por los apuntes!

      El \noindent seguramente nos vaya fenomenal. Lo que veo más problemático es lo otro, que como dices a mí también me parece una manera cutre de hacerlo. Lo suyo sería modificar la plantilla, pero entiendo que la plantilla contiene un conjunto equilibrado de elementos.

      En fin, otro día con más calma.

      Saludos y gracias.

      • Adrian - 27 de noviembre de 2020 @ 08:43

        Buenas,

        Toda la vida (bueno, desde los 20 años o así) usándolo. En el TFG, el TFM, la tesis, los artículos científicos, los apuntes que paso a los chavales en clase, en las presentaciones (pasando del PowerPoint, vaya)… al final todo es parecido y tampoco hago virguerías, pero problemas he tenido de muchos colores y he ido sumando soluciones. Yo aprendí con “LaTeX en 27 minutos” o algo así, que ha ido creciendo y que veo (acabo de buscarlo) que ha llegado a los 137 minutos y ya se llama “the no so short introduction” http://tug.ctan.org/info/lshort/english/lshort.pdf.

        Los manuales que recomendé el otro día me consta que se usan para dar seminarios, incluso en facultades de letras que ven con temor LaTeX, y que tienen éxito, merece la pena mirarlos. Y conozco personalmente al chaval que los ha escrito y disfruta con ello; si algún día juntas a 4 personas interesadas en una introducción él os lo cuenta virtualmente de mil amores xD

        Volviendo al tema, sí que creo que habría que modificar una plantilla, pero tampoco lo veo tan preocupante, al fin y al cabo estas plantillas seguro que “nacieron” de otras que parecían equilibradas en su momento. Es cuestión de jugar y ver cómo queda.

        Saludos,
        Adrián

        • Javier - 27 de noviembre de 2020 @ 11:45

          Hola Adrián,

          los manuales que recomendaste el otro día me parecieron auténticas joyas. Yo he escrito libros y reconozco cuando algo está hecho con dedicación y cariño.

          Comprendo lo que dices acerca de la modificación de la plantilla. Sólo queda encontrar la manera de modificar la plantilla, la clase, en sí. Puede ser un buen reto para hoy.

          Muchas gracias por tu comentario, Adrián.

Deja una respuesta

Tu direción de email permanecerá oculta.
Los campos requeridos tienen un asterisco (*).