
Estoy intentando dibujar el siguiente diagrama en TikZ:
Mi intento se ve así (tenga en cuenta que las etiquetas de los nodos son ligeramente diferentes, ¡pero ese no es mi problema!):
Mi código es el siguiente:
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds,arrows,shapes,automata,petri}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\title{Test}
\author{Me}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[node distance=1cm and 2cm,>=stealth',bend angle=45,thick]
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {}
edge[pre,bend right,overlay] (q1)
edge[post,bend left,overlay] (q1);
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {}
edge[pre] (p41);
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {}
edge[pre] (q4);
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {}
edge[pre] (p24);
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {}
edge[pre,bend right,overlay] (q2)
edge[post,bend left,overlay] (q2);
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {}
edge[pre] (p31);
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {}
edge[pre] (q3)
edge[post] (q2);
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {}
edge[pre,bend left,out=45,in=45,looseness=1.2] (q2)
edge[post,bend left,out=315,in=315,looseness=1.2] (q1);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}
He agotado mis conocimientos de TikZ. ¿Podría alguien decirme cómo puedo hacer que mi diagrama se vea bien como el ejemplo anterior? ¡Gracias!
Respuesta1
Haga preguntas específicas sobre lo que quiere tener, lo que ha intentado y dónde no ha logrado lograrlo. Tal como está ahora, no tiene valor de investigación para este sitio y es solo una publicación de "hazlo por mí".
Corregí los dos problemas principales que he visto. El resto debería explicarse por sí mismo a partir del código que ya tiene.
% arara: pdflatex
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows,petri}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[node distance=1cm and 2cm,>=stealth',bend angle=45,thick]
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {}
edge[pre,bend right=70] (q1)
edge[post,bend left=70] (q1);
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {}
edge[pre] (p41);
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {}
edge[pre] (q4);
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {}
edge[pre] (p24);
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {}
edge[pre,bend right=70] (q2)
edge[post,bend left=70] (q2);
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {}
edge[pre] (q1);
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {}
edge[pre] (p31);
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {}
edge[pre] (q3)
edge[post] (q2);
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {}
edge[pre,out=0,in=20,,looseness=1.2] (q2)
edge[post,out=180,in=160,looseness=1.2] (q1);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}
Respuesta2
En mi intento modifiqué su código separando los nodos de las rutas y usando arc
rutas para dibujar los pequeños en los lados. Esto se debe a que creo que un código mejor organizado es más fácil de entender y cada vez que escribo/termino algún código, me tomo un par de minutos para arreglar su estructura y eliminar opciones redundantes.
Las líneas se unen en diferentes caminos mediante anclajes y en este caso tuve que sumar calc
para calcular otras posiciones para lograrlo. Entonces, por ejemplo, si tiene (q2.west)
y (q2.south west)
, para calcular el punto medio, escribiría ($(q2.west)!.5!(q2.south west)$)
, de esta manera su flecha puede conectarse al punto medio entre el oeste y el suroeste de un determinado nodo.
Todos los caminos también se han acortado según el ejemplo deseado. También se ha agregado la bending
biblioteca para que las puntas de las flechas de arco estén alineadas correctamente.
Producción
Código
\documentclass[11pt,a4paper]{report}
\usepackage[USenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,backgrounds,arrows,shapes,automata,petri,calc,bending}
\tikzset{
place/.style={
circle,
thick,
minimum size=6mm,
draw
},
transitionV/.style={
rectangle,
thick,
fill=black,
minimum height=6mm,
inner xsep=1pt
}
}
\begin{document}
\title{Test}
\author{Me}
\date{\today}
\begin{figure}[h!]
\centering
\begin{tikzpicture}[
node distance=1cm and 2cm,
>=stealth',
bend angle=#1,
thick,
shorten >=2pt,
shorten <=2pt
]
% Nodes
\node [transitionV,label=above:$q_1$] (q1) {};
\node [place,tokens=1,label=above:$\alpha_{11}(k)$] (p11) [below= of q1] {};
\node [place,tokens=2,label=above:$\alpha_{41}(k)$] (p41) [below right=0.25cm and 2cm of q1] {};
\node [transitionV,label=above:$q_4$] (q4) [below right=0.25cm and 2cm of p41] {};
\node [place,label=above:$\alpha_{24}(k)$] (p24) [above right=0.25cm and 2cm of q4] {};
\node [transitionV,label=above:$q_2$] (q2) [above right=0.25cm and 2cm of p24] {};
\node [place,tokens=1,label=above:$\alpha_{22}(k)$] (p22) [below= of q2] {};
\node [place,tokens=1,label=above:$\alpha_{31}(k)$] (p31) [above right=0.25cm and 2cm of q1] {};
\node [transitionV,label=below:$q_3$] (q3) [above right=0.25cm and 2cm of p31] {};
\node [place,label=above:$\alpha_{23}(k)$] (p23) [below right=0.25cm and 2cm of q3] {};
\node [place,tokens=1,label=below:$\alpha_{12}(k)$] (p12) [above= of q3] {};
% Paths
% left
\draw ($(q1.north east)!.5!(q1.east)$) edge[bend left=15,->] (p31);
\draw (q1.east) edge[bend right=15,->] (p41);
% central
\draw (p31) edge[bend left=10,->] (q3);
\draw (q3) edge[bend left=10,->] (p23);
\draw (p41) edge[bend right=10,->] (q4);
\draw (q4) edge[bend right=10,->] (p24);
% right
\draw (p23) edge[bend left=15,->] ($(q2.north west)!.5!(q2.west)$);
\draw (p24) edge[bend right=15,->] (q2.west);
% round arrows on the...
% ...left
\draw[->] ($(p11.west)+(2pt,4pt)$) arc (240:105:1.8em);
\draw[<-] ($(p11.east)+(-2pt,4pt)$) arc (-60:75:1.8em);
% ...right
\draw[->] ($(p22.west)+(2pt,4pt)$) arc (240:105:1.8em);
\draw[<-] ($(p22.east)+(-2pt,4pt)$) arc (-60:75:1.8em);
% huge round arrows from the top node
\draw[->] (p12) edge[out=180,in=145] ($(q1.north west)!.5!(q1.west)$);
\draw[->] (p12) edge[out=0,in=35] ($(q2.north east)!.5!(q2.east)$);
\end{tikzpicture}
\caption{Event graph}
\end{figure}
\end{document}