open home gvedit for fdp example graphviz flowchart

home - ¿Puedes construir estilos reutilizables en GraphViz?



gvedit for graphviz (3)

"A veces la respuesta es ''no''".

Entonces, no . GraphViz carece de la noción de "estilos con nombre" vistos en procesadores de texto como Microsoft Word y LibreOffice, y carece de la noción de "clase" de estilo de HTML y CSS. Sus atributos de formato son más primitivos y, en muchos casos, deben establecerse explícitamente.

Puede establecer algunos valores predeterminados, como en su ejemplo de máquina de estado finito :

node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; node [shape = circle];

Aquí obtiene la forma predeterminada de un círculo (la última forma definida), con una llamada explícita de un puñado de nodos que se declararon previamente bajo un valor predeterminado anterior ( doublecircle ). Esto es una conveniencia para algunos diseños, pero requiere un buen grado de planificación previa (por ejemplo, se declaran los artículos del pedido). En ocasiones, puede usar la función de subgraph para ayudar a organizar los valores predeterminados por grupo, como muestra esta respuesta de Desbordamiento de pila .

Pero los valores predeterminados son un pequeño consuelo para los que estamos acostumbrados a los mecanismos de tipo expresivo y simple. Una mirada al resto de la documentación confirma que, si bien puede usar algunos elementos de estilo HTML para el texto, por ejemplo, están restringidos a etiquetas HTML como <b> y <i> . Este es un estilo HTML primitivo alrededor del año 2001, antes de la propagación de la calidad CSS.

Tampoco se deje engañar por el atributo de la stylesheet ; es solo para la salida de SVG, y es decepcionantemente mucho menos general y valioso de lo que parece.

Así que, larga historia corta, "no". GraphViz no tiene elementos de estilo reutilizables incorporados. Si desea eso, tendrá que compilarlo por separado utilizando un programa, un preprocesador de macros o similares. ¡Lo siento!

Estoy usando graphviz para crear diagramas de flujo. Cambio los estilos cada vez configurando los atributos de nodo y borde:

node[shape="box", style="filled, rounded", fillcolor=lightyellow, fontname="Verdana", fontsize=9, penwidth=.5, color="gray83"] start, end;

Es un poco doloroso incluir esta y otras declaraciones similares para paralelogramos, rectángulos, diamantes, etc.

Me gustaría poder hacer referencia a un documento de estilo reutilizable en lugar de copiar y pegar en cada archivo .dot .

¿Hay una manera estándar de hacer esto? Potencialmente podría construir un script de shell o un script de python que haría esto por mí, pero parece que la funcionalidad ya debería estar allí.


Puedes usar el preprocesador de CA y #incluir

Algunos preprocesadores c generarán una línea que comienza con # para indicar los números de línea originales, pero GraphViz está de acuerdo con esos. Desde GraphViz doc "The DOT language": ... Además, una línea que comienza con un carácter ''#'' se considera una salida de línea de un preprocesador C (por ejemplo, # 34 para indicar la línea 34) y se descarta.


Si lo hace

Usa el atributo de clase en nodos o aristas. Utilice el atributo de hoja de estilo en el gráfico (o pase -Gstylesheet = whatever.css en la CLI.

La hoja de estilo es CSS normal. Clases de wok al igual que en HTML.

Necesitas el último graphviz para que esto funcione.

Ejemplo:

https://ralsina.gitlab.io/boxes-book/part3/git_3.svg

Si observa la fuente, verá que se carga https://ralsina.gitlab.io/boxes-book/styles/forest.css que tiene todos los estilos.

Funciona para salida SVG (que es la salida buena ;-)