Integración y Uso de Diagramas Mermaid en Hugo
Aprende a crear e integrar diagramas Mermaid en tus posts de Hugo para visualizaciones efectivas.

🎨 Integración y Uso de Diagramas Mermaid en Hugo
Los diagramas Mermaid te permiten crear una amplia variedad de visualizaciones complejas (diagramas de flujo, secuencia, Gantt, etc.) directamente desde texto, de manera similar a Markdown. En este sitio, el soporte para Mermaid ya está configurado y listo para que lo uses en tus posts.
🚀 Cómo Usar Mermaid
Para crear un diagrama Mermaid en cualquier post, simplemente usa un bloque de código estándar de Markdown con el lenguaje especificado como mermaid
:
```mermaid
graph TD
A[Inicio] --> B{Decisión}
B -->|Sí| C[Acción 1]
B -->|No| D[Acción 2]
C --> E[Fin]
D --> E
```
Hugo y el script de Mermaid se encargarán de renderizar este bloque de texto como un diagrama SVG interactivo.
📊 Tipos de Diagramas Disponibles (Ejemplos)
Mermaid soporta una gran cantidad de tipos de diagramas. Aquí algunos ejemplos:
1. Diagramas de Flujo (Flowchart)
Ideal para representar procesos, algoritmos o flujos de trabajo.
Ejemplo Básico:
graph TD A[Inicio] --> B{¿Condición?} B -- Texto Sí --> C[Proceso C] B -- Texto No --> D[Proceso D] C --> E[Fin] D --> E
Ejemplo Más Complejo (Tomado de pruebas del sitio):
flowchart TD A[Usuario visita página] --> B{¿Contiene código?} B -->|Sí| C[Hugo procesa syntax highlighting] B -->|No| D[Renderizado normal] C --> E[¿Es Mermaid?] E -->|Sí| F[Cargar script Mermaid] E -->|No| G[Mostrar código resaltado] F --> H[Renderizar diagrama] G --> I[Mostrar botón copiar] H --> J[Página lista] I --> J D --> J
2. Diagramas de Secuencia (Sequence Diagram)
Muestra cómo los objetos interactúan entre sí a lo largo del tiempo.
Ejemplo Básico:
sequenceDiagram participant U as Usuario participant S as Servidor U->>S: Solicitud de autenticación S-->>U: Respuesta de autenticación (Token JWT)
Ejemplo Más Detallado (Tomado de pruebas del sitio):
sequenceDiagram participant Usuario participant Hugo participant Navegador participant Mermaid Usuario->>Hugo: Solicita página Hugo->>Hugo: Procesa Markdown (incluyendo bloques Mermaid) Hugo->>Navegador: Envía HTML (con bloques Mermaid como <pre class="mermaid">) Navegador->>Mermaid: Script de Mermaid detecta y procesa los bloques Mermaid->>Navegador: Renderiza los diagramas como SVG Navegador->>Usuario: Muestra página completa con diagramas
3. Diagramas de Clases (Class Diagram)
Para modelar la estructura de un sistema orientada a objetos.
classDiagram class Animal { +String nombre +int edad +hacerSonido() } class Perro { +String raza +ladrar() } class Gato { +String colorPelaje +maullar() } Animal <|-- Perro Animal <|-- Gato Usuario "1" -- "*" Animal : tieneMascota
4. Diagramas de Entidad-Relación (Entity Relationship Diagram)
Para modelar bases de datos.
erDiagram CLIENTE ||--o{ PEDIDO : realiza PEDIDO ||--|{ LINEA_PEDIDO : contiene PRODUCTO ||--|{ LINEA_PEDIDO : referenciadoEn CLIENTE { string id_cliente PK string nombre string email } PEDIDO { string id_pedido PK date fecha string id_cliente FK } LINEA_PEDIDO { string id_linea PK string id_pedido FK string id_producto FK int cantidad } PRODUCTO { string id_producto PK string descripcion float precio }
5. Diagramas de Gantt (Gantt Chart)
Para planificación de proyectos y visualización de cronogramas.
gantt dateFormat YYYY-MM-DD title Cronograma del Proyecto X excludes weekends section Planificación Definir Alcance :a1, 2024-07-01, 7d Investigación :a2, after a1, 5d Diseño Mockups :a3, after a2, 10d section Desarrollo Desarrollo Frontend :crit, b1, after a3, 20d Desarrollo Backend :crit, b2, after a3, 25d Integración :crit, b3, after b1 b2, 7d section Pruebas Pruebas Unitarias :c1, after b3, 5d Pruebas Integrales :c2, after c1, 5d UAT :c3, after c2, 7d section Despliegue Preparar Entorno :d1, after c3, 3d Despliegue :d2, after d1, 2d
6. Diagramas de Estado (State Diagram)
Para describir el comportamiento de un sistema a través de sus estados y transiciones.
stateDiagram-v2 [*] --> Inactivo Inactivo --> Activo : iniciarProceso() Activo --> Procesando : eventoDetectado() Procesando --> EnEspera : pausar() EnEspera --> Procesando : reanudar() Procesando --> Completado : finalizarExitoso() Procesando --> Fallido : errorDetectado() Activo --> Inactivo : detenerProceso() Completado --> [*] Fallido --> [*] EnEspera --> Inactivo : cancelar()
Para muchos más tipos de diagramas (Pie, Git, User Journey, Mindmap, etc.), consulta la documentación oficial de Mermaid.
🎨 Personalización y Estilos
Mermaid permite cierta personalización directamente en el código del diagrama, como definir estilos para nodos específicos:
graph TD A[Nodo Normal] --> B[Nodo Destacado] C[Otro Nodo Normal] --> D{Decisión Importante} style A fill:#f9f,stroke:#333,stroke-width:2px style B fill:#ccf,stroke:#333,stroke-width:4px,font-weight:bold classDef importante fill:#ff9,stroke:#555,stroke-width:3px,color:black class D importante
También puedes usar directivas de tema o inicialización para aplicar configuraciones globales si el script de carga lo permite.
🔧 Configuración Técnica (Cómo está implementado en este sitio)
El soporte para Mermaid en este sitio Hugo se ha implementado mediante:
Render Hook para Bloques de Código: Un archivo como
layouts/_default/_markup/render-codeblock-mermaid.html
(o una lógica similar dentro de unrender-codeblock.html
más general) se encarga de detectar los bloques de código con lenguajemermaid
. En lugar de pasarlos a Chroma para resaltado de sintaxis, los envuelve en una etiqueta<pre class="mermaid">
(o similar) para que el script de Mermaid los pueda encontrar y procesar.Ejemplo de
render-codeblock-mermaid.html
:HTML<pre class="mermaid"> {{- .Inner | safeHTML -}} </pre> {{- .Page.Store.Set "hasMermaid" true -}}
El
.Page.Store.Set "hasMermaid" true
es una forma de marcar que la página actual contiene al menos un diagrama Mermaid.Script de Carga de Mermaid: En la plantilla base del sitio (generalmente
layouts/_default/baseof.html
), se incluye el script de Mermaid. Este script se carga condicionalmente solo si la página actual tiene diagramas Mermaid (usando la variablehasMermaid
que se estableció en el render hook).Ejemplo al final del
<body>
enbaseof.html
:HTML{{ if .Store.Get "hasMermaid" }} <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); </script> {{ end }}
Esto utiliza la versión ESM de Mermaid desde un CDN (jsDelivr es una opción popular).
💡 Consejos y Mejores Prácticas
- Mantén los Diagramas Simples: Evita crear diagramas excesivamente complejos que se vuelvan difíciles de leer y entender en una pantalla.
- Usa Etiquetas Descriptivas: Nombres claros y concisos para nodos, actores y conexiones mejoran la comprensión.
- Aprovecha los Estilos con Moderación: Usa colores y estilos para destacar elementos importantes, pero no sobrecargues visualmente el diagrama.
- Documenta Diagramas Complejos: Si un diagrama es intrínsecamente complejo, considera acompañarlo con una explicación en texto.
- Revisa la Sintaxis: Mermaid tiene su propia sintaxis. Consulta la documentación oficial si algo no se renderiza como esperas.
- Prueba en Diferentes Navegadores/Dispositivos: Asegúrate de que tus diagramas se vean bien en los principales navegadores y en dispositivos móviles.
🔗 Enlaces Útiles
- Documentación Oficial de Mermaid: La fuente principal para sintaxis, tipos de diagramas y configuración.
- Editor en Línea de Mermaid (Live Editor): Excelente para probar y crear diagramas rápidamente.
- Galería de Ejemplos de Mermaid: Para ver la variedad de diagramas que puedes crear.
Con Mermaid integrado en Hugo, tienes una herramienta poderosa para enriquecer tu contenido con visualizaciones claras y efectivas.