pgfdeclareshape:以不同的名称从其他形状继承锚点

pgfdeclareshape:以不同的名称从其他形状继承锚点

是否可以用不同的名称继承锚点?像这样:

\pgfdeclareshape{baseshape}     
{     
    \anchor{someanchor}{...}     
}     
     
\pgfdeclareshape{subshape}     
{     
    \inheritanchoras[from=baseshape]{someanchor}{differentanchorname}     
}

用一个虚构的命令inheritanchoras

我对此并不热衷,所以我也很乐意找到不同的解决方案。我有一个形状,作为两个非常相似的形状的基础。这些形状几乎继承了所有内容,但交换了两个锚点(我目前在两个形状中手动定义)。

答案1

当然。定义

\def\pgf@sh@inheritanchoras[from=#1]#2#3{%
  \edef\pgf@marshal{\global\let\expandafter\noexpand\csname
    pgf@anchor@\pgf@sm@shape@name @#3\endcsname=\expandafter\noexpand\csname
    pgf@anchor@#1@#2\endcsname}%
  \pgf@marshal
}

并使用

\pgf@sh@inheritanchoras[from=baseshape]{someanchor}{differentanchorname}

应该differentanchorname在当前的形状声明中使用baseshape的定义someanchor

你当然可以说

\let\inheritanchoras\pgf@sh@inheritanchoras

不必使用@-ridden 内部版本,但除非您\pgfdeclareshape为此打补丁(或定义自己的版本),否则这也会\inheritanchoras在 之外定义\pgfdeclareshape。(其他宏如\inheritanchor仅在 内部有效\pgfdeclareshape。)

相关内容