点边标签中的下标和希腊字母

Posted

技术标签:

【中文标题】点边标签中的下标和希腊字母【英文标题】:subscripts & greek letters in dot edge labels 【发布时间】:2015-08-10 23:49:01 【问题描述】:

这是Using symbol font / math notation in graphviz 的后续,也发布在Graphviz 论坛http://www.graphviz.org/content/subscripts-greek-letters-dot-edge-labels,但没有任何回应。

[环境:graphviz 2.38,Windows 7]

我正在做一个项目,使用sem 包为 R 中的结构方程模型创建路径图 sem 包包含一个函数 pathDiagram,它通过为 dot 构造所需的代码来很好地做到这一点。

我们使用两个后端渲染器:dot 本身,带有 -Tpdf,以及 R DiagrammeR package,它使用 javascript 库 grViz 和 mermaid。

我们最近添加了允许使用希腊字母和下标渲染边缘标签的代码,通过 使用 UTF-8 字符等效项,例如

"beta" "β" "β"
"gamma" "γ" "γ"

subscripts <- c("₀", "₁", "₂", "₃", "₄", "₅", "₆",
"₇", "₈", "₉")

我们发现这与 DiagrammeR 完美配合。使用点,我们确实得到希腊字母,但是 我们尝试过的任何方法都无法让我们从标准命令中获取下标 dot -T pdf -o file.pdf file.dot 我们得到的只是那些带有 4 位字符代码的小盒子。

这是 dot 的错误还是限制?有什么解决办法吗?

以下是我们的软件生成的一个点文件示例,说明了这种行为。

digraph "union.sem" 
  rankdir=LR;
  size="8,8";
  node [fontname="Helvetica" fontsize=14 fillcolor="transparent" shape=box style=filled];
  edge [fontname="Helvetica" fontsize=10];
  center=1;
  rank=min "x1"
   rank=min "x2"
  "y1" [fillcolor="transparent"]
  "y2" [fillcolor="transparent"]
  "y3" [fillcolor="transparent"]
  "x2" -> "y1" [label="&#947;&#770;&2081;&2082;=-0.09" color=red penwidth=1.001];
  "y1" -> "y2" [label="&#946;&#8322;&#8321;=-0.28" color=red penwidth=1.001];
  "x2" -> "y2" [label="&#947;&#8322;&#8322;=0.06" color=black penwidth=1.001];
  "y1" -> "y3" [label="&#946;&#8323;&#8321;=-0.22" color=red penwidth=1.001];
  "y2" -> "y3" [label="&#946;&#8323;&#8321;=0.85" color=black penwidth=1.001];
  "x1" -> "y3" [label="&#947;&#8323;&#8321;=0.86" color=black penwidth=1.001];
  "x1" -> "x2" [label="&#963;&#8321;&#8322;=7.14" dir=both color=black penwidth=1.001];
  // variable labels: 
    "y1" [label="Deference"];
    "y2" [label="Activism"];
    "y3" [label="Sentiment"];
    "x1" [label="Years"];
    "x2" [label="Age"];

以及结果(使用-Tpng)

(在本例中,我还尝试对x2 -&gt; y1 路径中的下标使用Unicode 字符,这些字符取自How to find the unicode of the subscript alphabet?,但它们仅显示为它们的&amp;2081; 字符串。)

【问题讨论】:

在 ubuntu 14.04 上使用点渲染下标(除了边缘 x2 -> y1):可能是 Windows 问题而不是点 谢谢——这有助于追踪它。问题是什么样的 Windows 问题。我认为这可能与使用 fontname="Helvetica" 的边缘有关,但删除它会产生相同的结果。 【参考方案1】:

您可以考虑使用html-like labels 和SUB 标签代替html 转义字符。

例子:

1 -> 2 [label=<&#947;<SUB>0</SUB>>];

【讨论】:

以上是关于点边标签中的下标和希腊字母的主要内容,如果未能解决你的问题,请参考以下文章

带有映射到 x 的离散变量的刻度标签中的下标

LaTeX如何强制上下标的位置?

将字符串ss中所有下标为奇数位置上的字母转换为大写

fun是将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母则不换)

试编一函数:将字符串中所有下标为奇数位置上的字母转换成大写字母(若该位置上不是字母,则不转换)

2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现一次。 如果通过以下操作之一,我们可以