Tikz: Zeichnen eines bidirektionalen Pfeils in einem Zustandsdiagramm

Tikz: Zeichnen eines bidirektionalen Pfeils in einem Zustandsdiagramm

Ich möchte ein Zustandsdiagramm wie dieses zeichnen: Zustandsdiagramm

Ich verwende den folgenden Code:

\documentclass[tikz]{standalone}
\usetikzlibrary{automata,positioning}
\begin{document}
\begin{tikzpicture}
\node[state]                               (0) {0};
\node[state,right=of 0]                    (1) {1};
\node[state,right=of 1]                    (2) {2};
\coordinate[draw=none,right=of 2]          (2-g);
\node[state,right=of {2-g},text depth=0pt] (g) {g};

\draw[
    >=latex,
%   every node/.style={above,midway},% either
    auto=right,                      % or
    loop above/.style={out=75,in=105,loop},
    every loop,
    ]
     (g)   edge[loop above] node {$p_{gg}$}   (g)
       edge             node {$p_{gg-1}$} (2-g)
     (2-g) to               node {$p_{32}$}   (2)
       edge[loop above] node {$p_{22}$}   (2)
     (2)   edge             node {$p_{21}$}   (1)
     (1)   edge[loop above] node {$p_{11}$}   (1)
       edge             node {$p_{10}$}   (0)
     (0)   edge[loop above] node {$p_{00}$}   (0);
\end{tikzpicture}
\end{document}

Aber ich hätte gerne alle Pfeile in beide Richtungen. Wie kann ich das machen? Danke.

Antwort1

Wir müssen nur drei Stile anpassen:

  • der Stil der Pfadzeichnungen \draw;
  • der Stil der edgeS \draw-Zeichnungen;
  • der Stil der loopKantenzeichnungen \draw.

Wir können <->an den \drawBefehl anhängen und verwenden, .append styleum dasselbe für die Stile every loopund zu tun every edge:

  \draw[
    >=latex,
    auto=right,
    loop above/.style={out=75,in=105,loop},
    every loop/.append style={<->},
    every edge/.append style={<->},
    <->
  ]
  ...

doppelter Ärger

Vollständiger Code:

\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{automata,positioning}
\begin{document}
\begin{tikzpicture}
  \node[state]                               (0) {0};
  \node[state,right=of 0]                    (1) {1};
  \node[state,right=of 1]                    (2) {2};
  \coordinate[draw=none,right=of 2]          (2-g);
  \node[state,right=of {2-g},text depth=0pt] (g) {g};
  \draw[
    >=latex,
    auto=right,
    loop above/.style={out=75,in=105,loop},
    every loop/.append style={<->},
    every edge/.append style={<->},
    <->
  ]
  (g)   edge[loop above] node {$p_{gg}$}   (g)
  edge             node {$p_{gg-1}$} (2-g)
  (2-g) to               node {$p_{32}$}   (2)
  edge[loop above] node {$p_{22}$}   (2)
  (2)   edge             node {$p_{21}$}   (1)
  (1)   edge[loop above] node {$p_{11}$}   (1)
  edge             node {$p_{10}$}   (0)
  (0)   edge[loop above] node {$p_{00}$}   (0);
\end{tikzpicture}
\end{document}

verwandte Informationen