点(graphviz)语言中节点标签中的换行符

Posted

技术标签:

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

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

【问题讨论】:

TL;DR:使用\n 【参考方案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")

【讨论】:

以上是关于点(graphviz)语言中节点标签中的换行符的主要内容,如果未能解决你的问题,请参考以下文章

标签中的换行符

如何替换字符串中的 \n 换行符,以便 <p> 标签可以显示换行符

Django 表单字段标签中的换行符

java 将字符串中的回车换行符替换为HTML中的换行标签点击

VB中label控件的文字换行

006 DOM节点操作与元素的创建