新定义形状的参数

新定义形状的参数

我想使用 在 TikZ 中声明一个新形状\pgfdeclareshape。此形状将由多个部分组成,但通常,在调用形状时,我不希望显示所有部分。如果我可以在调用形状时传递一些参数或选项,并根据传递的\backgroundpath参数以不同的方式绘制形状,那就太理想了。这可能吗?

锚点不依赖于参数,只依赖于绘制背景路径的哪些部分。

答案1

这就是\pgfkeys目的!您可以在\pgfdeclareshape查看各个键的设置并采取相应措施的片段中设置各种选项。

例如,在我的TQFT 封装,我有一些键可以设置传入和传出的边界组件的数量,并据此绘制形状。其他键控制各个部分的样式,并确定哪些部分可以绘制,哪些部分不可以绘制。

为了做您想做的事情,您可以定义一个新的条件键。

\newif\ifdrawnodepieces
\pgfkeys{/tikz/my shape/drawnodepieces/.is if=drawnodepieces}

然后在\pgfdeclareshape代码中你有:

\ifdrawnodepieces
Code if set
\else
Code if not set
\fi

更复杂的事情也是可能的,比如根据设置改变路径的样式。你可以保存一种样式(确保在序言中初始化它):

\node[my shape,my shape/path/.style={fill,draw,red,line width=5cm}] {};

然后在形状中调用它:

\pgfsys@beginscope
  \tikzset{my shape/path}
  \tikz@mode
  \tikz@options
     draw path (using \pgfpath commands)
  \edef\tikz@temp{\noexpand\pgfusepath{%
      \iftikz@mode@fill fill,\fi%
      \iftikz@mode@draw draw\fi%
  }}%
  \tikz@temp
  \pgfsys@endscope

如果您在形状中使用 TikZ 类型的命令(不是推荐),那么您可以直接调用样式:

\path[my shape/path] (0,0) -- (2,0);

甚至可以根据参数改变节点的锚点——我在前面提到的 TQFT 包中这样做了,但我偷了这个想法,即pgflibraryshapes.geometric.code.tex正多边形的边数取决于一个参数,而且因为每条边都获得一个锚点,所以它也必须变化。

相关内容