Lenguajes ligeros de marcas
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:
- AciiDoc
- BBCode
- Creole
- Gemtext
- GitHub Flavored Markdown
- Jira formatting Notation
- Markdown
- Markdown extra
- Media Wiki
- MultiMarkdown
- Org-mode
- PmWiki
- POD
- reStructuredtext
- setext
- Slack
- TiddlyWiki
- Textile
- Texy
- txt2tags
También existe el anillo único para atarlos a todos en las tinieblas:
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.
lenguaje | HTML | LaTeX | DocBook | ODF | EPUB | DOCX | |
---|---|---|---|---|---|---|---|
Asciidoc | Sí | Sí | Sí | Sí | Sí | Sí | no |
Markdown | Sí | A2 | A2 | A2 | A2 | A2 | A2 |
org-mode | Sí | Sí | Sí | Sí | Sí | Sí | Sí |
reST | Sí | Sí | Sí | Sí | Sí | Sí | Sí |
Textile | Sí | no | no | no | no | no | no |
Tiddlywiki | Sí | 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:
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.
Comentarios