我可以反转剪辑区域(如这问题)并使用节点形状进行剪辑(如在这其中一个),但我想将两者结合起来,但我不知道该怎么做。以下两个程序各自完成了我想要的一半。
首先,使用围绕文本节点手动绘制的矩形进行反向剪辑:
\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[even odd rule]
\draw node (a) {000};
\clip[overlay]
(current page.south west) rectangle (current page.north east)
(a.south west) rectangle (a.north east)
;
\fill[overlay, opacity=.2]
(current page.south west) rectangle (current page.north east)
;
\end{tikzpicture}
\end{document}
这给了我:
然后,使用圆角矩形节点的实际路径进行裁剪:
\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[even odd rule]
\pgfnode{rounded rectangle}{center}{000}{a}{\pgfusepath{clip}}
\fill[overlay, opacity=.2]
(current page.south west) rectangle (current page.north east)
;
\end{tikzpicture}
\end{tikzpicture}
\end{document}
这给了我:
我想要的是后者的形状,但具有前者的反向剪切行为。由于节点路径似乎被封装得相当封闭和孤立,我不确定如何将其与其他东西结合起来进行奇偶剪切。我也尝试过自己使用 PGF 代码重建圆角矩形绘图,但这看起来需要做相当多的工作(很可能是不必要的)。
有小费吗?
答案1
\documentclass[tikz,border=3pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,shadings}
\begin{document}
\tikzset{
clip even odd rule/.code={\pgfseteorule}, % Credit to Andrew Stacey
invclip/.style={
clip,insert path=
[clip even odd rule]{
[reset cm](-\maxdimen,-\maxdimen)rectangle(\maxdimen,\maxdimen)
}
}
}
\begin{tikzpicture}[even odd rule]
\fill[shading=color wheel white center]circle(1);
\node[rounded rectangle](a){000};
\begin{pgfinterruptboundingbox}
\csname pgf@sh@ma@a\endcsname
\roundedrectanglepoints
\clip[invclip](a.south west)arc(270:90:\radius+\outerysep)--(a.north east)arc(90:-90:\radius+\outerysep)--cycle;
\end{pgfinterruptboundingbox}
\draw(rand,rand)foreach\i in{0,...,99}{--(rand,rand)};
\end{tikzpicture}
\end{document}