Tikz: Desenhando uma seta bidirecional em um diagrama de estado

Tikz: Desenhando uma seta bidirecional em um diagrama de estado

Eu gostaria de desenhar um diagrama de estado como este: diagrama de estado

Estou usando o seguinte código:

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

Mas eu gostaria que todas as setas fossem bidirecionais. Como posso fazer isso? Obrigado.

Responder1

Só precisamos ajustar três estilos:

  • o estilo do caminho \drawdesenha;
  • o estilo dos edgedesenhos \draw;
  • o estilo dos desenhos loopda borda \draw.

Podemos anexar <->ao \drawcomando e usar .append stylepara fazer o mesmo para os estilos every loope every edge:

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

problema em dobro

Código completo:

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

informação relacionada