我有一个名为 的自定义 TikZ 箭头myarrow
。如何将其变成形状?我希望能够将其放置在任何我想要的位置,而不需要下面的边缘,使用如下命令:
\node [myarrowshape] at (0,0) {};
答案1
如果您只是想要将箭头放在某处,这里有一种可能性(有两个版本)。两个版本都使用相同的方法:decorations.markings
使用\arrow
。
更新 :由于第一个版本存在一些缺点,因此这里使用 代替 进行pic
修改path picture
。
- 您可以像这样设置箭头,
pic{arrow=latex}
或者更改默认箭头。 - 要缩放箭头,您可以更改线宽,例如
pic[line width=3pt]{arrow}
。 - 箭头不在坐标中心。如果你想让它居中,你可以看看这个问题。
以下是产生与第一种方法相同(最多随机选择)图像的代码。
\documentclass[tikz,border=7pt,convert={density=1400}]{standalone}
\usetikzlibrary{decorations.markings}
%\usetikzlibrary{arrows.meta}
\tikzset{
markarrow/.style={
decoration={ markings,
mark=at position .5 with {\arrow{#1}}
},
postaction={decorate}
},
arrow/.pic = {
\path[pic actions, markarrow={#1}] (-1pt,0) -- (1pt,0);
},
pics/arrow/.default={stealth}
}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,100}
\pic[rotate={random(0,360)}, opacity={rnd}, blue]
at ({2*rnd},{2*rnd}) {arrow};
\pic[red] at (1,1) {arrow};
\end{tikzpicture}
\end{document}
第一个版本:使用问题中要求的语法。
\documentclass[tikz,border=7pt,convert={density=1400}]{standalone}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{arrows.meta}
\tikzset{
markarrow/.style={
decoration={ markings,
mark=at position .5 with {\arrow[#1]{stealth}}
},
postaction={decorate}
},
myarrow/.style={ inner sep = 7pt,
path picture={
\path[markarrow={#1}] ([xshift=-1pt]path picture bounding box.center) --++(2pt,0);
}
}
}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,100}
\node[rotate={random(0,360)}, opacity={rnd}, myarrow=blue]
at ({2*rnd},{2*rnd}) {};
\node[myarrow=red] at (1,1) {};
\end{tikzpicture}
\end{document}
此版本有一些缺点:
path picture
不是为此设计的,而是为了填充图片;- 根据设计,它被剪裁在节点内部,因此如果我们想缩放箭头,我们也必须缩放包含的节点。因此,使用此方法进行缩放很棘手。