新手 TikZ 问题:从节点内部开始的一条线

新手 TikZ 问题:从节点内部开始的一条线

我试图从 (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 sep0pt并使用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 >=选项可以根据给定的距离缩短线的末端。

相关内容