Tikz 有一个特殊的形状,称为“箭头框”。这是一个带有箭头的框。但是我们如何才能改变这种形状中箭头的方向呢?事实上,我需要画一个带有弯曲箭头的“箭头框”,就像附图中显示的那样。
有人知道这是怎么可能的吗?顺便说一句,我不需要这张图片的其他部分。只有箭头框才是我的问题。谢谢。
答案1
此解决方案对于顶部箭头来说有点儿不妥。基本上,任何以与节点边界正交的方式开始的箭头都没有问题,但对角箭头会“打破”这种假象,如下所示:
我能想到的解决这个问题的最好方法是自动添加另一个节点,该节点内部的边框为白色且位于前景,从而覆盖多余的部分。
需要改进的地方:
- 目前,这是通过手动固定节点并减去其他长度以使其完美地适合内部来完成的,但我想使其自动化。
- 更好的方法是添加一条适应主节点的“可拉伸”路径(例如,如果添加更多单词)。
- 另外,目前我还没有成功让它与
edge
或一起工作to
,但它应该不难。
如果我找到方法,我会编辑答案。
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, arrows.meta, decorations.markings,backgrounds}
\pgfdeclarelayer{main}
\pgfdeclarelayer{fg}
\pgfsetlayers{main,fg}
\tikzset{
rect/.style={draw, line width=.3mm, rectangle, inner sep=0, minimum height=2cm, minimum width=5cm, fill=white,
append after command={\pgfextra{\begin{pgfonlayer}{fg}\node[draw=white, line width=1.5mm, minimum height=1.82cm, minimum width=4.82cm, anchor=north west] at ($(\tikzlastnode.north west)+(\mybor,-\mybor)$) {};\end{pgfonlayer}}}
},
warr/.style={draw=black, double=white, line width=1pt, double distance=1mm, shorten >=10.9pt, rounded corners=#1,
decoration={markings,mark=at position 1 with {\arrow{Triangle[open,length=12pt, width=12pt,line width=1.1pt]}},
mark=at position 0 with {\arrow{Turned Square}}},
preaction={decorate},
postaction={draw,white, line width=1mm,shorten >=6pt, shorten <=2pt},
},
}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (-5,1);
\coordinate (b) at (-1,-3);
\node[rect] (na) at (0,0) {This is a very fancy node};
\draw[warr=2cm] ($(na.south west)!.8!(na.south east)$) |- (b);
\draw[warr=2cm] ($(na.north west)!.3!(na.north east)+(0,-1mm)$) -- ++(-2cm,2.5cm) -- (a);
\end{tikzpicture}
\end{document}