Notxor tiene un blog

Defenestrando la vida

Minicurso de LaTeX para psicólogos vi

2021-04-15

En el artículo de hoy pienso poner punto y final a este minicurso de LaTeX. Hablaré de cómo crear nuestro propio estilo en un fichero .sty para luego poder utilizarlo como con cualquier otro paquete, con el comando \usepackage. Aunque sin meternos en demasiadas profundidades de programación. Por último, veremos también cómo proveer a nuestro documento de una bibliografía, que hará las veces de guinda del pastel.

Crear nuestro propio estilo

Llegados a este punto, igual que podemos simplificar nuestro documento maestro con importaciones de contenido, podemos hacer algo parecido con las cabeceras. Además, es muy aconsejable hacerlo con las cabeceras porque es donde definiremos, ─o redefiniremos─, los comandos y entornos que necesitamos a nuestro gusto. Eso puede hacer que nuestra cabecera se vuelva compleja e ininteligible. Sacar toda la complejidad de nuestro documento nos facilitará la lectura y nos permitirá cambiar el chip entre pensar en el contenido y pensar en el diseño. Para ello, podemos hacer el trabajo de dos maneras: una es definir una clase de documento completa, que se guardará en un fichero .cls y se importará en la instrucción \documentclass. Esta manera es más compleja que simplemente especificar unos cuantos estilos agrupando unos cuantos comandos en un fichero .sty, que sería la segunda manera.

Además, tradicionalmente, también se hace diferencias en el tipo de cosas que va en cada uno de ellos. En los archivos cls (class) suele definirse el tamaño de papel, el tamaño de letra, comandos de estructura del documento ─cabeceras, índices, datos─. Es aconsejable además tener en cuenta parámetros que pueden establecerse como opciones cuando se llama a \documentclass. Por otro lado, los ficheros sty suelen utilizarse para simplemente dar formato nuestros documentos definiendo el aspecto final del mismo: diseño de página, tamaño de letra, familia de la fuente, etc.

Ambas formas, estilo y clase son muy similares: ¿Cuándo utilizar un paquete de estilo o cuándo una clase? La regla básica es si vamos a definir comandos que se pueden emplear en cualquier clase de documento ─libro, artículo, carta, informe, etc─, mejor utilizamos un paquete de estilo (sty). Si los comandos que vamos a definir, sólo se podrán utilizar en una clase definida, mejor utilizamos un cls.

En nuestro caso, queremos que nuestros comandos sean utilizables por cualquier tipo de documento que generemos; es más, lo que hacemos es utilizar llamadas a determinadas opciones de diseño. Por tanto, elegimos hacer nuestro propio estilo creando un fichero que se llame miestilo.sty y que contendrá lo mismo que nuestra cabecera. Exactamente lo mismo no, como digo lo normal es que queramos reutilizar ese fichero y todo nuestro esfuerzo, para no tener que repetirlo con cada documento. Por eso, lo más lógico es que metamos en él aquellas cosas generales que tienen que ver con cómo se ve el documento desentendiéndose del contenido. Así, por ejemplo, al importar el paquete hyperref hacíamos una definición de parámetros que pueden considerarse contenido en el comando \hypersetup, como el autor o el título del pdf. Pero vamos con ejemplos para ilustrarlo.

La primera cosa que necesitamos especificar para crear nuestro propio estilo es el formato de código que vamos a emplear y la segunda, ponerle un nombre al paquete. Para ello, comenzamos nuestro fichero de estilo con las siguientes instrucciones:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{miestilo}[2021/04/12 v1.0 Mi propio estilo]

La primera línea, como dije antes, especifica el formato de TeX que queremos utilizar. En nuestro caso LaTeX2e. Hay que ser cuidadoso con el uso de las mayúsculas y minúsculas en estos comandos.

El segundo comando, \ProvidesPackage define el nombre del paquete, en nuestro caso miestilo y una serie de opciones o datos del estilo: La fecha de realización, la versión (v1.0) y un nombre largo del estilo.

El siguiente paso es sencillo: copiamos toda la cabecera de nuestro documento, exceptuando los comandos \title{} y \author{} al fichero miestilo.sty. Éste debería quedar como sigue:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{miestilo}[2021/04/12 v1.0 Mi propio estilo]

\usepackage[a4paper,margin=3cm]{geometry}
% Paquetes básicos
\usepackage[T1]{fontenc}    % fuentes adecuadas para salida
\usepackage[utf8]{inputenc} % acentos y caracteres especiales, desde el teclado
\usepackage[spanish]{babel} % Traducción al español de los epígrafes
                            % de LaTeX: ‘Capítulo’, ‘Índice’
                            % ‘Figura’...
\usepackage{palatino}       % Importamos la fuente Palatino

