Notxor tiene un blog

Defenestrando la vida

Lenguajes ligeros de marcas

Notxor
2023-02-08

El otro día estaba escribiendo algo y un conocido, bienintencionado, me advirtió que el markdown que estaba utilizando no era el estándar: «es org-mode...», repliqué. Después de una corta conversación me quedó claro que no había mucha idea de lo que son los lenguajes ligeros de marcas, que markdown tampoco fue el primero, ni está estandarizado, y todos los esfuerzos por estandarizarlo han quedado en propuestas que deben seguir todos los mortales por sugerencia de su correspondiente autor. Y efectivamente, org-mode no es más que otra sugerencia, para mí la mejor1, y no la conoce la gente a no ser que se mueva en el minoritario mundo de Emacs. Pues en este artículo voy a hablar un poco sobre este tipo de lenguajes y a compararlos mínimamente, explicando por qué prefiero org.

Para empezar, estos lenguajes de marcas, los llamados ligeros, suelen utilizar como objetivo otros lenguajes como el html, el xhtml o el xml, también salidas a LaTeX (muchas veces como lenguaje intermediario) o pdf. La lista de los lenguajes ligeros de marcas es larga:

También existe el anillo único para atarlos a todos en las tinieblas:

Pandoc

Esta herramienta es capaz de interpretar documentos de casi cualquier tipo de entrada y convertirlo a casi cualquier otro tipo de salida. Convirtiendo entre los distintos formatos también.

Muchos proyectos utilizan markdown, pensando que es el anillo único. El problema es que no es unitario, hay muchos distintos y cada uno hace de su capa un sayo. Cada sistema puede diferir sobre cómo se definen las cabeceras, o los bloques de texto, o las listas... por otro lado tienes que ir metiendo código html directamente para las tablas o las figuras o cualquier tipo de párrafo especial al que dar formato. Y si terminas metiendo código html directamente, olvídate de que tenga una salida a LaTeX decente, por ejemplo.

Por otro lado, también hay que recordar que esto de tener documentos fuente para varias salidas es una facilidad para el escritor, pero una (gran) pérdida para el posible lector. Lo habitual es que estas herramientas generen unos acabados mediocres en todos sus documentos. Digo todos, incluyendo org-mode, aunque éste te deja sortear el problema del acabado a través de la publicación y las plantillas.

Salidas

Generar distintas salidas es un punto a favor cuando quieres ahorrar trabajo cuando estás creando algún tipo de documentación. Sobre todo para los programadores, cuya tendencia a escribir la documentación de sus programas tiende a cero con límite -1. Puedes darte con un canto en los dientes si escriben comentarios en el código. Para centrar un poco las cosas, aquí va una pequeña lista de los lenguajes ligeros de marcas: son los que he usado, pero hay decenas de ellos y tenía que resumir de algún modo.

Tabla 1 Formatos de salida para cada lenguaje de marcas ligero.
lenguaje HTML LaTeX PDF DocBook ODF EPUB DOCX
Asciidoc no
Markdown A2 A2 A2 A2 A2 A2
org-mode
reST
Textile no no no no no no
Tiddlywiki no no no no no no

Como ya dije esto es una ventaja para el que escribe, pero no para el usuario de la documentación. Para que quede una documentación impresa decente al final le tienes que dar algunos toques al LaTeX que pueda generar la herramienta... para que quede un epub decente hay que echarle también un rato a la edición del mismo, algo de css y otros aspectos que hagan un archivo más redondo que el que pueden generar estas herramientas automágicamente.

Por otro lado, algunos de estos lenguajes no cuentan con una única implementación, sino varias. Esto es cierto, especialmente, para MarkDown que tiene, prácticamente, una en cada lenguaje de programación. Esto hace que esté muy extendido entre programadores, pero las salidas que genera también dependen de qué lenguaje o implementación concreta estemos hablando. Por ejemplo, a html exportan todas las implementaciones, pero luego, al resto de formatos puedes encontrarte que no. Además cada una hace de su capa un sayo y algunos de los elementos se comportan de manera distinta y cambian la sintaxis.

