mdBook: herramienta de línea de comandos para crear libros con Markdown
(rust-lang.github.io)- Cuando se necesita distribuir documentación y tutoriales en formato de libro, mdBook 0.5.3 ofrece escritura basada en Markdown junto con una salida navegable
- Gracias a la ligera sintaxis de Markdown y a la búsqueda integrada, los autores pueden concentrarse más en el contenido que en el formato
- Los bloques de código con resaltado de sintaxis y los archivos de tema permiten ajustar la legibilidad y el formato de salida necesarios para la documentación técnica
- Los preprocesadores y backends ofrecen puntos de extensión para sintaxis personalizada, modificación de contenido y renderizado en múltiples formatos de salida
- Al ser una herramienta usada en proyectos de Rust y en el libro The Rust Programming Language, tiene una fuerte conexión con el ecosistema de documentación de Rust
Funciones básicas necesarias para crear libros con Markdown
- mdBook es una herramienta de línea de comandos para crear libros con Markdown
- Es adecuada para crear contenido limpio y fácil de navegar, como documentación de productos, documentación de API, tutoriales y material de clase
- Ofrece funciones que ayudan tanto a la experiencia de escritura como de lectura
- Permite enfocarse en el contenido usando la sintaxis ligera de Markdown
- Soporta búsqueda integrada dentro del libro
- Aplica resaltado de sintaxis con colores a bloques de código en varios lenguajes
- Permite personalizar el formato de salida mediante archivos de tema
Extensibilidad y conexión con el ecosistema de Rust
- Los preprocesadores pueden encargarse de extender sintaxis personalizada y modificar contenido
- Mediante backends, es posible renderizar a varios formatos de salida
- mdBook está escrito en Rust para ofrecer velocidad, seguridad y simplicidad
- Soporta pruebas automáticas de ejemplos de código en Rust
Casos de uso reales y formas de contribuir
- La propia documentación de mdBook es un ejemplo de resultado generado con mdBook
- El proyecto del lenguaje de programación Rust usa mdBook, y el libro The Rust Programming Language también es un caso de uso
- mdBook es un proyecto gratuito y de código abierto
- El código fuente está disponible en GitHub
- Los issues y solicitudes de funciones pueden publicarse en el rastreador de issues de GitHub
- Para contribuir, se puede leer la guía CONTRIBUTING y abrir un pull request
- El código fuente y la documentación de mdBook se distribuyen bajo la Mozilla Public License v2.0
1 comentarios
Opiniones de Hacker News
Según recuerdo, esta plataforma usa bibliotecas alojadas en CDN en lugar de empaquetarlas o incluirlas como vendorizadas. Por eso, el usuario queda expuesto no solo a fallas del CDN, sino también a los datos que recopila ese servidor.
Lo más lamentable es que la forma en que se usan Highlight.js y MathJax en el frontend es muy derrochadora. Cada cliente tiene que parsear y renderizar directamente la sintaxis y LaTeX, y repite el mismo trabajo en cada visita para obtener el mismo resultado. El resaltado de sintaxis podría procesarse en tiempo de compilación, y casi no hay razón para que requiera JavaScript.
Parece que eligieron eso porque el soporte de MathJax es opcional: https://rust-lang.github.io/mdBook/format/mathjax.html
Sin embargo, es muy probable que el JS de MathJax vuelva a cargar archivos adicionales desde el CDN, así que cuesta entender por qué no ponen todos los archivos de MathJax junto al HTML generado.
Las herramientas de documentación y sitios estáticos mencionadas en este hilo son, aproximadamente, Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook.
Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook
Es un port de mdBook a Nim, pero también amplía funciones para generar contenido interactivo usando el backend JavaScript de Nim. No lo he probado personalmente, pero me gusta la idea de poder crear elementos interactivos en un solo lugar cuando haga falta: https://pietroppeter.github.io/nimib/interactivity.html
Probé MdBook, Jekyll y MkDocs, y MdBook se siente pulido para proyectos básicos, pero demasiado minimalista. Al ver el código fuente de algunos sitios hechos con MdBook que me gustaron, en ciertos casos estaban extendidos con código Rust personalizado
Mi recomendación: MkDocs es una opción predeterminada razonablemente flexible; Jekyll sirve cuando se necesita más flexibilidad, como para una landing page o un blog; y Antora es para cuando quieres reunir documentación de varios proyectos y varias versiones para crear el mejor sitio de documentación, y estás dispuesto a dedicarle mucho esfuerzo. AsciiDoc tiene muchas funciones útiles para escribir documentación
Hugo parece flexible como Jekyll, pero requiere más esfuerzo para ajustarlo a lo que uno quiere, y las diferencias de funcionamiento entre temas parecen demasiado grandes. Al tema que usaba le faltaba una función que necesitaba, así que intenté cambiar a otro, pero la transición no fue fácil y al final me rendí. MdBook parece bastante activo, así que creo que eventualmente se pondrá al día
Lo pospuse durante mucho tiempo porque no quería usar herramientas basadas en JavaScript, pero al probarlo vi que es fácil empezar, muy rápido, el sitio base es hermoso y también es fácil de personalizar. El soporte de MDX también es excelente
También estoy probando BookStack; es más parecido a una wiki, pero es bueno para personas que no están familiarizadas con la tecnología. Normalmente edito proyectos de MkDocs en VSCode y los guardo en un repositorio Git, pero BookStack es completamente web
Antes generaba til.secretGeek.net con GitBook, pero con el tiempo se volvió lento hasta tardar 45 minutos en compilar el sitio, y las funciones que usaba fueron eliminadas o pasaron a ser “premium”. En definitiva, empezó la enshitificación
Si estás usando una herramienta gratuita que parece demasiado buena, espera unos años y es muy probable que se arruine. Al final hice yo mismo un generador de sitios estáticos muy mínimo en .NET, y volvió a compilar en cuestión de segundos. No lo promociono para que otros lo usen, porque si se vuelve popular probablemente terminaría arruinándolo de la misma manera
https://www.collinsdictionary.com/jp/dictionary/english/spru...
Usé mdBook en varios proyectos, pero últimamente siento que material for mkdocs es más cómodo porque trae muchas más funciones de serie
Por ejemplo, me gusta el índice de la página a la derecha, y esa función falta claramente en mdBook. En mdBook, el enfoque estándar parece ser configurar el SUMMARY con mucho detalle y dividir en varios archivos contenido que originalmente podría quedar en una sola página
Hace unos días empecé a usar mdBook para documentar un proyecto pequeño, y es exactamente el pequeño generador de páginas estáticas que necesitaba
También probé HUGO, pero comparado con mdBook se siente demasiado grande y pesado. Ahora edito la documentación con Obsidian/VIM y, al hacer push a Gitea, se genera documentación pública en menos de 1 minuto
Con shortcodes adecuados se puede numerar automáticamente figuras, fórmulas, etc. Me pregunto si mdBook también permite numeración automática. También tiene índice a la derecha, etiquetas y la posibilidad de dividir páginas en columnas, y el soporte de KaTeX es bueno. MdBook parece usar MathJax, y el despliegue es fácil con solo push o rsync
Hace poco empecé a pasar lentamente contenido de .md a .mdx y a revisarlo, y me pareció bastante refrescante. Lo más difícil de Markdown era que cada dialecto tenía límites distintos, y también distintas formas de extender esos límites
Estoy muy satisfecho con el 80~90% del dialecto estándar de GitBook Markdown, pero a veces necesito tablas complejas, bloques de código que mantengan el resaltado de sintaxis mientras enfatizan solo unas líneas, sliders interactivos, calculadoras integradas en el documento, o ciertos gráficos o charts. No sé cómo funcionará MDX en equipos grandes, pero para trabajo personal se ve como una mejora clara
Sería bueno eliminar los dialectos y tener un único enfoque universal, pero la documentación dice que “MDX no está atado a React; también puede usarse con Preact, Vue, Emotion, Theme UI, etc., y soporta tanto el runtime JSX classic como automatic”. Como ya existe una implementación para Svelte [1], no estoy seguro de que esta vez no sea una caja de Pandora que genere más dialectos atados a frameworks frontend. También puede fragmentarse dentro de .mdx y no ser compatible con .md
[0] https://mdxjs.com/docs/what-is-mdx/
[1] https://mdsvex.com/docs
También hay temas disponibles, pero si eres un desarrollador web moderno, hacer uno propio debería ser bastante fácil
Creé KeenWrite, una herramienta gratuita, open source y multiplataforma para crear libros basados en Markdown: https://github.com/DaveJarvis/keenwrite
KeenWrite invoca ConTeXt para la composición tipográfica de documentos y, en modo de vista previa, usa un fork de KeenType para la composición de fórmulas. Puede generar PDF desde la línea de comandos. El libro que estoy escribiendo ahora referencia en el cuerpo varias variables definidas en archivos externos, pasa propiedades del PDF mediante metadatos y permite compilar solo algunos capítulos con el argumento chapters. El directorio theme contiene instrucciones de composición tipográfica como colores, fuentes, layout y anotaciones
Salida de ejemplo: https://github.com/DaveJarvis/keenwrite-themes/tree/main/exa...
Me pregunto por qué Markdown o algún formato parecido no es el formato predeterminado para libros, documentos y casi cualquier texto. Hace unos años me pasé a Typora y, desde entonces, casi no necesito Word/Writer para lo que escribo yo; solo los uso para abrir documentos que me mandan otros
Tampoco veo una razón clara para que el 90% de los libros que leo no estén en formato Markdown. Entiendo que para imprimir libros en papel de forma bonita hace falta composición tipográfica, pero la mayoría de los textos que se leen en una computadora o un smartphone, o que se imprimen directamente desde MS/LibreOffice, de todos modos no tienen ese trabajo de composición bien hecho
Hay alternativas mejores, como AsciiDoc, pero están más enfocadas en documentación y no tienen ni de cerca el impulso de Markdown. Si se considera que Markdown es un formato relativamente tardío, la pregunta más acertada es por qué los libros deberían estar en Markdown. Frente a formatos binarios o basados en XML, la mayor ventaja de Markdown es que se puede leer más o menos como texto plano, pero eso no es tan importante para la mayoría de las editoriales y lectores
Esto también es la típica trampa del ingeniero de “yo puedo hacerlo mejor”, así que no conviene asumirlo sin investigar. La composición tipográfica es un campo mucho más antiguo que las herramientas tratadas aquí, y no deberíamos descartar las ideas y técnicas valiosas acumuladas durante todo ese tiempo solo porque Markdown sea casi suficiente para algunos usos
mdBook es fácil de usar, y me gusta especialmente que los usuarios puedan elegir el tema. Lo uso sobre todo para versiones online de ebooks [0] y para recursos curados [1][2]
[0] https://github.com/learnbyexample/scripting_course#ebooks
[1] https://learnbyexample.github.io/py_resources/
[2] https://learnbyexample.github.io/curated_resources/