我有下图:
\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
添加标记。
(特定情况是装饰mark connection node
。)
将 s替换decorate
为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}