Я использую 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}
Обратите внимание, что между центральным нижним узлом и узлом есть пробел.з. Также есть пробел между верхним узлом и узлому.
Это все еще происходит, даже если "амплитуда" установлена на 0 мм, что, как я думал, было бы эквивалентно тому, если бы край вообще не был декорирован. Установка опций "длина поста" и "длина предварительных" с различными комбинациями исправляет некоторые края, но затем создает ту же проблему с другими краями, которые раньше были в порядке.
Если я уберу decorate, decorations={...}
и буду использовать \draw
как обычно без настроек, то все будет нормально, но края не волнистые. Как мне избавиться от пробелов, чтобы они вели себя как обычные края, но полуволнистые?
решение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
Два комментария (не настоящий ответ): tikzstyle
устарело, и если вы проведете линии одну за другой, то проблем не возникнет. (Я не проверял, связана ли проблема с 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}