非标准图形
如果输入文本本身不是有效的 Mermaid 语法,markdown-it-mermaid-enhanced 就不能直接渲染,因为无论是 Mermaid 渲染还是 Excalidraw 渲染,入口都仍然是 Mermaid 兼容输入
不过像“盒子 加箭头 加标签”这一类图,依然有几条实际可用的路径
改写成标准 Mermaid
很多看起来像自定义 DSL 的图,实际上都可以翻译成标准 Mermaid 的节点和连线
Loading diagram…
这条路最直接,也最稳定
切到 Excalidraw 渲染风格
renderEngine: 'excalidraw' 可以把 Mermaid 图画成更接近手绘的风格,但它不会让任意非 Mermaid 语法自动变成可解析输入
Loading diagram…
这条路适合 Mermaid 语法已经成立,但视觉气质希望更粗粝的场景
先把自定义 DSL 预处理成 Mermaid
如果团队已经有自己的图形文本格式,可以在 markdown-it-mermaid-enhanced 前面加一层预处理插件,把自定义语法重写成 Mermaid fence
ts
import { defineConfig } from 'vitepress'
import markdownItMermaidEnhanced from 'markdown-it-mermaid-enhanced'
function customDiagramPlugin(md: any) {
md.core.ruler.before('normalize', 'custom-diagram-rewrite', (state) => {
// 检测自定义语法并重写成 Mermaid fence
})
}
export default defineConfig({
markdown: {
config: (md) => {
md.use(customDiagramPlugin)
md.use(markdownItMermaidEnhanced)
},
},
})4 回退到 SVG 或 PNG 资源
如果排版规则完全不适合 Mermaid,最稳妥的方式仍然是先在别处产出图,再作为资源嵌入
md
选择规则
- 结构本身兼容 Mermaid:优先改写成 Mermaid
- 结构兼容 Mermaid,但视觉想更像草图:切到 Excalidraw
- 团队已有稳定 DSL:增加预处理层
- 版式完全超出 Mermaid 能力:回退到静态资源