以下示例中的 nodename.number 是什么?例如 a.345?更改数字会任意旋转箭头。如何确定数字以使其保持平行?
\begin{figure}[!htb]
\begin{center}
\begin{tikzpicture}[node distance=1.5cm, auto, >=stealth]
% nodes
\node[block] (a){\textbf{START} };
\node[block] (b)[right of= a, node distance =6cm]{\textbf{END}};
% edges
\draw[-open triangle 45] (a.345) -- node[rotate=0,above, yshift=1cm] {a-B} (b.195);
\draw[open triangle 45-] (a.15) -- node[rotate=0,below, yshift=-0.5cm] {B-A} (b.165);
\end{tikzpicture}
\caption{Diagram }
\label{flowchart}
\end{center}
\end{figure}
答案1
正如 Caramdir 在 Jubobs 链接的答案中所说:
标准节点的锚点
node.〈angle〉
角度介于 0(=东)和 360 之间,按逆时针测量。这些节点位于节点的边界上,位于与中心成给定角度的线上。
这也解释了数字的作用。
问题的第二部分有点棘手(根据block
您未在问题中说明的样式设置方式,可能会有一些变化)。使用角度来表示所需内容的问题在于,对于不同的形状,与角度相对应的点的高度可能不同:
因此,尽管您可能希望使用角度来指定箭头离开一个形状的位置,但您可能不想使用角度来指定它进入另一个形状的位置。您真正想说的是“保持水平直到碰到边界”。据我所知,没有内置的构造可以做到这一点,但使用交点的坐标规范|-
和来模拟它并不难-|
。在您的例子中,您有一个从离开的箭头a
。a.345
现在您希望它水平移动直到到达b
。它将到达b
左侧,因此我们需要知道x
左侧的坐标。这恰好与锚点的x
坐标相同。所以我们想要的坐标和的。这可以使用库中的构造来完成,但也可以写成。这意味着“垂直线通过与水平线相交的点。”。west
b
y
a.345
x
b.west
let
calc
(b.west |- a.345)
b.west
a.345
这样做的一个缺点是,如果您更改箭头的出口点,则必须a.345
在两个位置都更改。您可以使用coordinate
标记该点:\coordinate (a exit) at (a.345); \draw[->] (a exit) -- (b.east |- a exit);
。或者您可以使用一些技巧来定义一个“虚拟坐标”,该坐标始终扩展到指定的最后一个点。这就是我下面所做的。
\documentclass{article}
%\url{http://tex.stackexchange.com/q/113998/86}
\usepackage{tikz}
\usetikzlibrary{arrows}
\tikzset{
block/.style={draw,fill=cyan}
}
\makeatletter
\expandafter\def\csname pgf@sh@np@last point\endcsname{\def\centerpoint{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}}
\expandafter\def\csname pgf@sh@ns@last point\endcsname{coordinate}
\expandafter\def\csname pgf@sh@pi@last point\endcsname{\pgfpictureid}%
\expandafter\def\csname pgf@sh@nt@last point\endcsname{{1.0}{0.0}{0.0}{1.0}{0.0pt}{0.0pt}}
\expandafter\def\csname pgf@sh@np@last saved point\endcsname{\def\centerpoint{\pgfqpoint{\tikz@lastsavedx}{\tikz@lastsavedy}}}
\expandafter\def\csname pgf@sh@ns@last saved point\endcsname{coordinate}
\expandafter\def\csname pgf@sh@pi@last saved point\endcsname{\pgfpictureid}%
\expandafter\def\csname pgf@sh@nt@last saved point\endcsname{{1.0}{0.0}{0.0}{1.0}{0.0pt}{0.0pt}}
\makeatother
\begin{document}
\begin{tikzpicture}[node distance=1.5cm, auto, >=stealth]
% nodes
\node[block] (a){\textbf{START} };
\node[block] (b)[right of= a, node distance =6cm]{\textbf{END}};
% edges
\draw[-open triangle 45] (a.345) -- node[rotate=0,above, yshift=1cm] {a-B} (b.west |- last point);
\draw[open triangle 45-] (a.15) -- node[rotate=0,below, yshift=-0.5cm] {B-A} (b.west |- last point);
\end{tikzpicture}
\end{document}