我试图从 (p) 到 (x0) 画一条线,但我希望这条线从节点 (p) 内部开始,而不是从边界开始。我尝试使用“xshift”,但没有效果。
\begin{tikzpicture}[auto,>=latex', thick, overlay]
\path[->]<1-> node[cell, label=left:\texttt{x}] at (-1,0) (x0) {};
\path[->]<1-> node[cell, label=left:\texttt{p}] at (-3,2) (p) {};
\path[->,red,xshift=-5mm]<1-> (p) edge [bend left] (x0);
\end{tikzpicture}
先感谢您。
答案1
我认为评论和 Gonzalo 的回答是正确的,但我想补充更多信息。首先,(node.center)
如果你想从节点的中心绘制某个东西,这是很好且自然的方法。
outer sep
用于放置锚点(中心锚点除外),因此修改它是有害的outer sep
。下面我放了一张图片来解释如何使用不同的选项。
现在,对于您的情况,有一些注释需要补充。首先,您使用,edge
但是如果您使用to
,并且如果您想获取最终节点的中心,您可以找到另一种方法。第一张图片显示了正常方式。outer sep
确定line width
以获取节点形状附近的边缘的起点和终点。有趣的情况是第三个,因为edge
是一个特殊操作(参见 pgfmnual),并且在边缘绘制在最后一个节点之前,箭头指向 (2,-1)。
\documentclass{article}
\usepackage{tikz}
\usepackage{spath}
\begin{document}
\begin{tikzpicture}
\node[circle,draw](A) {A};
\node[circle,draw](B) at (2,-1){B};
\draw[->,red,thick] (A) edge [bend left] (B);
\end{tikzpicture}
\begin{tikzpicture}
\node[circle,draw](A) {A};
\node[circle,draw](B) at (2,-1){B};
\draw[->,red,thick] (A.center) edge [bend left] (B.center);
\end{tikzpicture}
\begin{tikzpicture}
\node[circle,draw](A) {A};
\draw[->,red,thick] (A) edge [bend left] node[at end,circle,draw,black,thin]{B}(2,-1) ;
\end{tikzpicture}
\begin{tikzpicture}
\node[circle,draw](A) {A};
\node[circle,draw](B) at (2,-1){B};
\draw[->,red,thick] (A.center) to [bend left] (B);
\end{tikzpicture}
\end{document}
答案2
这里有几个选项。您可以设置inner sep
为0pt
并使用p.center
而不是p
(如评论中所建议的那样),或者您可以使用选项将shorten <=
线的开头缩短给定的距离。一个小例子说明了这些方法(我删除了一些设置,因为您没有在代码片段中提供适当的定义):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[auto,>=latex', thick, overlay]
\path[->] node[label=left:\texttt{x}] at (-1,0) (x0) {};
\path[->] node[label=left:\texttt{p}] at (-3,2) (p) {};
\path[->,red] (p) edge [bend left] (x0);
\begin{scope}[xshift=3cm]
\path[->] node[label=left:\texttt{x}] at (-1,0) (x0) {};
\path[->] node[inner sep=0pt,label=left:\texttt{p}] at (-3,2) (p) {};
\path[->,red] (p.center) edge [bend left] (x0);
\end{scope}
\begin{scope}[xshift=6cm]
\path[->] node[label=left:\texttt{x}] at (-1,0) (x0) {};
\path[->] node[label=left:\texttt{p}] at (-3,2) (p) {};
\path[->,red,shorten <= -5pt] (p) edge [bend left] (x0);
\end{scope}
\begin{scope}[xshift=9cm]
\path[->] node[label=left:\texttt{x}] at (-1,0) (x0) {};
\path[->] node[label=left:\texttt{p}] at (-3,2) (p) {};
\path[->,red,shorten <= -10pt] (p) edge [bend left] (x0);
\end{scope}
\end{tikzpicture}
\end{document}
还有一个shorten >=
选项可以根据给定的距离缩短线的末端。