Mermaid绘图问题
Mermaid作为基于文本的图表描述语言,其语法解析器需要明确区分元字符与内容字符。当节点标签包含编程语言中常见的括号、引号时,就形成了语法冲突,比如函数调用表达式(如tbe.vsigmoid(x))。
- 问题:
Parse error on line 5... Expecting 'SQE', ... got 'PS'- 分析:
PS很可能代表 “Parenthesis Start”(。
从直接使用的失败,到系统性的转义字符探索(无效果),再到HTML实体编码(繁琐),最终找到优雅的解决方案——用引号包围整个标签。所以,当遇到语法限制时,首先应该寻找该语言内建的容器机制,而非依赖底层的字符转义。
嵌套引号问题的解决进一步说明了这一点。通过交替使用单双引号这种符合UNIX传统的做法,我们既维持了代码的可读性,又遵守了语法规则。这种方法在YAML、SQL等众多配置和查询语言中都有广泛应用。
预览与导出功能的割裂反映了开源文档工具的一个普遍现状。类似的问题在Markdown数学公式渲染、PlantUML图表生成等场景中同样存在。这种现状促使开发者建立混合工具链:在VS Code中利用实时预览进行快速迭代(存在问题:缺乏所见即所得,与Draw.io等图形化工具相比,Mermaid需要“编译”才能看到结果,对于调整布局和样式来说,迭代周期较长),在Mermaid官方在线编辑器中完成最终渲染和导出(导出后仍可能需要工具组合,因为复杂的绘图,导出SVG没问题,但导出PNG却存在模糊的问题,所以可能需要SVG到PNG的工具,比如使用浏览器的开发者工具)。
如果采用Linux 下 SVG转PNG工具,遇到的问题多是 CSS 向下兼容问题,而非缺失工具。SVG是一个活着的标准,其CSS特性集逐年扩展,而工具却没有跟上。先尝试系统自带的 Inkscape 0.92,因 SVG文件 内 CSS 语法较新,老解析器报 “parsing error” 并拒绝导出。 换 rsvg-convert,同样因 CSS 报错而退出。较新系统(ubuntu22.04)里的 Inkscape 可导出完成,但打开的PNG文件内容只有框架和色块图,根本不能用。
最后是与技术和工具无关的内容的权衡问题:完全精确的逻辑图会非常复杂和庞大,而追求简洁的示意图则可能牺牲细节。在绘制技术图表时,必须首先明确其目的——是用于代码审查、教学讲解,还是高层设计?目的决定了细节的粒度。
- 点赞
- 收藏
- 关注作者
评论(0)