重命名预定义形状中的锚点

重命名预定义形状中的锚点

我正在使用 TikZ 绘制几十张将使用等边三角形的图表。我当前的设置是使用正多边形构造。锚点名称角 1、角 2 和角 3 对我来说不是很语义化,所以我想进行全局声明,为它们提供新名称。这是我目前声明三角形节点的方式:

\tikzset{
delta/.style={
regular polygon, regular polygon sides=3, minimum size=0.4cm, inner sep=0,
outer sep=0.025em, draw=black, very thick, fill=green!10}
}

我知道这(node.210)会给我与 相同的锚点位置(node.corner 2),但我希望能够执行类似以下操作:(node.left copy)给出相同的锚点位置,以及或 的(node.right copy)位置。 从手册中,似乎我应该能够执行类似以下操作:如果 \corner2 是该已保存锚点的名称,但我不知道该代码适合我所拥有的代码的哪个位置,而且我不知道 \corner2 是否是正确的名称。 以下代码是可用的,但自定义锚点名称将使跟踪更复杂图表中发生的事情变得更容易。(node.corner 3)(node.330)
\anchor{left copy}{\corner2}

\begin{tikzpicture}[-, thick]
\node[delta] (dub) {};
\node (copy1) [below left of=dub] {};
\node (copy2) [below right of=dub] {};
\node (input) [above of=dub] {};
\draw (input) -- (dub) (dub.corner 2) -- (copy1);
\draw (dub.corner 3) -- (copy2);
\end{tikzpicture}

到目前为止,我发现的最佳解决方法是在样式定义中旋转边框,shape border rotate=120这会将每个使用的角数字降低 1。即使我最终在这里使用了这个技巧,旋转也不是万能的;我仍然想知道如何为预定义形状中的锚点创建新的别名。

对另一个问题的评论(在 TikZ 绘图中创建伪锚点) 表示\pgfdeclaregenericanchor是一个未记录的宏,可用于访问预定义形状的已保存锚点,但这就是我遇到死胡同的地方。

答案1

命令\pgfdeclareanchoralias{<shape>}{<anchor>}{<alias>}定义为

\newcommand*\pgfdeclareanchoralias[3]{%
    \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname
            \expandafter{\csname pgf@anchor@#1@#2\endcsname}}

可以用来复制新名称下形状<anchor>锚点的定义,因此在你的情况下<shape><alias>

\pgfdeclareanchoralias{regular polygon}{corner 2}{left copy}
\pgfdeclareanchoralias{regular polygon}{corner 3}{right copy}

应该做。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric, positioning}
\newcommand*\pgfdeclareanchoralias[3]{%
    \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname
            \expandafter{\csname pgf@anchor@#1@#2\endcsname}}

\pgfdeclareanchoralias{regular polygon}{corner 2}{left copy}
\pgfdeclareanchoralias{regular polygon}{corner 3}{right copy}
\tikzset{
  delta/.style={
    regular polygon, regular polygon sides=3, minimum size=0.4cm, inner sep=0,
    outer sep=0.025em, draw=black, very thick, fill=green!10}
  }
\begin{document}
\begin{tikzpicture}[thick, node distance=.25cm]
\node[delta] (dub) {};
\coordinate [ below left=of dub.left copy]  (copy1);
\coordinate [below right=of dub.right copy] (copy2);
\coordinate [      above=of dub]            (input);
\path (input)          edge (dub)
      (dub.left copy)  edge (copy1)
      (dub.right copy) edge (copy2);
\end{tikzpicture}
\end{document}

相关内容