Notxor tiene un blog

Defenestrando la vida


Una plantilla para exportar documentos desde emacs

Hace un tiempo, a raíz de presentar unos documentos, me preguntaron cómo me las apaño para que queden tan bien hechos. El secreto se llama LaTeX, como muchos sabéis, pero ayer mismo un amigo me preguntó por detalles más técnicos y la respuesta en ese momento se me quedó realmente corta. Aquí traigo una explicación más detallada de las cosas que tengo ya pre-paradas a la espera de la generación de documentos.

Los formatos que suelo trabajar para los documentos largos son PDF y epub. Utilizo PDF cuando necesito imprimir el documento en papel y utilizo epub cuando sólo requiere la lectura por pantalla. A veces, ni siquiera monto el epub y lo dejo en HTML, como por ejemplo, para las entradas de este blog.

Exportar a PDF

Como sabéis, y también lo dije antes, la exportación a PDF se hace a través de LaTeX. En mi caso venía ya de antes trabajando con esta herramienta para generar documentos y no necesité aprenderla aparte. Para abreviar, como esto va de plantillas, pongo la cabecera que tengo en un fichero en el directorio ~/Plantillas para iniciar los textos largos:

#+TITLE:         Título
#+SUBTITLE:      Subtítulo
#+DATE:          \today
#+AUTHOR:        Notxor
#+EMAIL:         notxor@nueva-actitud.org
#+LANGUAGE:      es
#+OPTIONS:       d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t
#+OPTIONS:       p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+OPTIONS:       timestamp:t title:t toc:t todo:t |:t
#+LATEX_CLASS:   book
#+LATEX_CLASS_OPTIONS: [a4paper, 10pt, doubleside]

#+LATEX_HEADER: \usepackage[left=2.5cm,top=2.5cm,right=2.5cm,bottom=2.5cm]{geometry} 
#+LATEX_HEADER: \usepackage[spanish]{babel}

#+LATEX_HEADER: \usepackage{bbding}       %fuentes con iconos
# +LATEX_HEADER: \usepackage{enumitem}

# Personalizar las cabeceras
#+LATEX_HEADER: \usepackage[Bjornstrup]{fncychap}

# Las siguientes lineas para cambiar de fuente el pdf
# +LATEX_HEADER: \usepackage{mathpazo}    %fuente palatino
#+LATEX_HEADER: \usepackage{charter}      %fuente charter
#+LATEX_HEADER: \linespread{1.05}         %separa un poco las líneas para que no quede apelotonado

# Numerar las líneas de la página en los márgenes para referencias de corrección
#+LATEX_HEADER: \usepackage[switch,pagewise]{lineno}
#+LATEX: \linenumbers

En ese código hay algunos paquetes preparados pero no activados, por el simple hecho de añadir un espacio después del #. Quizá necesite explicar algunos paquetes menos habituales:

\usepackage{bbding}

Permite utilizar iconos mediante una fuente. En ocasiones le añado el paquete

\usepackage{enumitem}

Ese paquete hace que podamos modificar a nuestro gusto las etiquetas de nuestras listas, para conseguir un poco más de personalidad en nuestros listados:

\begin{itemize}[label=\HandRight]
    \item Prueba
    \item Prueba
\end{itemize}

o incluso

\begin{itemize}[label=\HandRight]
\item abc
\item[\PencilRight] def
\end{itemize}

Y con esos dos bloques de código se consigue la siguiente salida:

captura-latex-itemize.png

o también, ya que he importado la fuente en cuestión, se pueden hacer algunos separadores gráficos entre partes del documento y si tenemos que hacerlos tanto para epub como para PDF se puede utilizar algo como:

#+BEGIN_CENTER
#+HTML:  <p style="text-align:center">&#10054;  &#10052; &#10054;</p>
#+LATEX:   \SnowflakeChevron { } \SnowflakeChevronBold { } \SnowflakeChevron
#+END_CENTER

En muchas ocasiones lo que necesito impreso debe ser corregido antes de ser entregado. Para eso utilizo el siguiente código:

# Numerar las líneas de la página en los márgenes para referencias de corrección
#+LATEX_HEADER: \usepackage[switch,pagewise]{lineno}
#+LATEX: \linenumbers

Lo que hace el paquete lineno de LaTeX es escribir en los márgenes un número de referencia de cada línea. Las opciones switch y pasewise hace que se impriman en márgenes alternos para las páginas pares e impares y que reinicie el contador en cada página. Así encontrar los errores es más fácil, sobre todo si el corrector es otra persona. Con hacer referencia al número de página y de línea es suficiente.

Exportar a epub directamente

Un fichero epub no es más que un zip que contiene dentro ficheros html o xhtml, imágenes, css, etc. Básicamente es un sitio web encapsulado con la estructura de un libro. La forma más de andar por casa para realizar un epub es exportar a html desde emacs y luego importarlo a alguna de las herramientas como Sigil para hacer la edición electrónica.

Desde org-mode de emacs podemos generar directamente una exportación de contenido a un fichero epub. Para eso necesitamos dos sencillos pasos. El primero es instalar el paquete ox-epub por el procedimiento habitual.

M-x package-install RET ox-epub

Una vez instalado, cuando queremos generar un epub activamos la exportación con el comando org-epub-export-to-epub. Esto hace que en nuestro menú C-c C-e aparezca el correspondiente apartado, por lo que completando C-c C-e E e se genera un fichero epub.

Igual que podemos añadir opciones para LaTeX cuando queremos exportar a PDF, también podemos añadir opciones al html a lo largo de nuestro código. Incluso, si utilizamos un css personalizado, podemos cargarlo y el exportador lo meterá en el epub.

Conclusión

Generar documentos complejos con org-mode es sencillo. Por defecto, emacs realiza una exportación sencillo a PDF a través de LaTeX y a html. Sin embargo, el uso de lectores ebook y otras herramientas similares, hacen que el formato PDF sea incómodo y el html para ajustarse a pantalla necesita algo más de estructura. El formato epub vino a cubrir esas deficiencias y podemos hacer que emacs nos genere los contenidos de forma sencilla.

Cada uno tiene sus manías y es posible que los paquetes que utilizo para LaTeX no los utilices y prefieras tener otros, pero siempre es una buena idea tener nuestras cabeceras básicas guardadas en una plantilla para iniciar los documentos nuevos sin pensar demasiado, luego personalizar el resultado será más sencillo.


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.