我有一条弯曲的路径,我想在上面放置一个开放式菱形箭头。这是我尽最大努力的 MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.markings}
\begin{document}
\begin{tikzpicture}[decoration={
markings,
mark=at position .5 with {\arrow[>=open diamond] {>} } }
]
\node (0) {};
\node (1) [right of=0] {};
\node (2) [below right of=1] {};
\path (0) edge[out=0, in=135, postaction={decorate}] (2);
\end{tikzpicture}
\end{document}
如您所见,菱形的右下角点完全位于路径上,但左上角点明显位于路径上方。看起来菱形位于菱形右下角路径的切线上。
问题:
我怎样才能放置这个开口菱形箭头,以便菱形的两个点都在路径上?
附加问题:
使菱形内部区域完全变白的最佳解决方案是什么?我不想看到菱形内部的路径。我目前有一个我认为是 hack 的解决方案,即首先在同一位置放置一个白色(封闭)菱形箭头:
mark=at position .5 with {\arrow[>=diamond, white] {>} },
答案1
这是一种非常夸张的方法,它将坐标放置在路径上的指定位置,在该坐标上放置具有指定直径的圆,计算曲线和圆的交点,然后在两个交点之间绘制一个菱形。
缺点:菱形的大小会略有不同,具体取决于原始路径的曲率。原始路径不会中断,而是将菱形绘制在路径顶部。在当前实现中,虽然您可以在同一路径上绘制多个菱形,但 、diamond ratio
和diamond length
等选项every diamond
将平等地应用于所有菱形。
\documentclass{standalone}
\usepackage{tikz}
\tikzset{
diamond helpers/.code={
\path [draw,name path=circle] (middle) circle [radius=0.1cm];
},
diamond/.style={
decoration={
markings,
mark=at position #1 with {
\coordinate (middle);
\path [name path=circle] (middle) circle [radius=0.5*\diamondlength];
\draw [every diamond, name intersections={of=curve and circle}]
(intersection-1) --
($($(intersection-1)!0.5!(intersection-2)$)!\diamondaspect!90:(intersection-2)$) --
(intersection-2) --
($($(intersection-1)!0.5!(intersection-2)$)!\diamondaspect!-90:(intersection-2)$) --
cycle;}
},
postaction=decorate,
name path global=curve
},
diamond/.default=0.5,
diamond aspect/.store in=\diamondaspect,
diamond aspect=0.75,
diamond length/.store in=\diamondlength,
diamond length=0.2cm,
every diamond/.style={draw,fill=white}
}
\usetikzlibrary{decorations.markings,intersections,calc}
\begin{document}
\begin{tikzpicture}
* \draw [diamond, diamond=0.1] (0,0) to [out=70, in=100] (1,-1);
\end{tikzpicture}
\end{document}
答案2
您可以用菱形节点标记曲线,并根据需要自定义其纵横比。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,shapes}
\begin{document}
\begin{tikzpicture}[decoration={
markings,
mark connection node=connode,
mark=at position 0.5 with {
\node[transform shape,shape=diamond,fill=white,draw] (connode) {};
}
}
]
\node (0) {};
\node (1) [right of=0] {};
\node (2) [below right of=1] {};
\path (0) edge[out=0, in=135, postaction={decorate}] (2);
\end{tikzpicture}
\end{document}
我已经编辑了代码以获得稍微更好的位置,但它仍然没有完美地遵循曲率,这是由于菱形的大小与标记库中的曲率相比,我没有看到除了绘制到中间菱形节点然后绘制到最终点之外的直接修复。