Tikz スネーク パスにはノードの前後に空白があります (MWE)

Tikz スネーク パスにはノードの前後に空白があります (MWE)

tikz を使用してノード間にスネークコイル エッジ/パスを描画していますが、一部のエッジには開始ノードまたは終了ノードの前後に空白があります。次に小さな例を示します。

    \documentclass{standalone}
    \usepackage{tikz}
    \usetikzlibrary[positioning,decorations.pathmorphing]
    \begin{document}
    \begin{tikzpicture}

      \tikzstyle{enclosed} = [draw, circle, inner sep=0pt, minimum size=.15cm, fill=black]
      \tikzstyle{enclosedM} = [draw, circle, inner sep=0pt, minimum size=.15cm, fill=red]

      \node[enclosed, label={left: $x$}] (x) at (0,2) {};
      \node[enclosed, label={right: $y$}] (y) at (4,2) {};
      \node[enclosed] (w) at (2,0) {};
      \node[enclosed] (v) at (2,4) {};
      \node[enclosedM, label={above: $z$}] (z) at (2,1) {};
      \node[enclosedM, label={below: $t$}] (t) at (2,3) {};

      \draw[decorate,decoration={snake,amplitude=.2mm}]
        (x) -- (v)
        (v) -- (y)
        (x) -- (w)
        (w) -- (y)
        (x) -- (t)
        (v) -- (t)
        (y) -- (t)
        (x) -- (z)
        (w) -- (z)
        (z) -- (y);
    \end{tikzpicture}
    \end{document}

結果は次のとおりです。上記から生成されたもののPDF

中央下のノードとノードの間には空白があることに注目してください。また、トップノードとノードの間には空白がありますええ

「振幅」が 0mm に設定されている場合でも、この問題は発生します。これは、エッジがまったく装飾されていない場合と同じだと思いました。「ポスト長さ」と「プレ長さ」のオプションをさまざまな組み合わせで設定すると、一部のエッジは修正されますが、以前は問題なかった他のエッジでも同じ問題が発生します。

を削除して設定なしで通常どおりdecorate, decorations={...}使用する\drawと、正常に動作しますが、エッジは波状になりません。通常のエッジとして動作しながらも半波状になるように、空白を取り除くにはどうすればよいですか?

答え1

デコレーションは慎重に扱う必要があります。なぜこのようなことが起こるのかは正確にはわかりませんが、明らかに、複数のセグメントを 1 つの\drawコマンドにまとめたために起こります。

\draw線分ごとに別々に記述する必要があります。または、元のバージョンに似たものにするには、次のコードを使用します。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,decorations.pathmorphing}
\begin{document}

\begin{tikzpicture}

  \tikzset{
   enclosed/.style={draw, circle, inner sep=0pt, minimum size=.15cm, fill=black},
   enclosedM/.style={enclosed, fill=red}
  }

  \node[enclosed, label={left: $x$}] (x) at (0,2) {};
  \node[enclosed, label={right: $y$}] (y) at (4,2) {};
  \node[enclosed] (w) at (2,0) {};
  \node[enclosed] (v) at (2,4) {};
  \node[enclosedM, label={above: $z$}] (z) at (2,1) {};
  \node[enclosedM, label={below: $t$}] (t) at (2,3) {};

  \foreach\x in {
    (x) -- (v),
    (v) -- (y),
    (x) -- (w),
    (w) -- (y),
    (x) -- (t),
    (v) -- (t),
    (y) -- (t),
    (x) -- (z),
    (w) -- (z),
    (z) -- (y)
  }
   \draw[decorate,decoration={snake,amplitude=.2mm}] \x;

\end{tikzpicture}

\end{document}

ここに画像の説明を入力してください

答え2

2 つのコメント (実際の回答ではありません):tikzstyleは非推奨であり、線を 1 本ずつ引くと問題はありません。(問題が によるものかどうかは確認していませんtikzstyle。)アップデート: コードをコンパクトにしました。角括弧に気付いてくださった @Zarko さんに深く感謝いたします。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
  \tikzset{Snake/.style={decorate,decoration={snake,amplitude=.2mm}},
    enclosed/.style={draw, circle, inner sep=0pt, minimum size=.15cm,
    fill=black},
    enclosedM/.style={draw, circle, inner sep=0pt, minimum size=.15cm,
    fill=red}}

  \node[enclosed, label={left:$x$}] (x) at (0,2) {};
  \node[enclosed, label={right:$y$}] (y) at (4,2) {};
  \node[enclosed] (w) at (2,0) {};
  \node[enclosed] (v) at (2,4) {};
  \node[enclosedM, label={above:$z$}] (z) at (2,1) {};
  \node[enclosedM, label={below:$t$}] (t) at (2,3) {};
  \foreach \X in {x,y,v} \draw[Snake] (t) -- (\X);
  \foreach \X in {x,y,w} \draw[Snake] (z) -- (\X);
  \foreach \X in {x,y}{\foreach \V in {v,w}  \draw[Snake] (\V) -- (\X);}    
\end{tikzpicture}
\end{document}

ここに画像の説明を入力してください

関連情報