改进节点标签上的下标和上标的定位

时间:2016-09-05 16:43:10

标签: graphviz dot

在节点标签上同时使用下标和上标时,是否可以改变定位,使它们直接位于彼此之上。

示例:

digraph G {
        x11[label=<X<SUB>1</SUB><SUP>(1)</SUP>>];   
        x21[label=<X<SUB>2</SUB><SUP>(1)</SUP>>];
        x11 -> x21 
    }

哪个产生

enter image description here

是否可以让(#)直接位于#之上,而不是略微向右?感谢

我尝试添加自定义css脚本(re:HTML: can I place subscript text right under the superscript?)  使用dot({re:Using CSS classes in HTML labels on Graphviz)到我的stylesheet = "styles.css";脚本,然而,它会返回错误

  

错误:第1行上的未知HTML元素<span>

3 个答案:

答案 0 :(得分:9)

Graphviz的原生HTML类节点渲染非常有限。 Graphviz文档清楚地说明了这一点。我不相信有一种方法可以哄他做你想做的事。即使有办法调整,例如要做<table>定义,结果可能看起来很糟糕。

因此,我建议您查看dot2tex。它的全部目的是让LaTeX的全部功能用于渲染节点。设置并不简单,但结果是值得的。

Here's a page显示包含节点中LaTeX集数学的图表示例。

你没有说出输出应该是什么。但是有很多方法可以将LaTeX转换成许多不同的形式。最简单的是Postscript和PDF。但图像格式也是可能的。

<强>加成

好的,我安装了dot2tex,结果如下:

GraphViz graph with stacked subscripts under superscripts

这里是相应的dot代码:

digraph G {
  a_1 [texlbl="$X_{1}^{(1)}$"];
  a_2 [texlbl="$X_{1}^{(2)}$"];
  a_3 [texlbl="$X_{1}^{(3)}$"];
  a_1-> a_2 -> a_3 -> a_1;
}

我用

编译
$ dot2tex foo.gv -f tikz > foo.tex
$ pdflatex foo.tex

由于您已经在使用LaTeX,因此您应该可以对其进行调整以满足您的确切要求而不会有太多麻烦。

答案 1 :(得分:4)

根据Graphviz文档,他们的'HTML-Like Labels'不包含span元素,而font-styling标签不允许使用style属性(或任何其他):

<SUB
  <!-- No attributes -->
>

<SUP
  <!-- No attributes -->
>

精确文本布局的两个最佳选项似乎是:

1)使用带有类似html的表格的标签,它允许自定义样式(并且无论如何处理垂直放置的文本)。

x11[label=<
    <TABLE border="0" cellborder="0" cellspacing="0">
    <TR><TD rowspan="2" style="...">X</TD><TD style="...">(1)</TD></TR>
    <TR>                                  <TD style="...">1</TD></TR>
    </TABLE>>];

2)如果使用PostScript驱动程序override the node generation entirely并提供一个可以精确绘制所需内容的ps文件。

答案 2 :(得分:4)

也许我们可以介绍一个更强大的HTML渲染器(我只是注意到litehtml和sciter,它不是开源的),它可能有自己的make系统,潜在的安全问题,它自己的字体和颜色名称管理,共享字符串,C ++例如,编译器依赖,内存泄漏和litehtml只有16K行代码,这些天几乎没有为我们移动仪表,只是当我看到关于如何构建graphviz比linux内核更难的推文时,我总是感到有点内疚。 Stephen North