我正在设计一组自定义 PGF 形状,这些形状几乎总是需要描边,但很少需要填充。我希望用户拥有的体验是
- 如果没有提供其他键,则形状将被描边为黑色且没有填充。
- 如果提供了颜色,则笔触将被着色,如果
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
我建议你定义一个 Ti钾Z 风格
\tikzset{my circle/.style={shape=mycircle, draw}}
调用形状并默认绘制它。因此
node[my circle, fill=red]{...}
它实际上意味着
node[shape=mycircle, draw, fill=red]{...}.
用户随时可以通过以下方式关闭绘图
node[my circle, draw=none]
或者通过了解形状的内部名称。