如何在 GraphViz/dot/xdot 中混合左对齐与粗体/斜体/下划线

如何在 GraphViz/dot/xdot 中混合左对齐与粗体/斜体/下划线

我想使用 GraphViz 和 dot/xdot 来制作 UML 类图。

有 2 种主要布局选项,可以混合,但不能在单个元素(行)中。

  • 我想创建类和接口的名称大胆的
  • 接口和抽象类应该有名称斜体
  • 静态方法/属性应该加下划线。

这可以通过 GraphViz 支持的 html 子集来实现。

  • 我想将所有属性和所有方法对齐到左侧,这很容易通过 GraphViz 内部语法来实现:将 a 附加\l到条目。

但我没有找到将这些功能混合到单个记录元素中的方法。来源:

digraph UMLleftItalics {
    graph [ rankdir=BT ]
    node [ shape=record ]
    Joinable [label=<{&laquo;interface&raquo;<br/><b><i>\N</i></b>| + joinTo (other : &lt;T&gt;) : void<br />+ unjoinFrom (other : &lt;T&gt;) : 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]
}

图像: 来自 GraphViz/dot 的 UML 图

如您所见,简化的 HTML 代码中的 Joinable 是粗体和斜体,但属性/方法不是左对齐的,而是静态方法(在接口中语义上是错误的,但 a)为了简洁和 b)谁说它是 Java :) )有下划线。

GraphViz 内部语言中的 FooJoiner 没有加粗,但应该加粗。但它在成员和方法中是左对齐的。也没有下划线和斜体。

答案1

使用 HTML 表格:

digraph UMLleftItalics {
    graph [ rankdir=BT ]
    node [ shape=none ]
    
   Joinable [label=<<table>
    <tr><td>&laquo;interface&raquo;<BR/><b><i>\N</i></b></td></tr>
    <tr><td align="left">+ joinTo (other : &lt;T&gt;) : void <br align="left"/>+ unjoinFrom (other : &lt;T&gt;) : 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]
}

给予:
在此处输入图片描述

相关内容