我是 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 west
将north 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}