这是一篇过期文章 241224

此 PlantUML 方案已被博主弃用。原因如下:

  • Hexo 端 hexo-filter-plantuml 插件采用服务器渲染方案时,会导致 博客生成静态文件的时间不确定且无故延长。
  • Hexo 端 hexo-filter-plantuml 插件采用本地渲染方案时,部分复杂语法无法成功渲染导致出错。

PlantUML 的安装与使用

语法:

1
2
3
4
5
6
7
8
9
10
11
12
```plantuml
@startuml
Bob -> Alice : hello
Alice -> Wonderland: hello
Wonderland -> next: hello
next -> Last: hello
Last -> next: hello
next -> Wonderland : hello
Wonderland -> Alice : hello
Alice -> Bob: hello
@enduml
```

image.png

两端各自插件实现:

两端插件的部分不同之处:

Obsidian 插件 obsidian-plantuml Hexo 插件 hexo-filter-plantuml
语法使用 只支持 Markdown 的代码语法块 支持 Markdown 语法块外还支持标签语法
PlantUML 不一定需要 @startuml 括住内容 必须使用 @startuml

博主提醒:Hexo 插件 hexo-filter-plantuml 配置中,link 配置不建议为默认的 inline 选项,该选项会将 svg 图片硬编码到文章文本中,Hexo 不会对齐进行居中调整或夜间模式下的变灰操作。

hexo-filter-plantuml 的配置

使用服务器接口出现的问题

使用服务器接口出现的问题

  • hexo 生成文件要求联网,否则出错
  • hexo 生成文件时间延长或卡死

使用 Hexo 插件 miao1007/hexo-filter-plantuml 需注意,当安装该插件并不做任何配置时,插件需要联网使用 PlantUML 接口,且并不是所有国内的 IP 地址都能成功访问这个接口,这就导致了平时 Hexo 本地部署调试时会出错。

错误例子如:

部署失败6546565132.png

image.png

另外,调用服务器接口即使连接不出错,在链接过程中耗费的时间不固定(普遍非常长),导致 hexo g 命令卡住且不返回日志。

一个解决方法是将 Plantuml 部署在本地。

使用本地渲染的方式

具体本地部署 Plantuml 的方法详见:站内文章本地部署 PlantUML

注意:本地使用 PlantUML 的效率相较于使用服务器 API 的效率低。

如果选择了本地部署,记得在配置文件 _config.yml 中新增:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
plantuml:
# Local or PlantUMLServer.
render: "Local"

# "inline": <svg>xxx<svg/>
# "inlineUrlEncode": <img src='data:image/svg+xml;>
# "inlineBase64": <img src='data:image/svg+xml;base64>
# "localLink": <img src="/assert/puml/xxxx.svg">
link: "inline"

# where your dot binary
# GraphvizDotFile: "/usr/local/bin/dot" # 不需要此项配置
# where your jar
PlantJar: "你的plantuml.jar" 路径

# common options: svg/png
outputFormat: "svg"

# class-name for element style. The default style is center-aligned block
className: "plantuml"

Obsidian 插件 joethei/obsidian-plantuml 使用本地 jar 包配置方法:

image.png

可能出现的问题:找不到 dot 执行文件

如果你使用了一些特殊语法,可能会报找不到 dot 的错误。

后记

本地部署出现渲染错误后,我又换回服务器渲染方式,并坚持了很长一段时间。

直到某一段时间发现 hexo g 总是卡死并找不出原因,把 hexo-filter-plantuml 删掉后才知原来是它搞的鬼。遂将此文从 站内文章原文 中剥离并置为「过期」。

备忘调试方法:hexo g --debug

这样一来,我的博客就不能在使用 PlantUML 了。其实细想一下,这种文本绘图画出的图挺简单的,也不会经常修改,我完全可以像以前博客画复杂图那样使用 PPT 或飞书画板。