Como crear un ebook con Markdown y Pandoc

No es la primera vez que escribo sobre como crear un ebook en Ubuntu, pero en este caso está orientado al uso de markdown, sobre el que en los últimos tiemmpos he escrito varios artículos. Esto es así, porque como he comentado en alguna ocasión, todos los artículos que lees en este sitio, los estoy redactando últimamente utilizando este lenguaje.

No es que esté pensando en escribir un libro ni nada por el estilo (al menos por ahora), sin embargo, seguro que le puedes sacar provecho a tener una guia de viajes de andar por casa en tu lector de libros electrónicos, o unos apuntos, o una guia de referencia, o incluso tus últimas recetas. Las cosas como son, para leer un lector de libros electrónicos, es mas cómodo que una tablet.

La siguiente pregunta es, ¿porque utilizar markdown?, es porque de esta forma, solo te preocupas de escribir, no tienes que levantar los dedos del teclado, solo escribir, escribir y escribir…

Ahora bien, a la hora de leer, lo podemos convertir fácilmente nuestros documentos en formato markdown a epub, utilizando Pandoc.

Como crear un ebook con Markdown y Pandoc

Como crear un ebook con Markdown y Pandoc

Pandoc

Pandoc es una excepcional herramienta que te permitirá convertir archivos entre diferentes formatos como son

  • markdown
  • reStructuredText
  • textile
  • HTML
  • DocBook
  • LaTeX
  • MediaWiki markup
  • OPML
  • Emacs Org-Mode
  • Txt2Tags
  • Microsoft Word docx
  • EPUB

a

  • HTML
  • Microsoft word docx
  • OpenOffice/LibreOffice odt
  • OpenDocument XML
  • EPUB
  • DocBook
  • InDesign
  • OPML
  • LaTeX
  • PDF

incluyendo todos los anteriores. Vamos, el diagrama que has visto en la introducción del artículo.

 

Creando un ebook con Pandoc

Desde la versión 1.6 de Pandoc es posible genera libros electrónicos con formato EPUB que es el formato por defecto de muchos lectores de libros eléctronicos a excepción del Kindle, que con toda seguridad será el lector mas difundido y que se decantó por su propio formato, aunque admite mobi.

De esta forma crear un ebook con Pandoc es realmente sencillo. Por ejemplo, partimos de este sencillo código escrito con markdown

% Mi propio libro
% El atareao

Mi primer libro con formato markdown

# Capítulo 1. Primer capítulo.

Este es el primer capítulo y termina aquí.

# Capítulo 2. Segundo capítulo.

Este es el segundo capítulo y termina aquí, donde también termina el libro.

Para convertir este primer libro a formato EPUB solo tenemos que ejecutar el siguiente comando,

pandoc milibro.md -o milibro.epub

Sencillo, ¿no?. Pero, ¿que sucede si el libro que estamos preparando tiene imágenes?, pues tampoco te tienes que preocupara por esto, que Pandoc se encarga de descargarlas de internet, en caso de que las tengas allí, y incluirlas en el libro, y si se trata de imágenes que tienes en tu disco, exactamente lo mismo, de forma que para añadir una imagen, solo tienes que escribir el código siguiente,

![Una imagen](imagenes/una_imagen.jpg)

Suponiendo que nuestra imagen se encuentre alojada en un subdirectorio local de donde estamos trabajando.

Mejorando el formato para crear un ebook

Otro asunto que nos permite hacer Pandoc es formatear el libro a nuesto gusto, para lo que podemos definir nuestra propia hoja de estilos CSS. Para incluirla es necesario indicarlo en el comando que ejecutamos, sin embargo, en el momento de escribir este artículo no funcionaba correctamente y tenías que ubicarla en el directorio ~/.pandoc con el nombre epub.css.

Por ejemplo, yo estoy utilizando la siguiente hoja de estilos,

@font-face {
    font-family: Carlito;
    font-style: normal;
    font-weight: normal;
    src:url("fonts/Carlito-Regular.ttf");
}
@font-face {
    font-family: Carlito;
    font-style: normal;
    font-weight: bold;
    src:url("fonts/Carlito-Bold.ttf");
}
@font-face {
    font-family: Carlito;
    font-style: italic;
    font-weight: normal;
    src:url("fonts/Carlito-Italic.ttf");
}
@font-face {
    font-family: Carlito;
    font-style: italic;
    font-weight: bold;
    src:url("fonts/Carlito-BoldItalic.ttf");
}
@font-face {
    font-family: Caladea;
    font-style: normal;
    font-weight: normal;
    src:url("fonts/Caladea-Regular.ttf");
}
@font-face {
    font-family: Caladea;
    font-style: normal;
    font-weight: bold;
    src:url("fonts/Caladea-Bold.ttf");
}
@font-face {
    font-family: Caladea;
    font-style: italic;
    font-weight: normal;
    src:url("fonts/Caladea-Italic.ttf");
}
@font-face {
    font-family: Caladea;
    font-style: italic;
    font-weight: bold;
    src:url("fonts/Caladea-BoldItalic.ttf");
}@font-face {
    font-family: existencelight;
    font-weight: normal;
    font-style: normal;
    src:url("fonts/Existence-Light.ttf");
}
body {
    margin: auto;
    padding-right: 1em;
    padding-left: 1em;
    max-width: 44em; 
    border-left: 1px solid black;
    border-right: 1px solid black;
    color: black;
    font-family: Carlito;
    font-size: 100%;
    line-height: 140%;
    color: #333; 
}
img{
    max-height: 250px;
    max-width: 250px;
    margin-left:auto;
    margin-right:auto;
    display:block;
}