Después de pelearme con todas estas cosas, llegó un día que encontré org-mode. Hace la mismas cosas que markdown o que reStructuredText pero añade muchas más. No sólo generando documentación, donde es capaz de exportar a casi cualquier formato (por no decir a todos, que seguramente lo hace pero no lo he probado) o de generar cualquier tipo de fichero: txt, pdf, odt, docx, pero también texi, man, groff, iCalendar. Además de todo eso, decía, es capaz de muchas cosas más: gestionar datos, gestionar la agenda, capturar notas...

La forma más efectiva de trabajar con org-mode es su capacidad de publicación, un pequeño listado de código en elisp que nos permite generar la salida de un documento completo en casi cada uno de esos formatos. Como he dicho antes, las salidas automáticas suelen carecer de un buen diseño, pero en org-mode esto es salvable gracias a las plantillas y a la herramienta de publicación. Pocas veces he tenido que hacer cambios, desde que lo uso. Sobre ese sistema de publicación está montado este blog. Con unos simples comandos se genera todos los documentos html y xml (rss) que componen esta página web.

Funcionamiento

Los lenguajes ligeros de marcas no utilizan etiquetas, sino caracteres para conseguir realizar su trabajo. Se parecen mucho unos a otros, pero no son idénticos. Un resumen de los efectos tipográficos más habituales sería esta tabla:

Tabla 2 Marcas ligeras de tipos de letra habituales utilizados en los documentos
lenguaje negrita cursiva tachado subrayado fijo código
Asciidoc *...* '...' etiqueta3 etiqueta3 `...`  
Markdown **...** *...*     `...` ```...```
org-mode *...* /.../ +...+ _..._ ~...~ =...=
ReST **...** *...*     ``...``  
Textile *...* _..._ -...-   @...@  
Tiddlywiki ''...'' //...// ~~...~~ __...__ `...` ```...```

En esta tabla sólo he mostrado los lenguajes que he utilizado alguna vez y las distintas notaciones que he tenido que aprender y memorizar. Algunas muy similares y otras muy distintas. Algunas muy completas y otras algo escasas y que deben, finalmente, utilizar etiquetas no tan ligeras, para obtener los mismos resultados. AsciiDoc, por ejemplo, define sus propias etiquetas, pero otros lenguajes como Markdown te permiten utilizar las de html.

Conclusión

De momento, hasta que se invente algo mejor, me quedo con org-mode: es completo, sencillo, expresivo, permite desde escribir simples anotaciones a escribir libros, permite introducir notas al pie, cualquier tipo de tipografía, enlaces internos a cabeceras, tablas, figuras o bloques de código, exporta a una infinidad de salidas, permite llevar la agenda, conectarse por CalDav a calendarios externos, controlar tiempos...

La ventaja de org-mode es su sistema de publicación. Con unas pocas líneas de código elisp puedes controlar, plantillas, archivos auxiliares sistema de exportación, etc. y lo convierte en una navaja suiza de la edición. Si a esta navaja suiza (org-mode) le añades el poder del anillo único (Pandoc) puedes generar cualquier tipo de documento que puedas necesitar.

Seguramente esa flexibilidad la agradecerán todos aquellos que necesitan escribir documentación y quieren proporcionarla en varios formatos asequibles. org-mode nos permite cuidar las diferentes salidas de dicha documentación.

Notas al pie de página:

1

Para mí la más completa y flexible.

2

Depende de la implementación.

3

Utiliza etiquetas para generar html class.

Categoría: org-mode emacs markdown asciidoc

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 esta cuenta de Mastodon, también en esta otra cuenta de Mastodon y en Diaspora con el nick de Notxor.

Si usas habitualmente XMPP (si no, te recomiendo que lo hagas), puedes encontrar también un pequeño grupo en el siguiente enlace: notxor-tiene-un-blog@salas.suchat.org

Disculpen las molestias.