Helfen Sie mir, mein TikZ-Petri-Netz schön aussehen zu lassen!

Helfen Sie mir, mein TikZ-Petri-Netz schön aussehen zu lassen!

Ich versuche, das folgende Diagramm in TikZ zu zeichnen:

Ihr Bild

Mein Versuch sieht folgendermaßen aus (beachten Sie, dass die Knotenbeschriftungen leicht unterschiedlich sind, aber das ist nicht mein Problem!):

mein Versuch

Mein Code ist der folgende:

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

Ich habe mein Wissen über TikZ erschöpft. Kann mir bitte jemand sagen, wie ich mein Diagramm so schön hinbekomme wie im obigen Beispiel? Danke!

Antwort1

Bitte stellen Sie konkrete Fragen dazu, was Sie haben möchten, was Sie versucht haben und wo Sie es nicht geschafft haben. So wie es jetzt aussieht, hat es keinen Forschungswert für diese Site und ist nur ein „Mach es für mich“-Beitrag.

Ich habe die beiden Hauptprobleme behoben, die mir aufgefallen sind. Der Rest sollte anhand des Codes, den Sie bereits haben, selbsterklärend sein.

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

Bildbeschreibung hier eingeben

Antwort2

Bei meinem Versuch habe ich Ihren Code geändert, indem ich die Knoten von den Pfaden getrennt und arcPfade zum Zeichnen der kleinen Knoten an den Seiten verwendet habe. Das liegt daran, dass ich denke, dass ein besser organisierter Code leichter zu verstehen ist, und jedes Mal, wenn ich Code schreibe/fertigstelle, nehme ich mir ein paar Minuten Zeit, um seine Struktur zu korrigieren und redundante Optionen zu entfernen.

Die Linien werden mithilfe von Ankern an verschiedenen Pfaden verbunden. In diesem Fall musste ich hinzufügen, calcum andere Positionen zu berechnen und dies zu erreichen. Wenn Sie also beispielsweise (q2.west)und haben (q2.south west), würden Sie zur Berechnung des Mittelpunkts schreiben. ($(q2.west)!.5!(q2.south west)$)Auf diese Weise kann Ihr Pfeil den Mittelpunkt zwischen dem Westen und dem Südwesten eines bestimmten Knotens verbinden.

Alle Pfade wurden ebenfalls gemäß Ihrem gewünschten Beispiel gekürzt. Die bending Bibliothek wurde ebenfalls hinzugefügt, damit die Spitzen der Bogenpfeile richtig ausgerichtet sind.

Ausgabe

Abbildung 1

Code

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

verwandte Informationen