点(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标签结合起来,特别是可以使用<BR/>
,例如label=<<B>Word1</B> <BR/> Word2>
这个答案非常不清楚。它所说的只是使用\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> 标签可以显示换行符