自定义 pgf 形状:如何始终进行填充,有时进行填充?

自定义 pgf 形状:如何始终进行填充,有时进行填充?

我正在设计一组自定义 PGF 形状,这些形状几乎总是需要描边,但很少需要填充。我希望用户拥有的体验是

  1. 如果没有提供其他键,则形状将被描边为黑色且没有填充。
  2. 如果提供了颜色,则笔触将被着色,如果fill=color提供了,则形状将被填充。

此行为几乎是通过以下 MWE 实现的:

\documentclass[border=2mm, tikz]{standalone}

\pgfdeclareshape{my circle}{
    \anchor{center}{\pgfpointorigin}
    \backgroundpath{
        \pgfpathcircle{\pgfpointorigin}{3mm}
    }
}

\begin{document}
    \begin{tikzpicture}
        \node[my circle, draw] at (0,0) {};
        \node[my circle, draw, red] at (1,0) {};
        \node[my circle, draw, red, fill=yellow] at (2,0) {};
        \node at (4,0) {\small unboxed text};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

这样生成的图像完全符合要求;不理想的部分是draw每次都必须提供my circle每次绘制时都至少抚摸(但并不总是填充)。

有没有办法修改此代码,以便生成相同的图片,但draw可以从my circle节点中省略(IE,形状始终是描边的,如果需要,也可以着色/填充)?我尝试了形状声明中的\pgfpathuse{stroke}和的变体\pgfpathuse{fill, stroke},但无法获得正确的行为。我更愿意继续在节点中使用形状,因为这对于包的其他方面(如锚定和放置)很方便。

答案1

我建议你定义一个 TiZ 风格

\tikzset{my circle/.style={shape=mycircle, draw}}

调用形状并默认绘制它。因此

node[my circle, fill=red]{...}

它实际上意味着

node[shape=mycircle, draw, fill=red]{...}.

用户随时可以通过以下方式关闭绘图

node[my circle, draw=none]

或者通过了解形状的内部名称。

相关内容