以下引文可在 pgf 手册第 17 章第 5.3 节中找到。(“此选项”是指通过两次测量来指定节点的位置。):
此选项的效果如下。首先,
(<number or dimension 2>, <number or dimension 1>)
使用评估此类坐标的正常规则计算该点,得出某个位置。然后,节点将按此点的垂直分量移动。锚点设置为南。
我提供的是手册中提供的示例。示例是否说明了“此选项”?如何and 3mm
更改节点的位置?
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,shapes,positioning}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\node at (1,1) [above=0.2 and 3mm, draw] {over};
\end{tikzpicture}
\end{document}
有人想提供一个更好的说明性例子吗?
答案1
above right
除非您添加、above left
或below right
、 ,否则该选项不起作用below left
。此外,如果您省略 ,则会得到不同的结果and 3mm
。比较以下内容:
[above right=0.2, draw]
[above right=0.2 and 3mm, draw]
正如引文中所述,锚点设置在节点的南侧。锚点就是被“移动”的物体。当然,形状的其余部分也随之而来。如果您不知道锚点是什么,请查看Tikz-Pgf 手册(第 477 页)。如果您愿意,可以通过添加键anchor=north
或anchor=north west
在选项中设置不同的锚点。
圆圈的工作方式相同,只是锚点设置\node at (1,1) [circle, draw] {over};
在圆圈的中心,而不是南边。如果您将示例更改为 ,您会看到它位于正中央,但如果您添加anchor=south
,它将上移,以便其南边与网格中心匹配。
答案2
我认为需要进一步澄清。首先,为什么没有语法错误。这是因为它节省了很多 if then 语法。查看这些选项的内部代码,采用古老的风格\tikzoption
(相当于\tikzset
)
\tikzoption{above}[]{\def\tikz@anchor{south}\tikz@possibly@transform{y}{}{#1}}
\tikzoption{below}[]{\def\tikz@anchor{north}\tikz@possibly@transform{y}{-}{#1}}
\tikzoption{above left}[]%
{\def\tikz@anchor{south east}%
\tikz@possibly@transform{x}{-}{#1}\tikz@possibly@transform{y}{}{#1}}
现在,您不需要知道它可能进行什么转换等等。但您会注意到,如果您给出上方、下方等等,它会丢弃 x 信息,即使您明确提供 0.2 和 3 毫米。
您还可以看到反向锚定的效果:您选择一个选项,它会选择相反的指南针方向进行锚定。如果您想覆盖它,您必须anchor=<foo>
在选项中添加显式。
通过启用更精细的网格,您可以更好地看到定位
%\usetikzlibrary{positioning}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [circle,above=0.2 and 3mm, draw] {over};
\end{tikzpicture}
并且通过右上方,您可以获得准确的偏移量
%\usetikzlibrary{positioning,shapes.geometric}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [ellipse,above right=0.2 and 3mm, draw] {over};
\fill[red] (1,1) ++(3mm,2mm) circle(0.5pt);
\end{tikzpicture}