我想在彼此下方绘制多个节点。因此,我使用带有节点别名的相对定位。绘制的节点越多,位置似乎越不对齐。这是我尝试过的:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
unit/.style={draw, circle, inner sep=0pt, minimum size=10mm}
]
\draw[black!10, very thin] (0, -4) grid [step=1mm] +(4, 8);
\draw[help lines] (0, -4) grid [step=10mm] +(4, 8);
\filldraw (0,0) circle [radius=2pt];
\node[unit] (c1) at (0,3) [alias=last] {};
\foreach \i in {2,...,5}
\node[unit] (c\i) [alias=last, below=5mm of last] {};
\filldraw[gray!50] (c3) circle [radius=2pt];
\end{tikzpicture}
\end{document}
它看起来是这样的(注意黄色标记的斑点):
我想让圆圈与网格对齐。有什么办法可以解决这个问题吗?
答案1
如果你包括outer sep=0pt
,
unit/.style={draw, circle, inner sep=0pt, minimum size=10mm, outer sep=0pt,}
结果如愿以偿。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
unit/.style={draw, circle, inner sep=0pt, minimum size=10mm,
outer sep=0pt,% <-- added
}
]
\draw[black!10, very thin] (0, -4) grid [step=1mm] +(4, 8);
\draw[help lines] (0, -4) grid [step=10mm] +(4, 8);
\filldraw (0,0) circle [radius=2pt];
\node[unit] (c1) at (0,3) [alias=last] {};
\foreach \i in {2,...,5}
\node[unit] (c\i) [alias=last, below=5mm of last] {};
\filldraw[gray!50] (c3) circle [radius=2pt];
\end{tikzpicture}
\end{document}
答案2
@PeterGrill早些时候回答过但我正在准备插图。;-) 因此,重要的是:节点锚点outer sep
位于中线节点边界。
圆的边界中线的c1
高点和低点的纵坐标是 5 的倍数(从 处的原点开始(0,0)
,使用1mm
作为单位长度)。这是一个没有厚度的理想圆。当 Ti钾Z 绘制边框,两边都有墨水,厚度相等:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[line width=3pt, draw opacity=0.3]
\draw[black!10, very thin] (0, -4) grid [step=1mm] +(4, 8);
\draw[help lines] (0, -4) grid [step=10mm] +(4, 8);
\filldraw (0,0) circle [radius=2pt];
\node (c1) at (0,3)
[draw=blue, alias=last, circle, inner sep=0pt, minimum size=10mm, draw] {};
\fill[red!90!black] (c1.south) circle[radius=0.4pt]
node[inner sep=0pt, below=0pt of c1.south, line width=0pt] {c1.south};
\end{tikzpicture}
\end{document}
为什么c1.south
这里正是墨水的下限?因为默认情况下,/pgf/outer sep
是线宽的一半。如果我们在此示例中设置outer sep=3pt
(与线宽相同)draw opacity=0.3
,则会得到以下结果,因为这是从中线蓝色条纹的宽度为线宽:
如果我们使用outer sep=0pt
,c1.south
就是位于这条中线上的点(纵坐标是 5 的倍数)。这足以解决您的移位问题。
答案3
一些解释Peter Grill 的回答。
假设\i
为2
,则得到的坐标和\node[unit] (c\i) [alias=last, below=5mm of last] {};
之间的距离为last.center
c2.center
半径_最后 + 外_分离_最后 + 5mm + 外_分离_c2 + 半径_c2 = 15mm + .4pt
其中
- radius_last = radius_c2 = 5mm 并且
- outer_sep_last = outer_sep_c2 = 线宽 / 2 = .2pt
这里 outer_sep 由键控制outer sep
最初是线宽的一半。line_width 由键控制line width
最初为 .4pt。