我有以下问题。我正在使用该tikz
包绘制图形。我正在绘制某种数据结构。这包括节点和连接节点的线。有时,一条线必须以点开头并以箭头结尾。我有以下代码(使用arrows
和patterns
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