我正在使用 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}