¡Ayúdame a hacer que mi red de Petri TikZ se vea bien!

¡Ayúdame a hacer que mi red de Petri TikZ se vea bien!

Estoy intentando dibujar el siguiente diagrama en TikZ:

Su imagen

Mi intento se ve así (tenga en cuenta que las etiquetas de los nodos son ligeramente diferentes, ¡pero ese no es mi problema!):

mi intento

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}

ingrese la descripción de la imagen aquí

Respuesta2

En mi intento modifiqué su código separando los nodos de las rutas y usando arcrutas 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 calcpara 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

Figura 1

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}

información relacionada