我想得到一个粗箭头,但不是全黑的,但有一个图案(例如,交叉影线)。我不确定如何得到这个。我有以下仍然给我一个黑色的箭头:
\documentclass[landscape]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{shapes,shapes.multipart,shapes.geometric,fit,positioning,arrows,matrix,decorations.pathreplacing,patterns}
\begin{document}
\begin{tikzpicture}
\tikzset{
bigbigbox/.style = {minimum width=3.5cm, rectangle},
bigbox/.style = {draw, rectangle},
box/.style = {minimum width=2.7cm, rounded corners,rectangle, fill=blue!20},
square/.style = {minimum width=15mm,minimum height=15mm}
}
\node[square,draw,text width=1.5cm,align=center] (a1) {Map Tasks};
\node[square,draw,right of=a1,xshift=20mm,text width=1.5cm,align=center] (a2) {Mapper Input Cache};
\node[square,draw,below of=a1,yshift=-15mm,text width=1.5cm,align=center] (a3) {Reduce Tasks};
\node[square,draw,below of=a2,yshift=-15mm,text width=1.5cm,align=center] (a4) {Check Fixed Point};
\draw[-triangle 90, line width=1mm, black,pattern=crosshatch,postaction= {draw=black,pattern=crosshatch, line width=3mm, shorten >=0.2cm, -}] (a2.west) -- (a1.east);
\node[bigbox] [fit = (a1) (a4)] (box1){};
\end{tikzpicture}
\end{document}
以下是我得到的结果:
答案1
这PGF 手册关于模式库的规定:
该包定义了填充区域的模式。
关键词是填充。
您在一条(几乎,见下文)没有面积的路径上使用了图案。Afill
也不会被看到。
我提出的解决方案使用single arrow
形状使用以下模式:
\path let \p1=(a1.east), \p2=(a2.west), \n1={abs(\x2-\x1)} in node[
draw,
pattern=crosshatch,
single arrow,
rotate=180,
minimum height=\n1,
anchor=west,
at=(a2.west),
outer xsep=-.5\pgflinewidth,
] {};
这里发生了什么事?
draw
:我们想要一个轮廓边框。pattern=crosshatch
single arrow
:这是的简短版本shape=single arrow
,声明了节点的形状。rotate=180
:自然方向是 0°(右),我们将箭头转动,使其指向左。minimum height=\n1
:高度(即箭头的长度)设置为.east
锚点到左节点的距离和.west
锚点到右节点的距离。(该calc
库用于let … in
操作符。)anchor=west
:我们使用形状的.west
锚点(轴的底部)来放置箭头。at=(a2.west)
:节点的.west
锚点(见上文)放置在.west
正确节点的锚点处。outer xsep=-.5\pgflinewidth
:这是将轴的底线覆盖到与右节点的线完全对齐的秘诀。注释掉它可获得:在我看来,这并不好。
巧合的是,箭头的默认尺寸与箭头线非常吻合。查看 PGF 手册第 48.5 节“箭头形状”以进一步更改箭头的外观。
几乎?
几乎意味着箭头本身使用了绘图,但粗线宽会覆盖它。在下面的示例中,不透明度设置为 50%,以显示箭头包含填充。库中使用的相应 PGF 命令arrows
是\pgfusepathqfillstroke
。
代码
\draw[line width=5mm,opacity=.5,-triangle 90,pattern=crosshatch] (0,0) -- (2,0);
输出
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{
shapes.arrows,
positioning,
patterns,
calc,
}
\tikzset{
square/.style={
minimum width=15mm,
minimum height=15mm,
},
}
\begin{document}
\begin{tikzpicture}
\node[square,draw,text width=1.5cm,align=center] (a1) {Map Tasks};
\node[square,draw,right of=a1,xshift=20mm,text width=1.5cm,align=center] (a2) {Mapper Input Cache};
\path let \p1=(a1.east), \p2=(a2.west), \n1={abs(\x2-\x1)} in node[
draw,
pattern=crosshatch,
single arrow,
rotate=180,
minimum height=\n1,
anchor=west,
at=(a2.west),
outer xsep=-.5\pgflinewidth,
] {};
\end{tikzpicture}
\end{document}