在此示例中,箭头下的注释文本未水平对齐(“cur”高于“index”和“key”)。
\tiny\begin{tikzpicture}[start chain=C1 going right,>=latex,node distance=0pt]
\definecolor{col1}{RGB} {238,51,34}
\definecolor{col2}{RGB} {153,221,153}
\definecolor{col3}{RGB} {255,255,51}
\tikzset{box/.style={draw,fill=yellow!5,rectangle, minimum width=.5cm,minimum height=.5cm,outer sep=0}}
\tikzset{arr/.style={->,line width=0.2pt}}
\newcommand\ann[3][]{
\draw[arr,#1,shorten >=1pt,shorten <=1pt] ([yshift=-0.5cm]#2.south) node[below] {#3} -- (#2.south);
}
\foreach \val/\col [count=\i] in {1/col1,2/col1,3/col1,6/col2,5/col2,2/col2,4/col3} {
\node[box,fill=\col,on chain] (N\i) {\val};
}
\ann[black]{N3}{cur};
\ann[black]{N5}{index};
\ann[black]{N7}{key};
\end{tikzpicture}
输出:
答案1
TikZ-PGF 文档第 67 页的一个教程中清楚地解释(并解决)了这个问题:
基线不匹配的问题是由于 ... omissis(编者注:节点中的文本)... 都具有不同的高度和深度。 如果它们都具有相同的高度和深度,则它们将以相同的方式垂直放置。 因此,Ilka 需要做的就是使用文本高度和文本深度选项明确指定节点的高度和深度。
因此添加文字height=1.5ex,text depth=.25ex
就足够了:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary[chains]% please always put a complete mwe!
\begin{document}
\tiny
\begin{tikzpicture}[start chain=C1 going right,>=latex,node distance=0pt,text height=1.5ex,text depth=.25ex]
\definecolor{col1}{RGB} {238,51,34}
\definecolor{col2}{RGB} {153,221,153}
\definecolor{col3}{RGB} {255,255,51}
\tikzset{box/.style={draw,fill=yellow!5,rectangle, minimum width=.5cm,minimum height=.5cm,outer sep=0}}
\tikzset{arr/.style={->,line width=0.2pt}}
\newcommand\ann[3][]{
\draw[arr,#1,shorten >=1pt,shorten <=1pt] ([yshift=-0.5cm]#2.south) node[below] {#3} -- (#2.south);
}
\foreach \val/\col [count=\i] in {1/col1,2/col1,3/col1,6/col2,5/col2,2/col2,4/col3} {
\node[box,fill=\col,on chain] (N\i) {\val};
}
\ann[black]{N3}{cur};
\ann[black]{N5}{index};
\ann[black]{N7}{key};
\end{tikzpicture}
\end{document}
答案2
它们是对齐的。它们被放置below
。因此,它们的north
锚点用于放置它们。它们看起来没有对齐,因为curr
比其他的短得多。
为了避免这种情况,您可以使用mid
,比如说,来对齐它们,并在放置它们时添加一些空间来补偿。
\documentclass[border=10pt,multi,tikz]{standalone}
\usetikzlibrary{chains,scopes}
\begin{document}
\newcommand\ann[3][]{
\draw[arr,#1,shorten >=1pt,shorten <=1pt] ([yshift=-0.5cm]#2.south) node [below=5pt, anchor=mid] {#3} -- (#2.south);
}
\tiny
\begin{tikzpicture}
[
start chain=C1 going right,
>=latex,
node distance=0pt,
box/.style={draw,fill=yellow!5,rectangle, minimum width=.5cm,minimum height=.5cm,outer sep=0},
arr/.style={->,line width=0.2pt}
]
\definecolor{col1}{RGB} {238,51,34}
\definecolor{col2}{RGB} {153,221,153}
\definecolor{col3}{RGB} {255,255,51}
\foreach \val/\col [count=\i] in {1/col1,2/col1,3/col1,6/col2,5/col2,2/col2,4/col3} {
\node[box,fill=\col,on chain] (N\i) {\val};
}
\ann[black]{N3}{cur};
\ann[black]{N5}{index};
\ann[black]{N7}{key};
\end{tikzpicture}
\end{document}