pre {
    border: 1px dotted gray;
    background-color: #ececec;
    color: #1111111;
    padding: 0.5em;
}
code {
    font-family: monospace;
}
h1 a, h2 a, h3 a, h4 a, h5 a { 
    text-decoration: none;
    color: #7a5ada; 
}
h1, h2, h3, h4, h5 { font-family: Caladea;
                     font-weight: bold;
                     border-bottom: 1px dotted black;
                     color: #7a5ada; }
h1 {
        font-size: 130%;
}

h2 {
        font-size: 110%;
}

h3 {
        font-size: 95%;
}

h4 {
        font-size: 90%;
        font-style: italic;
}

h5 {
        font-size: 90%;
        font-style: italic;
}

h1.title {
        font-size: 200%;
        font-weight: bold;
        padding-top: 0.2em;
        padding-bottom: 0.2em;
        text-align: left;
        border: none;
}

dt code {
        font-weight: bold;
}
dd p {
        margin-top: 0;
}

#footer {
        padding-top: 1em;
        font-size: 70%;
        color: gray;
        text-align: center;
        }

Donde cabe destacar la utilización de algunos formatos de letra particulares que he querido incluir y que son motivo de un artículo reciente sobre el uso de Calibri.

Ahora para convertir el libro en epub, utilizo el siguiente script,

#!/bin/bash
pandoc --toc \
--epub-embed-font=fonts/Caladea-BoldItalic.ttf \
--epub-embed-font=fonts/Caladea-Bold.ttf \
--epub-embed-font=fonts/Caladea-Italic.ttf \
--epub-embed-font=fonts/Caladea-Regular.ttf \
--epub-embed-font=fonts/Carlito-BoldItalic.ttf \
--epub-embed-font=fonts/Carlito-Bold.ttf \
--epub-embed-font=fonts/Carlito-Italic.ttf \
--epub-embed-font=fonts/Carlito-Regular.ttf \
--epub-embed-font=fonts/Hack-BoldItalic.ttf \
--epub-embed-font=fonts/Hack-Bold.ttf \
--epub-embed-font=fonts/Hack-Italic.ttf \
--epub-cover-image=images/cover.jpg \
-f markdown \
-t epub3 \
--css css/style.css \
-o "el terminal.epub" \
title.txt \
$(ls *.md)

Aquí hay que destacar cuatro asuntos, en primer lugar la inclusión de los archivos correspondientes a las tipografías que utilizamos, tantas como sean necesarias; por otro lado incluir la portada y por último que hemos puesto cada capítulo en un archivo independiente, aunque esto es decisión nuestra y podemos ponerlo todo en el mismo archivo, aunque creo que lo primero será lo mas sencillo. Por último, te habrás dado cuenta que para pasar de una línea a otra utilizamos \

Bueno, parece que se ha complicado algo, pero no mucho, también es lo que queramos complicar nosotros el libro, y el acabado que queremos que tenga. La ventaja es que en el momento en que tengamos un buen formato, ya no nos tenemos que preocupar de nada mas, cada vez que queramos convertir a EPUB lo tenemos hecho.

Respecto al contenido de title.txt, te muestro un ejemplo a continuación,

---
 title: El terminal
 author: Lorenzo Carbonell Cerezo  https://www.atareao.es
 rights:  Creative Commons Attribution 4.0 International (CC BY 4.0)
 lang: es-ES
 date: 2019-11-17
 …

¿Como pasar de EPUB a MOBI para leer el libro electrónico en un Kindle?

En el caso de que queremos convertirlo a mobi para verlo en nuestro dispositivo kindle, podemos descargar la aplicación que Amazon ha creado para ello, y que ha puesto a dispuesto de todos los usuarios, incluidos los usuarios de Linux. Para ello te tienes que dirigir a esta página de Amazon y descargarlo.

Su uso es muy sencillo, solo tenemos que ejecutar el siguiente comando,

./kindlegen nuestrolibro.epubDe Markdown a EPub

Otra opción es utilizar calibre para realizar la conversión al formato mobi que admite el Kindle de Amazon.

1 comentario en “Como crear un ebook con Markdown y Pandoc

  1. Primero: muchas gracias por publicar estos artículos. Me han ayudado y son muy claros.

    Quizás la pregunta sea un poco tonta pero ahora mismo no se cómo hacerlo…

    Si escribo un libro o un texto largo (manual de instrucciones, documentación de un proyecto, etc) en markdown me gustaría poderlo hacer en diferentes archivos, uno para cada sección. ¿Cómo genero entonces el documento final en uno solo libro?

Deja una respuesta

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