Tikz 箭头从正中心开始

Tikz 箭头从正中心开始

我有以下问题。我正在使用该tikz包绘制图形。我正在绘制某种数据结构。这包括节点和连接节点的线。有时,一条线必须以点开头并以箭头结尾。我有以下代码(使用arrowspatterns tikz库):

\documentclass{article}

\usepackage{verbatim}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{patterns}
\usetikzlibrary{arrows}
\begin{document}
\begin{figure}[h]

    \begin{tikzpicture}
      [internal/.style={rectangle,draw},
       bmp/.style={rectangle,draw,pattern=north east lines},
       ]
      \node(root)     at ( 0.00, 0.00)                           {\verb=root=};
      \node(in1)      at ( 0.00,-0.60)          [internal,minimum width=3mm,label=left:I1]        {};
      \draw[-stealth](root)--(in1);

      \node(cn1)      at ( 0.00,-1.2)           [internal,minimum width=6mm,label=left:C1]        {};
      \node(cn1bmp)   at (-0.15,-1.2)           [bmp,minimum width=3mm]             {};
      \node(cn1arr1)  at ( 0.15,-1.2)           [internal,minimum width=3mm]        {};
      \draw[*-stealth](in1.mid)--(cn1);

      \node(k1)       at ( 0.50,-1.8)                                               {$k_1$};
      \draw[*-stealth](cn1arr1.mid)--(k1);

      \node(cas)      at ( 0.8,-0.20)                              {\verb=CAS=};
      \draw[->, shorten >=2pt](cas)--(in1);

      \node(lab)      at (-0.70,-1.80) [internal]     {C};
    \end{tikzpicture}

\caption{Trie examples}
\label{f-tries}
\end{figure}
\end{document}

得到以下图片:

在此处输入图片描述

现在,如您所见,指向k1(对应于\draw[*-stealth](cn1arr1.mid)--(k1);)的箭头开始稍微向右移动。当我有更多箭头时,这看起来很糟糕 - 它们似乎都在各个方向上偏移。

有什么方法可以强制箭头从正中心开始(cn1arr1.center不起作用 - 它放得太低了)?

谢谢!

答案1

简单的解决方案:使用shorten < = <length>语法,它将箭头尖端(在您的例子中是圆圈)沿路径移动指定的长度。使用

\draw[*-stealth,shorten <=-2.5pt](cn1arr1.center)--(k1);

在这种情况下效果很好。

更正确的方法是使用 定义一个新的箭头尖\pgfdeclarearrow{start name}{end name}{extend code}{arrow tip code},其中extend code(沿线移动箭头尖)留空。以下是基于原始*箭头尖代码的实现,因此圆直径将与原始直径相同,但它将以线的起点为中心:

\makeatletter
\pgfarrowsdeclare{new*}{new*}{}
{
  \pgfutil@tempdima=0.4pt%
  \advance\pgfutil@tempdima by.2\pgflinewidth%
  \pgfsetdash{}{+0pt}
  \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{+4.5\pgfutil@tempdima}
  \pgfusepathqfillstroke
}
\makeatother

相关内容