在Emacs中使用plantuml画UML图
*/-->
code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}
在Emacs中使用plantuml画UML图
Table of Contents
plantuml是一款基于文字生成UML图形的组件。之所以在已经有Visio以及其他图形化的UML画图软件的情况下,我们还需要使用plantuml这种基于文字的画图软件,是因为它可以自动排版,只需要写出核心逻辑,便可以自动的生成图形。所以,当熟悉之后,它的作图效率会更高。
2 配置:
1: ;; active Org-babel languages
2: (org-babel-do-load-languages
3: 'org-babel-load-languages
4: '(;; other Babel languages
5: (plantuml . t)))
6:
7: (setq org-plantuml-jar-path
8: (expand-file-name "/path/to/plantuml.jar"))
3 常见的问题
4 例子及语法
4.1 时序图
title 时序图 == 鉴权阶段 == Alice -> Bob: 请求
Bob -> Alice: 应答 == 数据上传 == Alice -> Bob: 上传数据
note left: 这是显示在左边的备注 Bob --> Canny: 转交数据
... 不超过 5 秒钟 ...
Canny --> Bob: 状态返回
note right: 这是显示在右边的备注 Bob -> Alice: 状态返回 == 状态显示 == Alice -> Alice: 给自己发消息
4.2 用例图
title 用例图
left to right direction
actor 消费者
actor 销售员
rectangle 买单 {
消费者 -- (买单)
(买单) .> (付款) : include
(帮助) .> (买单) : extends
(买单) -- 销售员
}
4.3 流程图
start
:"步骤1处理";
:"步骤2处理";
if ("条件1判断") then (true)
:条件1成立时执行的动作;
if ("分支条件2判断") then (no)
:"条件2不成立时执行的动作";
else
if ("条件3判断") then (yes)
:"条件3成立时的动作";
else (no)
:"条件3不成立时的动作";
endif
endif
:"顺序步骤3处理";
endif if ("条件4判断") then (yes)
:"条件4成立的动作";
else
if ("条件5判断") then (yes)
:"条件5成立时的动作";
else (no)
:"条件5不成立时的动作";
endif
endif
stop
4.4 组件图
package "组件1" {
["组件1.1"] - ["组件1.2"]
["组件1.2"] -> ["组件2.1"]
} node "组件2" {
["组件2.1"] - ["组件2.2"]
["组件2.2"] --> [负载均衡服务器]
} cloud {
[负载均衡服务器] -> [逻辑服务器1]
[负载均衡服务器] -> [逻辑服务器2]
[负载均衡服务器] -> [逻辑服务器3]
} database "MySql" {
folder "This is my folder" {
[Folder 3]
} frame "Foo" {
[Frame 4]
}
} [逻辑服务器1] --> [Folder 3]
[逻辑服务器2] --> [Frame 4]
[逻辑服务器3] --> [Frame 4]
4.5 状态图
scale 640 width [*] --> NotShooting state NotShooting {
[*] --> Idle
Idle --> Processing: SignalEvent
Processing --> Idle: Finish
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
} state Configuring {
[*] --> NewValueSelection
NewValueSelection --> NewValuePreview : EvNewValue
NewValuePreview --> NewValueSelection : EvNewValueRejected
NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
}