\usepackage{pifont}
\usepackage{multirow}       % Tablas con celdas en varias líneas
\usepackage{graphicx}       % Paquete extendido de gráficos
\usepackage{subcaption}     % Múltiple gráficos en una figura
\usepackage{xcolor}         % Paquete para colores
\usepackage{hyperref}       % Habilitación de enlaces
\hypersetup{                % Configuración de los enlaces y el pdf
   breaklinks=true,
   colorlinks=true,
   linkcolor=blue,
   citecolor=green,
   filecolor=cyan,
   pdflang={Spanish},
   pdfpagemode={UseOutLines},
   pdfpagelayout={OneColumn}}

\definecolor{migris}{gray}{0.75}

\newcommand{\comillas}[1]{\guillemotleft{#1}\guillemotright}
\newenvironment{cita}{%
  \small\it\begin{quotation}
    }{%
    \end{quotation}
  }

También tenemos que modificar nuestro documento que quedará como:

\documentclass[a4,11pt,doubleside]{article}
  \usepackage{miestilo}
  \title{Documento básico de ejemplo} % El título del documento
  \author{Notxor}                     % El autor

\begin{document}                      % Entorno que contiene el documento

% [...]

\end{document}

El resto del código es el idéntico. pero como podemos ver, nuestra cabecera de documento ha quedado reducida a la mínima expresión.

Pero de todas las cosas que nos son más útiles en un fichero de estilo es la modificación de los encabezados o los términos utilizados en el documento. Por ejemplo, si estuviéramos escribiendo un libro de texto, podríamos añadir el siguiente código:

\addto\captionsspanish{\renewcommand{\partname}{Unidad didáctica}}
\addto\captionsspanish{\renewcommand{\chaptername}{Lección}}
\addto\captionsspanish{\renewcommand{\tablename}{Tabla}}  % En lugar de «cuadro» por defecto
\addto\captionsspanish{\renewcommand{\listtablename}{Índice de tablas}}

Si nos fijamos bien en el código, estamos añadiendo (addto) a la lista de títulos en español (captionspanish) los cambios realizados en los comandos (renewcommand)...

De este modo, podríamos también redefinir la estructura de las cabeceras desde cero. O también, por resaltarlas mediante las facilidades de otro de los paquetes de LaTeX que conviene mirar: titlesec. Por ejemplo, si añadimos a nuestro fichero de estilo el siguiente código:

% Modificar cabeceras
\usepackage{titlesec}
\titleformat{\section}[frame]
{\normalfont}{\filcenter\small\ Sección \thesection}{7pt}{\Large\sffamily\bfseries\filcenter}

\titleformat{\subsection}[block]
{\normalfont}{ \colorbox{migris}{\large\sffamily\bfseries \thesubsection}}{.5em}{\large\sffamily\bfseries}

El formato utilizado es el siguiente:

\titleformat{\cabecera}[Tipo]{Formato}{Etiqueta}{Separación}{Código anterior}[Código posterior]

No quiero alargar demasiado este último artículo, pero creo que viendo el formato, cómo lo uso y el resultado obtenido, es fácil saber cómo funciona. En todo caso la información que aporta la documentación del paquete titlesec es suficientemente clara. Como puedes ver, consiste en dotar de formato tanto a la etiqueta numérica en el apartado Etiqueta y al texto de la cabecera en el Código anterior. Contamos además con diferentes tipos de cabecera. En el ejemplo he usado frame (marco), y block (bloque), pero hay más. El resultado es:

Captura-pantalla_cambio-cabeceras.png

Otro paquete digno de tener en cuenta en cuestión de estilos es el que nos facilita el diseño de las páginas; entendiendo por tal, la estructura de las cabeceras y los pies de las páginas. Como siempre, pongo un ejemplo y luego lo explico más despacio.

% Diseño de cabeceras y pies de página
\usepackage{fancyhdr}                % Importamos el paquete

\pagestyle{fancy}                    % Página por defecto

\fancyhf{}                           % Definición del estilo de página por defecto
\fancyhead[LE,RO]{\thepage}
\fancyhead[RE]{\textit{\nouppercase{\leftmark}}}
\fancyhead[LO]{\textit{\nouppercase{\rightmark}}}
\fancyfoot[R]{\small\textit{\href{https://notxor.nueva-actitud.org}{Notxor tiene un blog}}}
\renewcommand{\headrulewidth}{0.4mm}
\renewcommand{\footrulewidth}{0.2mm}

El resultado es:

Captura-pantalla_cabeceras-pies.png

Lo que hace el código es sencillo de entender:

  • Importamos el paquete fancyhdr, que se trabaja sobre el aspecto de las páginas.
  • Definimos el estilo por defecto, si no se especifica otra cosa, de todas las páginas: fancy.
  • Borramos todas las definiciones que haya en el espacio dedicado a cabeceras y pies con \fancyhf{}, para definir los nuevos desde cero.
  • Definimos los contenidos con los comandos \fancyhead y \fancyfoot. Ahora veremos la estructura de estos comandos.
  • Redefinimos las líneas de separación de las cabeceras y pies.

Los comandos para definir el contenido de cabeceras y pies tienen el siguiente formato:

\fancyhead[posición]{contenido}
\fancyfoot[posición]{contenido}

El parámetro posición tiene los siguientes significados:

Inicial Significado
E Página par (even)
O Página impar (odd)
L Izquierda (left)
C Centro (center)
R Derecha (right)
H Cabecera (head)
F Pie (foot)

Por ejemplo, en el código anterior la definición

\fancyhead[LE,RO]{\thepage}

Lo que hace es poner el número de página1 a la izquierda (L) en las páginas pares (E) codificando como LE, y a la derecha (R) en las páginas impares (O), codificando como RO.

También podemos definir estilos de página especiales. Por ejemplo, en el caso de necesitar una página totalmente en blanco, sin cabeceras ni pies, ni líneas de separación, podríamos definir el siguiente estilo:

\fancypagestyle{plain}{              % Definición del estilo de página «plain»
\fancyhf{}                           % borra todo lo que hay en las cabeceras y pies
\fancyfoot[C]{\thepage}              % Centramos el número de página en el pie
\renewcommand{\headrulewidth}{0pt}   % quita las lineas de separación
\renewcommand{\footrulewidth}{0pt}}

Luego, en nuestro texto podemos llamar a esa definición de página. He añadido el siguiente contenido a nuestro fichero de ejemplos para ilustrarlo:

\pagebreak
\thispagestyle{plain}
En esta página no hay cabeceras ni pies, está totalmente en blanco,
salvo el número de página centrado en el pie.

Como se puede apreciar, se utiliza el comando \thispagestyle pasando como parámetro el nombre del estilo de página que hemos definido. Podemos, por tanto ajustar el diseño de la página también al contenido o a nuestras necesidades.

Como siempre es muy aconsejable el mirar la documentación del paquete para conocer todos los parámetros.

Bibliografía

La bibliografía es uno de los apartados más importantes en cualquier tipo de documentación científica o de enseñanza. Documentarse correctamente y proporcionar los datos suficientes para que cualquier persona pueda seguir los razonamientos con una bibliografía completa es la mejor manera de conseguir sentar una buena base argumentativa. TeX en general, y LaTeX en particular, cuentan con una de las herramientas más potentes para crear y mantener bases de datos bibliográficas y poder citarlas desde nuestro texto.

En muchos entornos, como el universitario, el formato bib para las bases de datos bibliográficas, se ha convertido en un estándar. Un fichero .bib contiene, en texto plano, una serie de entradas con la forma:

@tipo{etiqueta,
  propiedad1="valor1",
  propiedad2="valor2",
  ...
}

Vamos, que así no parece que te sea de mucha utilidad la explicación, pero vamos a crear un fichero de bibliografía para comprobar cómo funciona. El contenido será el siguiente:

% Encoding: UTF-8
@book{Goossens,
  author="Michel Goossens and Frank Mittelbach and Alexander Samarin",
  title="The \LaTeX Companion",
  editor="Addison-Wesley",
  year="1993"
}
@book{Lamport,
  author="Leslie Lamport",
  title="\LaTeX",
  editor="Addison-Wesley",
  year="1996"
}
@Misc{minicurso,
  author = {Notxor},
  note   = {El minicurso consta de seis artículos consecutivos en el {\it blog}.},
  title  = {Minicurso de utilización de \LaTeX},
  year   = {2021},
  url    = {https://notxor.nueva-actitud.org/2021/03/20/minicurso-de-latex-para-psic%C3%B3logos.html},
}

El tipo del documento, en los dos primeros casos es book, luego utilizo un Misc para poner una cita a una web, pero hay muchos otro tipos de documentos article, manual, conference... El dato de la etiqueta le proporciona una forma de referirnos a esa entrada por un nombre corto. En este caso, sólo hay dos entradas y el autor es distinto, por lo que podemos utilizar el apellido del autor como única etiqueta. Cuando la base de datos crece y hay autores que se repiten ─algo muy habitual─, podemos establecer un sistema de etiquetas tal que autorAÑO para que no haya conflictos entre entradas... O cualquier otro sistema que proporcione un nombre único a la obra.

Hay herramientas que nos ayudan a crear y a mantener nuestras bases de datos bibliográficas de una manera más visual y sencilla. En mi caso, utilizo una herramienta llamada JabRef que resulta sencilla de utilizar: échale un ojo. Hay muchas más, busca por Internet cuál se ajusta a tu forma de trabajar... también puedes mantener la base de datos editando el fichero bib a mano, sin embargo, cualquier error arruina toda la base de datos: una llave que se olvida, una coma que falta, unas comillas que sobran. Depurar esos errores cuando lo hacemos a mano puede ser complicado.

Captura-pantalla_JabRef.png

Como podemos ver en la captura de pantalla, tenemos nuestra lista de ficheros de base de datos divididos por pestañas. Cada pestaña contiene una lista de entradas, y cada entrada una lista de campos que se pueden rellenar.

Una vez realizada nuestra base de datos, vamos a ver cómo la podemos utilizar desde nuestro documento.

Para activar que se utilice una bibliografía necesitamos, como para casi todo, importar un paquete, establecer sus opciones y especificar la base de datos:

\usepackage[backend=biber,style=apa]{biblatex}
\bibliography{biblio.bib}

El paquete biblatex funciona dependiendo también de otras herramientas externas. Tradicionalmente, se utiliza como backend la aplicación bibtex o biblatex. Sin embargo, hay más herramientas y últimamente vengo utilizando biber, porque me da la sensación de ser algo más rápido a la hora de generar la bibliografía y las citas, pero hay que recordar que dependerá de qué herramienta tengas instalada en tu ordenador. El estilo de la bibliografía que utilizo es el apa (American Psychological Associaton), que también depende de que tengas instalado el correspondiente paquete en tu máquina.

Después de importar el paquete, necesitamos que se tenga en cuenta la base de datos que estemos trabajando. En nuestro caso, como vimos antes, creé un fichero de bibliografía con el nombre biblio.tex y es el que pasamos como parámetro al comando \bibliography. Si tuviéramos otras bases de datos, podemos referenciarlas también añadiendo sus nombres separados por comas.

Para ilustrar cómo funciona el invento, además de añadir esos dos comandos en la cabecera del documento, hay que citar las obras en nuestro texto. Concretamente he añadido al final del documento lo siguiente:

\section{Uso de bibliografía}\label{sec:uso-biblio}

Podemos citar, por ejemplo a un autor simplemente (\cite{Lamport}) o
especificar también la página (\cite[pág. 23]{Goossens}) y después
generar la bibliografía. Incluso referenciar este minicurso
\cite{minicurso}.

\printbibliography

Como se puede apreciar, la cita se realiza utilizando el comando \cite{etiqueta}, donde etiqueta hace referencia al nombre único que vimos que había que proporcionar al documento citado. Además podemos utilizar un parámetro indicando, por ejemplo la página, que se mostrará en el resultado.

Una vez que terminado el contenido, con todas las citas necesarias, utilizaremos el comando \printbibliograpy en el lugar donde queremos que nos muestre la bibliografía.

El resultado obtenido quedaría así:

Captura-pantalla_bibliografia.png

Como podemos ver, el comando \printbibliography nos genera una nueva sección sin numerar con la lista de los documentos que hayamos citado. Al añadir la bibliografís sin numerar, no aparecerá en nuestro índice, pero a mí me gusta que la bibliografía aparezca allí. Muchas veces buscando información, no te interesa releer el contenido, que lo puedes haber leído decenas de veces, y lo que necesitas es encontrar rápidamente una determinada fuente bibliográfica. Por eso tengo la costumbre de añadir a la tabla de contenidos una línea con la bibliografía de la siguiente manera:

\addcontentsline{toc}{section}{Bibliografía}
\printbibliography

Como se puede ver, \addcontentsline añade una línea al bloque toc2 de categoría section con el título Bibliografía.

Conclusiones

¿Qué me he dejado en el tintero? Pues un montón de cosas. Hay cientos de paquetes muy interesantes y tratarlos todos necesitaría, no seis artículos sino un blog completo para verlo todo, aunque fuera por encima. Aunque este artículo es el final del minicurso, desde luego no es el final de LaTeX.

Podría haber hablado de las clases de documentos: artículo, libro, informe, carta, presentación, examen... Pero no todos necesitamos los mismos y es muy sencillo mirar la documentación y entender qué comandos son específicos de esa clase y cómo utilizarlos, una vez tenemos los conocimientos básicos.

Quizá podría haber hablado de otros aspectos y haber sacado del contenido otras. Sin embargo, creo que el minicurso es básico, pero suficientemente completo como para que te sientas cómodo utilizando LaTeX por tu cuenta, sin recurrir al clásico corta-pega de código de otros documentos sin llegar a comprender cómo funciona.

Footnotes:

1

Recuerda el contador de página \thepage.

2

Table Of Contents, el índice de materias que se mostrará al principio del documento.

Categoría: latex

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.