我想使用 GraphViz 和 dot/xdot 来制作 UML 类图。
有 2 种主要布局选项,可以混合,但不能在单个元素(行)中。
- 我想创建类和接口的名称大胆的。
- 接口和抽象类应该有名称斜体。
- 静态方法/属性应该加下划线。
这可以通过 GraphViz 支持的 html 子集来实现。
- 我想将所有属性和所有方法对齐到左侧,这很容易通过 GraphViz 内部语法来实现:将 a 附加
\l
到条目。
但我没有找到将这些功能混合到单个记录元素中的方法。来源:
digraph UMLleftItalics {
graph [ rankdir=BT ]
node [ shape=record ]
Joinable [label=<{«interface»<br/><b><i>\N</i></b>| + joinTo (other : <T>) : void<br />+ unjoinFrom (other : <T>) : void<br />| <u>- fooStatic () : void </u>}> ]
FooJoiner [label="{\N| - name : String\l- dateOfBirth : Date\l- id : int\l- counter : int (static) \l| + joinTo (FooJoiner) : void\l+ unjoinFrom (FooJoiner) : void\l}"]
FooJoiner -> Joinable [style=dashed arrowhead=empty]
}
如您所见,简化的 HTML 代码中的 Joinable 是粗体和斜体,但属性/方法不是左对齐的,而是静态方法(在接口中语义上是错误的,但 a)为了简洁和 b)谁说它是 Java :) )有下划线。
GraphViz 内部语言中的 FooJoiner 没有加粗,但应该加粗。但它在成员和方法中是左对齐的。也没有下划线和斜体。
答案1
使用 HTML 表格:
digraph UMLleftItalics {
graph [ rankdir=BT ]
node [ shape=none ]
Joinable [label=<<table>
<tr><td>«interface»<BR/><b><i>\N</i></b></td></tr>
<tr><td align="left">+ joinTo (other : <T>) : void <br align="left"/>+ unjoinFrom (other : <T>) : void</td></tr>
<tr><td align="left"> <u>- fooStatic () : void </u></td></tr>
</table>> ]
FooJoiner [label=<<table>
<tr><td><b><i>\N</i></b></td></tr>
<tr><td align="left">- name : String<br align="left"/>- dateOfBirth : Date id : int<br align="left"/>- id : int<br align="left"/>- counter : int (static)<br align="left"/></td></tr>
<tr><td align="left">+ joinTo (FooJoiner) : void<br align="left"/>+ unjoinFrom (FooJoiner) : void</td></tr>
</table>> ]
FooJoiner -> Joinable [style=dashed arrowhead=empty]
}