
У меня есть следующая диаграмма:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\newcommand\rad{.75}
\foreach \a/\r in {60/0, 0/3, 120/3, 240/3}{
\begin{scope}[shift={(\a:\r*\rad)}]
\draw(60+\a:\rad) node (A\a) {} circle (.5mm) [fill];
\draw(180+\a:\rad) node (B\a) {} circle (.5mm) [fill];
\draw(300+\a:\rad) node (C\a) {} circle (.5mm) [fill];
\end{scope}
}
\path[blue, thick, <->]
(A60) edge (B120)
(B60) edge (B240)
(C60) edge (B0)
(A0) edge [bend right] (C120)
(A120) edge [bend right] (C240)
(A240) edge [bend right] (C0);
\end{tikzpicture}
\end{document}
Я хочу, чтобы все синие края были зачеркнуты, поэтому я модифицировал их с помощью украшений:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\newcommand\rad{.75}
\foreach \a/\r in {60/0, 0/3, 120/3, 240/3}{
\begin{scope}[shift={(\a:\r*\rad)}]
\draw(60+\a:\rad) node (A\a) {} circle (.5mm) [fill];
\draw(180+\a:\rad) node (B\a) {} circle (.5mm) [fill];
\draw(300+\a:\rad) node (C\a) {} circle (.5mm) [fill];
\end{scope}
}
\path[blue, thick, <->, decoration={markings,mark=at position 0.5 with {\arrow{|}}}]
(A60) edge [decorate] (B120)
(B60) edge [decorate] (B240)
(C60) edge [decorate] (B0)
(A0) edge [decorate, bend right] (C120)
(A120) edge [decorate, bend right] (C240)
(A240) edge [decorate, bend right] (C0);
\end{tikzpicture}
\end{document}
Очевидно, я что-то сделал не так. Сами края исчезли, а кончики стрелок отсутствовали. Тот, что на стороне источника, исчез, а другой имеет очень странное позиционирование.
Я попробовал несколько других типов стрелок, кроме |
, и попытался украсить только некоторые края:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\newcommand\rad{.75}
\foreach \a/\r in {60/0, 0/3, 120/3, 240/3}{
\begin{scope}[shift={(\a:\r*\rad)}]
\draw(60+\a:\rad) node (A\a) {} circle (.5mm) [fill];
\draw(180+\a:\rad) node (B\a) {} circle (.5mm) [fill];
\draw(300+\a:\rad) node (C\a) {} circle (.5mm) [fill];
\end{scope}
}
\path[blue, thick, <->, decoration={markings,mark=at position 0.5 with {\arrow{><}}}]
(A60) edge [decorate] (B120)
(B60) edge [decorate] (B240)
(C60) edge (B0)
(A0) edge [bend right] (C120)
(A120) edge [bend right] (C240)
(A240) edge [decorate, bend right] (C0);
\end{tikzpicture}
\end{document}
Так что, похоже, что декорирование этим вызывает проблему. Однако я вижу довольно похожий код в таких местах, какздесьиздесь.
Что я сделал не так? Как мне исправить мои украшения?
решение1
Декорация уничтожает входной путь (за исключением определенных случаев, подробно описанных ниже), что означает, что она использует путь для определения позиций на пути, но после завершения декорации этот путь исчезает. Обычно
postaction
для добавления маркировки нужно использовать a.
(Особый случай — mark connection node
украшение.)
Замените decorate
s на postaction=decorate
, и вы получите то, что вам нужно, я надеюсь.
Не |
идеально отцентрирован, потому чтоон должен касаться только точки. Аналогичные вещи происходят, если вы просите , \arrow{><}
потому что (обратный) кончик <
находится в позиции 0,5, а не в какой-то середине.
Если вы хотите, чтобы все края были декорированы, используйте every edge
стиль:
\path[…, decoration = {…}, every edge/.append style={postaction=decorate}] …;
Я не добавилarrows.meta
библиотекав коде, хотя старые стрелки устарели, проблема и решение те же.
Код
\documentclass[tikz]{standalone}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\newcommand\rad{.75}
\foreach \a/\r in {60/0, 0/3, 120/3, 240/3}{
\begin{scope}[shift={(\a:\r*\rad)}]
\draw(60+\a:\rad) node (A\a) {} circle (.5mm) [fill];
\draw(180+\a:\rad) node (B\a) {} circle (.5mm) [fill];
\draw(300+\a:\rad) node (C\a) {} circle (.5mm) [fill];
\end{scope}
}
\path[blue, thick, <->, decoration={markings,mark=at position 0.5 with {\arrow{|}}}]
(A60) edge [postaction=decorate] (B120)
(B60) edge [postaction=decorate] (B240)
(C60) edge (B0)
(A0) edge [bend right] (C120)
(A120) edge [bend right] (C240)
(A240) edge [postaction=decorate, bend right] (C0);
\end{tikzpicture}
\end{document}