【问题标题】:Newline in node label in dot (graphviz) language点(graphviz)语言中节点标签中的换行符
【发布时间】:2012-06-06 03:43:16
【问题描述】:

有谁知道如何在节点的标签中添加换行符? \n 不工作 - 而是出现了一些新节点。

【问题讨论】:

  • TL;DR:使用\n

标签: newline graphviz dot


【解决方案1】:

HTML-like label 中的<BR/> 标记创建换行符。

digraph {
    n[label=<two<BR/>lines>]
}

当不能使用\n 语法时,这会派上用场。最值得注意的是,LaTeX 的 graphviz 包在解析 .tex 文件中的 \ 时可能会出现问题,而使用类似 HTML 的语法是一种解决方法。

【讨论】:

    【解决方案2】:

    这个问题对我来说也很重要,因为我使用 graphviz 生成详细的 UML 图,并且需要在标签中使用转义字符。但是,在使用 Python 包时,我遇到了如何处理转义字符的错误,因此一些推荐的解决方案不起作用。

    例如:

    from graphviz import Digraph
    d=Digraph()
    d.node('test',label='line 1\\nline 2')
    print(d.source)
    

    生成以下内容(注意转义不起作用):

    digraph {
        test [label="line 1\\nline 2"]
    }
    

    使用单个反斜杠、原始字符串等变通方法非常无效。但是,最终奏效的解决方法如下:

        s = graphviz.Source(d.source.replace('\\\\', '\\'))
        s.render('my_uml')
    

    我不知道这个处理转义字符的错误是在 Python 绑定 (v0.12) 还是在 graphviz 本身 (v2.44) 中,但由于其他人可能会遇到它,我想提供这个解决方案。

    【讨论】:

      【解决方案3】:

      这对我有用as documented:

      digraph {
          n[label="two\nlines"]
          "on\nthree\nlines"
      }
      

      要么放入标签属性(我的偏好),要么将其用作节点的名称,但始终用双引号括起来。

      【讨论】:

      • 看来'n 是明确将线条居中。虽然这是默认行为(至少在我的情况下),但如果您要全局指定此设置(我假设有这样一个选项),那么 'n 将覆盖该设置,而 \n 不会(可能)。
      • @altendky 需要哪个版本才能使'n 工作?对于 2.29.20120504.0446,这仍然不起作用。只有\n 有效(或\r 右对齐,\l 左对齐)。此外,这只适用于前两行。无论使用什么转义序列,所有后续行都居中。
      • 我之前的评论仅基于链接。我刚刚试了一下,'r 似乎不起作用,只有\r。此外,\r 应用右对齐 before 行(左同上)。我有 2.29.20121205.0545 但我不知道何时实施或实施到什么程度。我的测试节点是:multilineNode [label="line 1 asdf\nline 2 asfdasdfd\nline 3 fd\rline 4 fdasfasddddddd\nline 5 fdsf\l d \N\r"] 注意\N 也可以在其中获取节点名称。
      • 如果有人想将字体与换行符、html标签结合起来,特别是可以使用&lt;BR/&gt;,例如label=&lt;&lt;B&gt;Word1&lt;/B&gt; &lt;BR/&gt; Word2&gt;
      • 这个答案非常不清楚。它所说的只是使用\n...
      【解决方案4】:

      您可以使用\n 字符

      使用graphviz 包,这会给

      from graphviz import Digraph
      d=Digraph()
      d.node('test',label='line 1\\nline 2')
      print(d.source)
      

      这会给

      digraph {
          test [label="line 1\nline 2"]
      }
      

      【讨论】:

        【解决方案5】:

        试试 "\\n" 是否可行:dot.node('test', label="line1\\nline2")

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-25
          • 2019-12-23
          • 1970-01-01
          • 2011-07-30
          • 2015-09-21
          • 1970-01-01
          • 2013-01-30
          • 1970-01-01
          相关资源
          最近更新 更多