如何在 tikz 中取消填充已填充区域内的区域

如何在 tikz 中取消填充已填充区域内的区域

我进行了一些搜索并尝试了不同的方法,但我无法填充内圆区域,或者只能填充两个圆之间的区域。

以下是 MWE:

\documentclass[12pt]{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[step=1cm, gray, very thin] (-3.5,-2.5) grid (3.5,2.5);
\draw (0,0) circle (2cm);
\path[fill=gray, opacity=0.2] (0,0) circle (2cm);
\draw[dashed] (0,0) circle (1cm);
\end{tikzpicture}

\end{document}

它的情节如下: 在此处输入图片描述

编辑:

我在这里找到了答案:填充两个圆圈之间的区域仍然想知道是否有可能取消填充先前已填充的区域。

感谢您的时间。

答案1

我认为您只是在寻找even odd rule

\documentclass[12pt]{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[step=1cm, gray, very thin] (-3.5,-2.5) grid (3.5,2.5);
\draw (0,0) circle (2cm);
\path[fill=gray, opacity=0.2,even odd rule] (0,0) circle (2cm) circle (1cm);
\draw[dashed] (0,0) circle (1cm);
\end{tikzpicture}

\end{document}

在此处输入图片描述

在我看来,最接近“取消填充”的做法是将所有填充都放在背景层上。然后,效果可能(也可能不是,取决于你问谁;-)被描述为“取消填充”。

\documentclass[margin=3.14mm, tikz]{standalone}
\usetikzlibrary{backgrounds}
\begin{document}
\foreach \X in {0,1}
{\begin{tikzpicture}
\draw[step=1cm, gray, very thin] (-3.5,-2.5) grid (3.5,2.5);
\draw (0,0) circle (2cm);
\ifnum\X=0
\node[anchor=south,font=\sffamily] at (0,2) {fill};
\else
\node[anchor=south,font=\sffamily] at (0,2) {``unfill''};
\fi
\begin{scope}[on background layer]
\path[fill=gray, opacity=0.2] (0,0) circle (2cm) circle (1cm);
\ifnum\X=0
\draw[dashed] (0,0) circle (1cm);
\else
\draw[dashed,fill=white] (0,0) circle (1cm);
\fi
\end{scope}
\end{tikzpicture}}
\end{document}

在此处输入图片描述

相关内容