我正在评估 PlantUML 是否可以成为 GraphViz 的良好替代品。
它被宣传为“直观”,但老实说,主页上的第一个示例已经令人困惑。
为什么下面会创建两次“Bob”和“Alice”?我在文本中看到 2 个节点,在输出中看到 4 个节点。此外,箭头不是在节点之间移动,而是在节点的重复项之间的关系之间移动。
Bob->Alice : hello
Run Code Online (Sandbox Code Playgroud)
这对我来说毫无意义。这个示例的含义是什么?如果是一个只有 2 个节点且它们之间有一个箭头的更简单的示例,会是什么?
Pot*_*rca 10
我发现您已经陷入了“手册的第一页不代表该工具”的经典陷阱。(1)
除了各种 UML 图(如您遇到的序列图)之外,PlantUML 还支持各种其他软件开发相关格式(例如archimate、框图、bpmn、c4、计算机网络图、erd、甘特图、思维导图和wbd) ,以及json和yaml文件的可视化。
事实上,它甚至可以理解 Graphviz 语法!(2)
由于所有这些,只有当您具备一些PlantUML 的基本知识时,“直观”才会发生。
回到你的问题......你所看到的并不是你所想的那样。
将事物与 Graphviz 相关联,而不是这样:
digraph d {
Bob -> Alice : hello
}
Run Code Online (Sandbox Code Playgroud)
您实际上看到的是:(3)
@startuml
digraph sequenceDiagramExample {
bobHead [ label="Bob" pos="0,1.5!" shape="record" ];
bobPoint0 [ pos="0,0.75!" shape="point" width="0" ]
bobFoot [ label="Bob" pos="0,0!" shape="record" ];
aliceHead [ label="Alice" pos="1,1.5!" shape="record" ];
alicePoint0 [ pos="1,0.75!" shape="point" width="0" ]
aliceFoot [ label="Alice" pos="1,0!" shape="record" ];
bobHead -> bobPoint0 -> bobFoot [ dir="none" style="dashed" ]
aliceHead -> alicePoint0 -> aliceFoot [ dir="none" style="dashed" ]
bobPoint0 -> alicePoint0 [ label="hello" labelloc="c" style="solid" ]
}
@enduml
Run Code Online (Sandbox Code Playgroud)

只有两个节点和它们之间的箭头的示例是什么样子取决于所选图形的类型......
您必须记住的是,使用 Graphviz,您必须自己将所有含义应用到图表中。使用 PlantUML,含义由 PlantUML 为您提供。您所需要做的就是告诉 PlantUML 您的意思。
通过一些基本的指导,这很快就会变得直观。在开始之前你只需要知道你想画什么样的图......
正如您从下面的示例中看到的,PlantUML 是一个非常强大的工具,可以添加到您的软件开发人员工具箱中。
我希望这些示例将有助于让事情变得更加直观,并且您的第一次失误不会阻止您进一步探索 PlantUML!
@startuml
:Alice;
:Bob;
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
archimate #Application Alice
archimate #Business Bob
Alice -> Bob
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
Alice -|> Bob: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
[Alice] -> [Bob]: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
folder Alice
file Bob
Alice -> Bob: Hello
@enduml
Run Code Online (Sandbox Code Playgroud)
@startditaa
+-------+ +-----+
| | hello | |
| Alice +------>| Bob |
| | | |
+-------+ +-----+
@endditaa
Run Code Online (Sandbox Code Playgroud)
@startgantt
[Alice]->[Bob]
@endgantt
Run Code Online (Sandbox Code Playgroud)
@startjson
{
"Alice": ["Bob"]
}
@endjson
Run Code Online (Sandbox Code Playgroud)
@startmindmap
+ Alice
++ Bob
@endmindmap
Run Code Online (Sandbox Code Playgroud)
@startuml
nwdiag {
network hello {
Alice;
Bob;
}
}
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
object Alice
object Bob
Alice -> Bob
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
Bob -> Alice : hello
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
[*] -> Alice
Alice -> Bob: hello
Bob -> [*]
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
concise Hello
0 is Alice
+100 is Bob
@enduml
Run Code Online (Sandbox Code Playgroud)
@startuml
:Alice: -> :Bob: : Hello
@enduml
Run Code Online (Sandbox Code Playgroud)
@startwbs
+ Alice
++ Bob
@endwbs
Run Code Online (Sandbox Code Playgroud)
neato 在not 中渲染dot,请参阅/sf/answers/3742931881/