Ich verwende Tikz, um eine Schlangenlinienkante/einen Schlangenlinienpfad zwischen Knoten zu zeichnen, aber einige Kanten haben Leerzeichen vor/nach ihrem Start- oder Endknoten. Hier ist ein kleines Beispiel:
\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}
Beachten Sie, dass zwischen dem unteren mittleren Knoten und dem Knoten ein Leerraum vorhanden ist.z. Außerdem gibt es Leerzeichen zwischen dem obersten Knoten und dem Knotenj.
Dies tritt auch dann noch auf, wenn „Amplitude“ auf 0 mm eingestellt ist, was meiner Meinung nach dem entspricht, wenn die Kante überhaupt nicht dekoriert ist. Das Einstellen der Optionen „Postlänge“ und „Prelänge“ mit verschiedenen Kombinationen behebt einige Kanten, verursacht dann aber dasselbe Problem mit anderen Kanten, die vorher in Ordnung waren.
Wenn ich es entferne decorate, decorations={...}
und es wie gewohnt ohne Einstellungen verwende \draw
, funktioniert es einwandfrei, aber die Kanten sind nicht gewellt. Wie kann ich die Leerzeichen entfernen, sodass es sich wie eine normale, aber halb gewellte Kante verhält?
Antwort1
Mit der Verzierung muss man vorsichtig umgehen. Ich weiß nicht genau, warum das passiert, aber es liegt offensichtlich daran, dass man mehrere Segmente in einen einzigen \draw
Befehl einfügt.
Sie sollten \draw
für jedes Liniensegment einen separaten Code schreiben. Oder, um ihn Ihrer Originalversion ähnlich zu machen, können Sie den folgenden Code verwenden:
\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}
Antwort2
Zwei Kommentare (keine richtige Antwort): tikzstyle
ist veraltet und wenn Sie die Linien einzeln zeichnen, gibt es kein Problem. (Ich habe nicht überprüft, ob das Problem auf zurückzuführen ist tikzstyle
.)AKTUALISIEREN: den Code kompaktiert und ein großes Dankeschön an @Zarko für das Auffinden der eckigen Klammern!
\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}