Cuaderno de GNUtas

Exportar a HTML y LaTeX con una marca de agua

La situación es la siguiente. Queremos exportar nuestro documento de Org Mode tanto a LATEX como a HTML de suerte que el resultado de la exportación tenga un fondo con una marca de agua. Así que se me ocurrió definir esta sencilla función que se encargará de tomar las medidas aportunas según sea la salida. Si es a LATEX, usará el paquete draftwatermark, cuya interfaz es muy simple, no tiene demasiadas complicaciones y el resultado es más que óptimo. En el caso de HTML tiraremos de un poco de CSS. Nuestra función tendrá un argumento opcional texto, en caso de que queramos personalizar el texto de la marca de agua. Por defecto, nuestra marca de agua rezará la palabra «DRAFT», que es barbarismo flagrante, pero también resulta más corto que «borrador» y además lo aplica el paquete draftwatermark por defecto. Nuestra función, por tanto, quedaría tal que así:

(defun mi-marca-de-agua (&optional texto)
  (cond ((org-export-derived-backend-p org-export-current-backend 'latex)
         (concat "#+LaTeX_Header:\\usepackage"
                 (if texto
                     (format "[text=%s]" (replace-regexp-in-string " " "~" texto))
                   "")
                 "{draftwatermark}"))
        ((org-export-derived-backend-p org-export-current-backend 'html)
         (concat "@@html:<p id=\"marcadeagua\">"
                 (if texto
                     (format "%s" texto)
                   "DRAFT")
                 "</p>@@"))))

Nos queda definir el CSS para el id marcadeagua de nuestra función. Podría ser algo así como esto que sigue, adaptado al formato de este blog, y debemos cargarlo en la cabecera de nuestro documento Org o incluirlo en un archivo setup:

#+html_HEAD: <style>#marcadeagua {color: #d0d0d0; font-size: 150pt; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); position: absolute; width: 100%; height: 100%; margin: 50; opacity: 0.7; left:600px; top:-250px;}</style>

Ya sólo nos queda definir una macro de sustitución con un argumento opcional para el texto personalizado de nuestra marca de agua:

#+MACRO: marcadeagua (eval (if (org-string-nw-p $1)(mi-marca-de-agua $1)(mi-marca-de-agua)))

Y basta con colocar la macro al principio de nuestro documento. En este ejemplo usamos un texto personalizado para que nuestra marca de agua diga «Top Secret». Los resultados de LATEX y HTML se muestran en las figs. 1 y 2, respectivamente.

{{{marcadeagua(Top secret)}}}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus.
Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec,
purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat
accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl.

(...)

watermark1.png

Figura 1: Marca de agua en la salida a LATEX

watermark2.png

Figura 2: Marca de agua en la salida a HTML

Publicado: 26/12/20

Última actualización: 16/08/23


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs