Mapas mentales con Orgmode

Tres formas de crear mapas mentales con sintaxis Orgmode

Ejemplo de mindmap o mapa jerárquico con PlanUML

Se puede usar la sintaxis y estructura de secciones de Orgmode para crear mapas mentales.

Para probar con alguna estructura lo hago con la de la empresa pública Madrid Destino.

En algún momento me topé un archivo PPT (PowerPoint) (ya no se encuentra en esta ubicación pero sí que aparecen los de 2018, 2019, 2020 o 2021) haciendo una búsqueda simple apoyándome de los operadores de búsqueda, en concreto en filetype y site:

1
site:madrid-destino.com filetype:ppt

Con este archivo fui a Orgmode y creé una estructura de secciones. Quité los nombres personales porque no me interesaba eso. Ahora viene lo mejor, crear un diagrama. En el primer asalto reproduzco un enfoque desde Emacs y Orgmode; en el segundo asalto presento Pintora.js, una herramienta que soporta sintaxis Orgmode para su diagrama “mindmap” y que me he encontrado buscando alternativas al primero.

Primer asalto: Org2OPML + opml2json

Lo primero que probé fue Org2OPML (pongo directamente el repositorio más actualizado). Según contaban en foobarnbaz.com se podían realizar “mapas de relaciones simples a partir de un archivo Orgmode”. El autor utilizaba el programa MindNode para crear mapas mentales. OPML es un formato para la representación gráfica de mapas mentales soportado por Mindnode.

Org2OPML (desactualizado) se puede usar para crear un OPML desde Orgmode, a través de ox-opml.el, o bien para crear un Orgmode desde OPML con opml2org.py (usa Python 2.7). Yo quería lo primero, pero no tenía un MindNode para crear la representación gráfica.

En este asunto entraba opml2json, una librería de node (ahora también está en Python) para convertir un OPML a JSON que puedan ser usados por D3js.

El resultado se puede ver en este diagrama de Mike Bostock. Viendo el código fuente se ve un archivo flare.json donde están los datos que se muestran.

Como ocurre muchas veces en los manuales, mi json no se parecía en nada a eso así que tuve que escribirlo manualmente basándome en el anterior flare.json.

Detalle de diagrama de mapa mental con d3.js
Figure 1: Detalle de diagrama de mapa mental con d3.js

El resultado se puede ver aquí.

Segundo asalto: Pintora

Buscando algo más actualizado que lo anterior desde Orgmode (D3 sigue activo) me encuentro con Pintora.js, una librería JS para realizar diagramas desde estructuras de texto que funciona en el navegador y Node.js. Cuenta con siete tipos de diagramas, tres de ellos en estado “experimental”, uno de los cuales es Mindmap. Basado en el Mindmap de PlantUML, que soporta, entre otras sintaxis, la de Orgmode, Pintora.js elige esta sintaxis para su Mindmap.

Detalle de diagrama de mapa mental con Pintora.js
Figure 2: Detalle de diagrama de mapa mental con Pintora.js

El resultado se puede ver aquí.

Tercer asalto: vuelta al clásico PlantUML

Tal como se definen, “PlantUML es un proyecto Open Source (código abierto) que permite escribir rápidamente” diagramas y soporta algunas sintaxis, aunque tiene la suya propia como buen UML.

Se puede configurar con Babel para crear bloques de código ejecutable:

1
2
(setq org-babel-load-languages
 '((plantuml   . t)))

La configuración en el init.el de Emacs sería:

1
2
3
(setq org-plantuml-jar-path
           (expand-file-name "~/ruta/plantuml.jar"))
(setq plantuml-default-exec-mode 'jar)

Pero, tal como notó Daniele, parece que Org babel ignora org-plantuml-executable-args:

1
'(org-plantuml-executable-args '("-headless -charset UTF-8"))

En la misma hebra Nickd responde una posible solución. Lo primero, recomienda ver la ayuda de la variable org-plantuml-exec-mode con C-h v org-plantuml-exec-mode:

org-plantuml-exec-mode is a variable defined in ‘ob-plantuml.el’.

Its value is ‘jar’

Method to use for PlantUML diagram generation. ‘jar’ means to use java together with the JAR. The JAR can be configured via ‘org-plantuml-jar-path’.

‘plantuml’ means to use the PlantUML executable. The executable can be configured via ‘org-plantuml-executable-path’. You can also configure extra arguments via ‘org-plantuml-executable-args’.

Es decir, org-plantuml-executable-args solo se aplican cuando el valor no es jar, el qut eiene por defecto, sino plantuml.

También explica que ha buscado un ejecutable de plantuml que debiera haber existido en algún momento pero no lo ha encontrado, y el método jar en ob-plantuml.el no permite argumentos, lo cual supone una “omisión” que merecería ser reportada como “error”.

Lo que sugiere como “solución” es crear un ejecutable plantuml con un script de shell y cambiar el valor de la variable de jar a plantuml.

El script:

1
2
3
#! /bin/bash

java -jar ~/ruta/plantuml.jar "${@}"

Para cambiar la variable, M-x set-variable org-plantuml-exec-mode plantuml y en la configuración:

1
2
3
4

(setq org-plantuml-exec-mode 'plantuml)
(setq org-plantuml-executable-path "~/ruta/script/shell/plantuml")
(setq org-plantuml-executable-args '("-headless" "-charset UTF-8"))

Una vez configurado todo, con la misma estructura Orgmode que creamos el gráfico en Pintora.js escribo un bloque de código plantuml en el propio documento para crear el diagrama de mapa mental con PlantUML:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#+begin_src plantuml :dir ~/directorio/creado/por/ox-hugo/ :file ./plantuml.png
  @startmindmap
  ,* Presidente
  ,** Consejero delegado
  ,** Dirección General de Contenidos y espacios culturales
  ,*** Actividades culturales
  ,** Departamentos
  ,*** Financiero y ventas
  ,**** Presupuestos y control financiero
  ,**** Administración y encomiendas
  ,**** Ventas y patrocinio
  ,**** Alquileres
  ,*** Legal
  ,**** Contratación
  ,**** Protección de datos, marcas y patentes
  ,*** Recursos humanos
  ,**** Relaciones laborales
  ,**** Administración de personal
  ,**** Planificación, organización y prevención de riesgos
  ,**** Gestión rrhh
  ,*** Seguridad y emergencias
  ,**** Seguridad
  ,**** Viabilidad técnica
  ,**** Coordinación de actividades empresariales y planes de autopromoción
  ,**** Producción de eventos
  ,*** Infraestructuras
  ,**** Proyectos y obras
  ,**** Mantenimiento y servicio
  ,**** Asesoramiento técnico
  ,*** Coordinación general
  ,**** Estrategia
  ,**** Servicios generales
  ,**** Secretaría y gestión documental, Tecnología
  ,*** Comunicación y marketing
  ,**** Comunicación
  ,**** Publicidad
  ,**** Identidad gráfica y audiovisual
  ,*** Espacios culturales
  ,**** Programación cultural
  ,**** Teatros
  ,***** Teatro Español y Naves
  ,***** Teatro Fernán Gómez
  ,***** Teatro Circo Price
  ,**** Daoiz y Velarde
  ,**** CentroCentro
  ,**** Conde Duque
  ,**** Medialab-Prado
  ,**** Matadero
  ,***** Intermediae
  ,***** Cineteca
  ,*** Turismo
  ,**** Promoción turística
  ,**** Marketing turístico y partenariado
  ,**** Madrid Convention Bureau
  ,**** Atención, información y proyectos turísticos.
  ,**** Desarrollo tecnológico y audiovisual

  @endmindmap


#+end_src

Y este es el resultado con el estilo predeterminado. Se pueden configurar algunas cosas como colores, incluir bloques de código, tener más de un principio jerárquico, quitar el borde de la caja o poner una parte a un lado y otra a otro.

Figure 3: Mapa mental con estilo predeterminado
Figure 4: Diagrama mapa mental retocado

Anexo

Adolfo Antón Bravo
Adolfo Antón Bravo
Coordinador del Máster de Periodismo y Visualización de Datos de la Universidad de Alcalá

Periodismo y visualización de datos, web semántica, bash, emacs, orgmode