在 Orgmode 中使用 PlantUML 画图

Emacs 中主要是靠纯文本的一些骚操作来实现各种功能, 其中有一项是把输入的文本生成图片. 这就是今天要说的 PlantUML.

PlantUML 是什么

PlantUML 是用来快速创建 UML 图形的组件. 通过简单的语法来定义图形, 然后它就可以生成 PNG 图片. 比如:

autonumber
Phone -> Server : 请求网页
Server --[#0c0f0a]> Phone : 返回 HTML

basic.png

PlantUML 如何在 Emacs 中配置

  1. 下载 plantuml.jar
  2. 安装 Graphviz

    brew install graphviz
    
  3. 配置 babel 变量支持

    (org-babel-do-load-languages
      'org-babel-load-languages
      '(;; other Babel languages
        (plantuml . t)))
    
  4. 配置 jar 文件路径

    (setq org-plantuml-jar-path
          (expand-file-name "/Users/ljg/Library/Mobile Documents/com~apple~CloudDocs/org/org-resources/plantuml.jar"))
    

PlantUML 如何使用

  1. 基础用法

    -> 参与者之间传递消息的箭头

    –> 虚线的箭头, 可以用于表示返回消息

    箭头颜色的修改, 可通过在- 和 > 之间添加 [#颜色代码] 实现

    如需对消息自动添加编号, 只需要添加关键词 autonumber 即可

    :cmdline -charset utf-8 在 orgmode 的代码块参数加上这个配置, 解决中文乱码问题

  2. 参与者名称和类型

    参与者的类型除了默认的长方形这种样式以外, 还支持其它类型, 最常用的包括 actor 和 database 等.

    有时候一个参与者名称较长, 在多次使用时为避免麻烦, 可使用 as 关键词给它定义一个别名.

    参与者是中文或者是多个英文单词时, 需使用""引号.

    参与者的前景色也可以指定, 直接在参与者后面添加代码颜色即可.

    actor Phone #ffff00
    database Server as s #41ead4
    Phone -> s : 请求网页
    s --> Phone : 返回 HTML
    

    participant.png

  3. 表示 delay

    有时候消息传递过程中会出现 delay 现象, 如停顿 3 分钟后, 再返回结果. 可以通过…来表示 dalay:

    actor Phone #ffff00
    database Server as s #41ead4
    Phone -> s : 请求网页
    ...
    s --> Phone : 返回 HTML
    Phone -> Phone : 解析网页
    ...解析三秒...
    Phone -> Phone : 成功加载
    

    delay.png

  4. 配色配置

    默认生成的结果中, 上下都有参与者, 需要不想要下面的显示, 可以通过使用 hide footbox 关键词移除.

    使用 skinparam 命令改变颜色和字体:

    skinparam backgroundColor #EEEBDC 修改图片背景色

    skinparam sequenceArrowThickness 2 修改箭头粗细度

    skinparam roundcorner 20 修改参与者形状

    skinparam handwritten true 打开手绘风格

    skinparam backgroundColor #EEEBDC
    
    skinparam sequenceArrowThickness 2
    
    skinparam roundcorner 20
    
    skinparam handwritten true
    
    hide footbox
    
    actor Phone #ffff00
    database Server as s #41ead4
    Phone -> s : 请求网页
    ...
    s --> Phone : 返回 HTML
    Phone -> Phone : 解析网页
    ...解析三秒...
    Phone -> Phone : 成功加载
    

    skinparam.png