通过两次测量定位节点

通过两次测量定位节点

以下引文可在 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 leftbelow right、 ,否则该选项不起作用below left。此外,如果您省略 ,则会得到不同的结果and 3mm。比较以下内容:

  • [above right=0.2, draw]

    在此处输入图片描述

  • [above right=0.2 and 3mm, draw]

    在此处输入图片描述

正如引文中所述,锚点设置在节点的南侧。锚点就是被“移动”的物体。当然,形状的其余部分也随之而来。如果您不知道锚点是什么,请查看Tikz-Pgf 手册(第 477 页)。如果您愿意,可以通过添加键anchor=northanchor=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}

在此处输入图片描述

相关内容