使用 TikZ 3.0 为标准 TikZ 节点添加另一层指南针锚点

使用 TikZ 3.0 为标准 TikZ 节点添加另一层指南针锚点

我是 StackExchange 的新手,无法在评论中寻求澄清,所以我不得不为此提出一个新问题。我很想知道使用 TikZ 3.0 向标准 TikZ 节点添加更多锚点作品。

答案提供了向西添加额外罗盘锚点的代码(北西北、西北西、西南西、南西南)。我能够在东侧添加等效锚点。现在我想在罗盘上添加另一层锚点(例如在北西北和西、北西北和西北之间,或西北和西北之间)。

不幸的是,我不明白原始问题所接受的答案中的代码是如何工作的,而且我找不到解释,所以我发现自己无法推断出获得另一级指南针锚所需的正确代码。

答案1

从下到上,

  • \pgf@x\pgf@y是 内部使用的维度寄存器pgf
  • \pgf@xa和是供开发人员/用户临时存储尺寸的\pgf@ya维度寄存器。pgf
  • \pgf@process{<code>}<code>在一定范围内执行\begingroup ... \endgroup,然后全局更新\pgf@x\pgf@y的值。因此通常会为和<code>分配新值,并在本地保留任何其他更改。\pgf@x\pgf@y
  • \anchor{<name>}{<code>}\pgf@x在位置和处定义一个新的节点锚点\pgf@y,其中\pgf@x\pgf@y由设置<code>

上述每个命令/寄存器均记录在 中pgfmanual

使用命令/寄存器的介绍,让我们了解north north west其工作原理。

  \anchor{north north west}{%
    \pgf@process{\southwest}%  % \pgf@x = x_sw, \pgf@y = y_sw
    \pgf@xa=1.5\pgf@x%         % \pgf@x = x_sw, \pgf@y = y_sw, \pgf@xa = 1.5x_sw
    \pgf@process{\northeast}%  % \pgf@x = x_ne, \pgf@y = y_ne, \pgf@xa = 1.5x_sw
    \[email protected]\pgf@x%            % \pgf@x = .5x_ne, \pgf@y = y_ne, \pgf@xa = 1.5x_sw
    \advance\pgf@x by \pgf@xa% % \pgf@x = .5x_ne+1.5x_sw, \pgf@y = y_ne, \pgf@xa = 1.5x_sw
    \pgf@x=.5\pgf@x%           % \pgf@x = .25x_ne+.75x_sw, \pgf@y = y_ne, \pgf@xa = 1.5x_sw
  }%                           % return \pgf@x, \pgf@y

因此基本上north north west分配

x = 1/4 * x_ne + 3/4 * x_sw
y =       y_ne

位于中点的新锚点north westnorth north west具有坐标

x = 1/8 * x_ne + 7/8 * x_sw
y =       y_ne

因此可以定义为

  \anchor{1 north 7/8 west}{%
    \pgf@process{\southwest}%
    \pgf@xa=3.5\pgf@x%
    \pgf@process{\northeast}%
    \[email protected]\pgf@x%
    \advance\pgf@x by \pgf@xa%
    \pgf@x=.25\pgf@x%
  }%

或者,您可以使用坐标计算来模拟这些锚点:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}[nodes={circle, draw, inner sep=2pt, fill}]
  \draw[local bounding box=a] (0, 0) rectangle (5, 3);

  \draw
    node at (a.north) {}
    node at (a.north west) {}
    node[blue] at ($(a.north west)!0.5!(a.north)$) {}
    node[red]  at ($(a.north west)!0.25!(a.north)$) {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容