Mejorar el posicionamiento de subíndice y superíndice en las etiquetas de nodo


Cuando se usan tanto subíndices como superíndices en una etiqueta de nodo, es posible alterar el posicionamiento para que estén directamente uno encima del otro.

Ejemplo:

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

Que produce

introduzca la descripción de la imagen aquí

¿Es posible tener el (#) directamente encima del # en lugar de ligeramente a la derecha? gracias


Traté de agregar un script personalizado css (re: HTML: ¿puedo colocar texto de subíndice justo debajo del superíndice?) a mi dot script con stylesheet = "styles.css"; (re: Usando clases CSS en etiquetas HTML en Graphviz), sin embargo, devuelve un error

Error: Elemento HTML desconocido <span> en la línea 1

Author: Community, 2016-09-05

3 answers

La representación nativa de nodos de Graphviz como HTML es bastante limitada. Los documentos de Graphviz lo dicen claramente. No creo que haya una manera de convencerlo de hacer lo que quieres. Incluso si hay una manera de ajustar, por ejemplo, una definición <table> para hacerlo, es probable que los resultados se vean mal.

Por lo tanto, te recomiendo que mires dot2tex. Su propósito es permitir toda la potencia de LaTeX para renderizar nodos. La configuración no es trivial, pero los resultados valen la pena.

Aquí hay una página mostrando ejemplos de gráficos que contienen LaTeX-set math en nodos.

No dijiste cuál debería ser la salida. Pero hay maneras de convertir LáTeX a muchas formas diferentes. Los más fáciles son Postscript y PDF. Pero los formatos de imágenes también son posibles.

Adición

Bien instalé dot2tex, y aquí hay un resultado:

Gráfico GraphViz con subíndices apilados bajo superíndices

Aquí está el código dot correspondiente:

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;
}

Compilé con

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

Dado que ya está usando LáTeX, usted debe ser capaz de ajustar esto para satisfacer sus necesidades exactas sin muchos problemas.

 8
Author: Gene,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-09 02:07:30

Según los documentos de Graphviz, sus 'Etiquetas HTML-Like' no incluyen el elemento span, y las etiquetas font-styling no permiten el atributo style (o cualquier otro):

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

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

Las dos mejores opciones para un diseño de texto preciso parecen ser:

1) Use una etiqueta con una tabla similar a html, que permite un estilo personalizado (y maneja bien el texto colocado verticalmente de todos modos).

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) Si se usa el controlador PostScript, sobrescribe completamente la generación de nodos y suministra un archivo ps que dibuja exactamente lo que quieres.

 4
Author: gz.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 00:43:03

Tal vez podríamos introducir un renderizador HTML más potente (acabo de notar litehtml, y sciter que no es de código abierto) que probablemente tiene su propio sistema make, posibles problemas de seguridad, su propia fuente y gestión de nombres de color, cadenas compartidas, dependencias del compilador de C++, fugas de memoria, y litehtml, por ejemplo, es solo 16K líneas de código que en estos días apenas mueve el medidor para nosotros, solo que siempre me siento un poco culpable cuando veo tweets sobre cómo la construcción de graphviz es más difícil que el linux núcleo. Stephen North

 3
Author: north at graphviz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 01:42:29