我正在使用 TikZ 绘制流程图。我的代码如下:
\documentclass{minimal}
\usepackage[a4paper, landscape]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
[queue/.style={isosceles triangle,isosceles triangle apex angle=60,
anchor=north,shape border rotate=90,draw,minimum width=15mm},
activity/.style={rectangle,draw,
anchor=north,minimum width=25mm,minimum height=15mm,
text width=20mm,align=center}]
\node[queue] (tortilla queue) at (0,0) [label=below:queue 1]
{wait};
\node[activity] (tortilla station) [right=of tortilla queue]
{tortilla\\station};
\draw [->] (tortilla queue.east) -- (tortilla station.west);
\end{tikzpicture}
\end{document}
这是输出
输出的问题是我希望三角形的底边与矩形的底边对齐。我该怎么做?
我尝试过改变anchor
或 使用 ,yshift
但不起作用。当然我可以手动放置节点,但这会弄乱箭头的位置。
答案1
位置
您可以将矩形放置在三角形的右下角,并指定south west
为矩形的锚点,即
right=of tortilla queue.right corner,anchor=south west
请注意,必须指定锚点后 定位,就像right=of...
自动设置锚点一样。
箭
还要注意,为了使箭头水平,我使用了 -|
,即
\draw [->] (tortilla queue.east) -- (tortilla queue.east -| tortilla station.west);
从 画一条线到 从画出的一条水平线与从 画出的一条垂直线tortilla queue.east
的交点。tortilla queue.east
tortilla station.west
如果您愿意,您可以使用该intersections
库找到水平线tortilla station.west
与三角形最近边的交点,从而从矩形的垂直中心获得一个水平箭头。
另类queue
风格
为了使文本在三角形中更居中,您可以使用形状regular polygon
,而不是isosceles triangle
。这将为角点提供不同的名称,右下角为corner 3
。因此,例如
queue/.style={regular polygon,regular polygon sides=3,draw,minimum width=15mm,inner sep=1pt}
完整代码
有三种不同的选项。截图如下。
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{positioning,intersections}
\begin{document}
\begin{tikzpicture}
[queue/.style={regular polygon,regular polygon sides=3,draw,minimum width=15mm,inner sep=1pt},
old queue/.style={isosceles triangle,isosceles triangle apex angle=60,
anchor=north,shape border rotate=90,draw,minimum width=15mm},
activity/.style={rectangle,draw,
anchor=north,minimum width=25mm,minimum height=15mm,
text width=20mm,align=center}]
% original queue style
\node[old queue] (tortilla queue) at (0,0) [label=below:queue 1]
{wait};
\node[activity] (tortilla station) [right=of tortilla queue.right corner,anchor=south west]
{tortilla\\station};
\draw [->] (tortilla queue.east) -- (tortilla queue.east -| tortilla station.west);
% new queue style
\node[queue] (tortilla queue) at (0,-3) [label=below:queue 1]
{wait};
\node[activity] (tortilla station) [right=of tortilla queue.corner 3,anchor=south west]
{tortilla\\station};
\draw [->] (tortilla queue.east) -- (tortilla queue.east -| tortilla station.west);
% new queue style, and arrow to center of rectangle
\node[queue] (tortilla queue) at (0,-5.4) [label=below:queue 1]
{wait};
\node[activity] (tortilla station) [right=of tortilla queue.corner 3,anchor=south west]
{tortilla\\station};
\path [name path=from rect] (tortilla station.west) -| (tortilla queue.corner 1);
\path [name path=triangle side] (tortilla queue.corner 1) -- (tortilla queue.corner 3);
\draw [->,name intersections={of=from rect and triangle side}] (intersection-1) -- (tortilla station.west);
\end{tikzpicture}
\end{document}