Hola:
Aprovechando que recientemente he asumido la composición de la revista
de estudios "neogriegos" y bizantinos Erytheia, pensé que podría
resultarle curioso a alguien ver mi sistema de trabajo en pleno proceso
de montaje del número 44, cuando están las cosas "work in progress".
Como muchos sabéis, mi sistema, de un tiempo a esta parte, implica
Org-Mode y LaTeX maridados, como un intento de crear mediante el primero
una interfaz de alto nivel para el segundo. Una vez que la máquina está
engrasada y funcionando, y todos los componentes en su sitio, me resulta
un flujo bastante cómodo y eficiente. Así que paso a describiros lo que
he ido haciendo hasta ahora con este número de Erytheia. Será una
especie de tour ilustrado con capturas de pantalla (o sea, que habrá
muchos enlaces a imgur: urldefense se va a inflar. Siento que los
enlaces queden horribles, pero como no tenemos defensa contra
urldefense...).
En primer lugar, defino un nuevo proyecto para Org-Publish, que será
también un repositorio Git. Org-Publish me permite tener un control
total sobre cada subdocumento y sabe colocarme todo en su sitio:
https://urldefense.com/v3/__https://i.imgur.com/bRF4UuK.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5qFCTry2$
Org-Publish se encarga de exportar a *.tex cada subdocumento *.org,
usando esta configuración de filtros en Elisp que he escrito y que
residen en el archivo 'lisp':
https://urldefense.com/v3/__https://i.imgur.com/9bdtWmV.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5lL8E9yC$
https://urldefense.com/v3/__https://i.imgur.com/py7lzsM.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5okQJA2x$
También tiene en cuenta un archivo erytheia.setup, dentro del proyecto,
donde añado directivas y macros de Org:
https://urldefense.com/v3/__https://i.imgur.com/m0ySAek.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5qFxntTL$
Ahora bien, el archivo "maestro" que contiene toda la revista se excluye
del flujo de Org-Publish. Se compila de forma asíncrona mediante
latexmk. Esto me permite trabajar en algún subdocumento concreto,
mientras latexmk está corriendo en segundo plano. La función que he
escrito para compilar el archivo maestro de este y otros proyectos es la
siguiente:
https://urldefense.com/v3/__https://i.imgur.com/XgYESHO.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5oYMLx0X$
Y vamos a ver algunos aspectos del archivo maestro. Es un típico
documento de Org con directivas, nodos y subnodos. Algunos nodos no se
exportan y sirvan sólo para configuración (los que llevan la etiqueta
"noexportar"). Otros no añaden ni título ni sección (los que llevan la
etiqueta "ignoratitb"), pero me son cómodos para tener distintas partes
del libro ordenadas como sub-árboles, como por ejemplo el nodo
"artículos principales". No existe la sección "Artículos principales",
pero me resulta práctico tener todos los artículos agrupados como
subnodos de un nodo principal. Puedo, además, añadir configuración local
a cualquiera de esos nodos o al principal (lo que en LaTeX sería un
\begingroup...\endgroup, mediante simples cajones de propiedades. Y esa
configuración queda asociada al nodo de turno, por si lo cambio de
sitio. Aquí podéis ver el archivo maestro con los nodos de primer nivel
plegados:
https://urldefense.com/v3/__https://i.imgur.com/UqU2VH5.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5voqu5cu$
Si desplegamos el nodo "artículos principales" veis que, de momento,
tengo 4 artículos, uno ya listo (el autor le ha dado el visto bueno):
https://urldefense.com/v3/__https://i.imgur.com/j9WsHQk.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5iTYVSgb$
Y si despegamos uno de los artículos, veis que contiene un cajón de
propiedades (property drawer, en la jerga de Org) muy nutrido, donde se
incluyen una serie de parámetros, como el autor del artículo, su dir. de
correo, la institución o universidad a que pertenece, el título en
inglés (o en español, si el artículo está en inglés), el ORCID, la fecha
recibido/aceptado, el texto que debe ir en la cabecera de las páginas
impares, etc.:
https://urldefense.com/v3/__https://i.imgur.com/EcwIY5W.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5r2N-Zwe$
Naturalmente, todos esos datos no los pongo a mano. Uso un sistema de
marcas propio en el documento de Word original, lo exporto a Org con
Pandoc (usando una plantilla ad hoc) y luego extraigo todos los datos
mediante esta función, que usa Org-capture para poblar las propiedades y
añadir el nodo correspondiente:
https://urldefense.com/v3/__https://i.imgur.com/BMZgPgv.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5mimQxpP$
Para que esas propiedades se exporten como las macros de LaTeX
correspondientes (y que tengo ya definidas en otra parte), escribí este
filtro de pre-proceso, que añade todo antes de la exportación:
https://urldefense.com/v3/__https://i.imgur.com/ySs2CSt.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5oXqfJ-X$
Dejamos el archivo maestro y pasamos a más cosas. Una serie de variables
locales a todo el directorio del proyecto están almacenadas en el
archivo '.dir-locals.el':
https://urldefense.com/v3/__https://i.imgur.com/yZiqC2i.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5u5k5DzG$
¿Y la parte "dura" de LaTeX? Bueno, pues todo el preámbulo está en otro
archivo Org, concretamente el llamado 'conf.org'. Está todo
convenientemente ordenado y escrito mediante programación literaria
gracias a org-babel y org-babel-tangle. Eso es comodísimo, porque si
quiero, por ejemplo, usar código y funciones en Lua, puedo usar bloques
de Lua, y luego injertar ese código en bloques de LaTeX mediante el
argumento de cabecera ":noweb":
https://urldefense.com/v3/__https://i.imgur.com/jQmqOUp.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5rRMcys0$
El argumento ":noweb" también me permite jugar con ciertas variables
locales a todo el directorio, como el número actual en proceso de la
revista o el estado de las pruebas. Por ejemplo, en este código que uso
para generar automáticamente las separatas de cada artículo con la
compilación del documento (para luego enviárselas a los autores):
https://urldefense.com/v3/__https://i.imgur.com/Jb2c5Bk.png__;!!D9dNQwwGXtA!V4gNuQaaLkUQxPYFNki7AoqYZqg77uc0oZP-4-QFfu_B7MBlrcSZfDFS0ALRx64_og2vMk9qUaIkwcuqY1jB5hDH5t88$
extraigo el estado de las pruebas con:
\def\estadopruebas{%
pruebas%
<<estado-pruebas()>>%
}
'<<estado-pruebas()>>' simplemente imprime el resultado de evaluar un sencillo bloque
Elisp llamado "estado-pruebas". En su evaluación devuelve el valor de la variable local
del mismo nombre:
#+NAME:estado-pruebas
#+begin_src emacs-lisp :tangle no :exports none
estado-pruebas
#+end_src
Bueno, y eso es todo de momento. Como este número de la revista no está todavía en el aire
no creo oportuno (por respeto a autores y editores) mostrar nada de la versión tipográfica
final. Pero cuando se publique ya subiré aquí algunas muestras.
Saludos,
Juan Manuel
----------------------------------------------------
Para darse de baja ES-TEX pincha y envia el siguiente url
mailto:[log in para visualizar]
----------------------------------------------------
|