Generando e-books con Pandoc

Índice

  1. Introducción
  2. Empezando por las bases: márgenes y el tamaño de la página
  3. Añadiendo números de página selectivamente
  4. Especificando fuentes y estilos con plantillas
  5. Portada y contraportada
  6. Conclusiones

1. Introducción

Sébastien Castiel publicó en su blog un genial post sobre el sistema que había usado para maquetar sus libros de programación. Tanto me gustó que pensé en hacer una versión más orientada a libros de ficción, que es lo que nosotros esscribimos. Ya de paso, lo simplificaré todo lo posible, porque lidiar con Latex y compañía es un poco tedioso...

En este artículo usaré GNU/Linux y su terminal, por lo que tendréis que tener unos conocimientos mínimos sobre el entorno Linux para poder seguirlo. Si tenéis cualquier duda, contactad conmigo e intentaré ayudaros con lo que esté en mi mano.

¡Vamos al lío!

2. Empezando por las bases: márgenes y el tamaño de la página

Para definir los márgenes y el tamaño de la página del PDF, tendremos que escribir la siguiente cabecera en el archivo Markdown:

---
title: "Márgenes y tamaños de página"
author: Andrés Álvarez Iglesias
date: 15-02-2021
geometry:
 - paperheight=148.5mm
 - paperwidth=105mm
 - left=15mm
 - right=15mm
 - top=15mm
 - bottom=20mm
output: pdf_document
---

Para generar el documento usaremos los comandos siguientes:

pandoc -o 001-margenes-y-tamaños-de-página.pdf 001-margenes-y-tamaños-de-página.md
pandoc -o 001-margenes-y-tamaños-de-página.epub 001-margenes-y-tamaños-de-página.md

Puedes descargar un ejemplo en los enlaces siguientes:

3. Añadiendo números de página selectivamente

Ahora aprenderemos a controlar el flujo de las páginas con la ayuda de los filtros LUA, y a numerar o dejar de numerar las páginas del PDF a voluntad.

Las primeras páginas de una novela no suelen ir numeradas. Quitaremos las páginas añadiendo el siguiente fragmento bajo la cabecera:

\pagenumbering{gobble}
\thispagestyle{empty}

Para volver a activar la paginación (forzaremos el salto de página usando un comando definido en un script LUA):

\newpage
\pagenumbering{arabic}

Los formatos soportados por pagenumbering son:

Generaremos el documento usando los comandos siguientes:

pandoc --lua-filter lua/pagebreak.lua -o 002-numeros-de-pagina-y-filtros-lua.pdf 002-numeros-de-pagina-y-filtros-lua.md
pandoc --lua-filter lua/pagebreak.lua -o 002-numeros-de-pagina-y-filtros-lua.epub 002-numeros-de-pagina-y-filtros-lua.md

Puedes descargar un ejemplo en los enlaces siguientes:

Puedes descargar el filtro LUA aquí:

4. Especificando fuentes y estilos con plantillas

Definiremos estilos, fuentes y demás usando una plantilla Latex. Un ejemplo de una de estas plantillas (inspirada por la plantilla fuertemente comentada que se puede encontrar aquí) es:

\documentclass[12pt,a5paper]{book}

\usepackage{hyperref}
\usepackage{fontspec}
\usepackage{geometry}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage[spanish]{babel}

\setmainfont{FreeSerif}

\begin{document}
    \color{blue}
    $body$
\end{document}

En el ejemplo completo podréis ver cómo definir cabecera, pie, márgenes diferentes para páginas pares o impares, diferentes colores, etc. Por su extensión, no añado la plantilla, pero puedes descargarla completa aquí.

Generaremos el documento usando los comandos:

pandoc --lua-filter lua/pagebreak.lua --template templates/book.template --pdf-engine=xelatex -o 003-fuentes-y-estilos-con-plantillas.pdf 003-fuentes-y-estilos-con-plantillas.md
pandoc --lua-filter lua/pagebreak.lua -o 003-fuentes-y-estilos-con-plantillas.epub 003-fuentes-y-estilos-con-plantillas.md

Si fallan las dependencias:

sudo apt-get install texlive-xetex

Puedes descargar un ejemplo en los enlaces siguientes:

5. Portada y contraportada

Añadiremos una portada y contraportada al PDF editanddo la plantilla

\begin{document}    
    \pagenumbering{gobble}
    \thispagestyle{empty}
   
    \newpage
    \AddToShipoutPictureBG*{\includegraphics[width=105mm,height=148.5mm]{img/cover.png}}
    \clearpage
   
    \afterpage{
        \newgeometry{...}
       
        \pagenumbering{arabic}
        \thispagestyle{fancy}
       
        \justify
        \newpage
        $body$
       
        \pagenumbering{gobble}
        \thispagestyle{empty}
       
        \afterpage{
            \newgeometry{...}
           
            \newpage
            \AddToShipoutPictureBG*{\includegraphics[width=105mm,height=148.5mm]{img/backcover.png}}
            \clearpage
           
            \hfill \break
           
            \clearpage
            \restoregeometry
        }
       
        \clearpage
        \restoregeometry
}

\end{document}

Para añadir la portada al EPUB basta, sin embargo, especificarlo en el comando de generación:

pandoc --lua-filter lua/pagebreak.lua --template templates/book.template --pdf-engine xelatex -o 004-portada-y-contraportada.pdf 004-portada-y-contraportada.md pandoc --lua-filter lua/pagebreak.lua --epub-cover-image=img/cover.png -o 004-portada-y-contraportada.epub 004-portada-y-contraportada.md

Puedes descargar un ejemplo en los enlaces siguientes:

6. Conclusiones

En este manual hemos visto como empezar a trabajar con Pandoc y Latex para generar de una sola vez el PDF y el EPUB de nuestra novela usando una sola fuente y un flujo de trabajo bien definido. El lenguaje de marcado Markdown nos ayudará a escribir el formato de una forma neutra y clara.

A partir de lo visto aquí, ya solo queda crear una plantilla para cada uno de nuestros proyectos y escribir el contenido en uno o más archivos Markdown. El resto se lo dejaremos a Pandoc, que generará e-books siempre actualizados en menos de lo que canta un gallo.

Espero que este manual haya sido de vuestro agrado. ¡Nos leemos!