39 votes

Améliorez le positionnement des indices et des exposants sur les étiquettes des nœuds

Lors de l'utilisation de deux indices et les exposants sur une étiquette de nœud, est-il possible de modifier le positionnement de sorte qu'ils sont directement au-dessus les uns des autres.

Exemple:

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

Qui produit

enter image description here

Est-il possible d'avoir l' (#) directement au-dessus de l' # plutôt que légèrement à droite? merci


J'ai essayé d'ajouter une coutume css script (re: HTML: puis-je l'indice de texte droit, en vertu de l'exposant?) pour ma dot script avec stylesheet = "styles.css"; (re: à l'Aide de classes CSS dans le HTML étiquettes sur Graphviz), cependant, il il retourne une erreur

Error: Unknown élément HTML <span> sur la ligne 1

17voto

Gene Points 20184

Le natif HTML-comme nœud de rendu de Graphviz est assez limité. Graphviz docs dire clairement. Je ne crois pas qu'il y a un moyen de l'amadouer pour faire ce que vous voulez. Même si il y a moyen de bidouiller par exemple, un <table> définition de le faire, les résultats sont susceptibles d'air mauvais.

Par conséquent, je vous recommande de regarder dot2tex. Son but est de permettre à toute la puissance de LaTeX pour le rendu des nœuds. Le programme d'installation n'est pas trivial, mais les résultats en valent la peine.

Voici une page montrant des exemples de graphes contenant du LaTeX-jeu de mathématiques dans les nœuds.

Vous n'avez pas dit ce que la sortie doit être. Mais il existe des moyens pour convertir LaTeX de nombreuses formes différentes. Les plus faciles sont Postscript et PDF. Mais les images les formats sont également possibles.

Plus

Bon j'ai installé dot2tex, et voici le résultat:

GraphViz graph with stacked subscripts under superscripts

Voici la correspondante dot code:

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

J'ai compilé avec

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

Puisque vous êtes déjà à l'aide de LaTeX, vous devriez être en mesure d'ajuster ce pour répondre exactement à vos exigences, sans trop de difficulté.

4voto

gz. Points 1979

Par Graphviz docs, leur 'HTML-Comme les Étiquettes" ne comprennent pas la portée de l'élément, et le font-style balises ne permettent pas l'attribut style (ou tout autre):

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

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

Les deux meilleures options pour le réglage précis de la présentation du texte semblent être:

1) l'Utilisation d'une étiquette avec un code html table, qui ne permettent style personnalisé (et poignées placés à la verticale du texte beau de toute façon).

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 vous utilisez le pilote PostScript, remplacer le nœud génération entièrement et la fourniture d'un fichier ps qui attire exactement ce que vous voulez.

4voto

north at graphviz Points 349

On pourrait peut-être introduire un puissant moteur de rendu HTML (je viens de remarquer litehtml, et sciter qui n'est pas open source) qui a probablement son propre système, les problèmes de sécurité potentiels, sa propre police de caractères et la couleur de la gestion du nom, chaînes partagées, compilateur C++ dépendances, des fuites de mémoire, et litehtml, par exemple, est seulement de 16 k lignes de code qui ces jours à peine se déplace le compteur pour nous, je me sens toujours un peu coupable quand je vois des tweets à propos de la construction de graphviz est plus difficile que le noyau linux. Stephen Nord

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X