![如何使用“奇偶规则”来切出范围](https://linux22.com/image/324589/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E2%80%9C%E5%A5%87%E5%81%B6%E8%A7%84%E5%88%99%E2%80%9D%E6%9D%A5%E5%88%87%E5%87%BA%E8%8C%83%E5%9B%B4.png)
我有一个预定义的几何图形 \big_area,想从中剪切出另一个预定义的部分 \cut_this_out 来填充它。我想从中剪切出整个“范围”,而不是形状的明确定义。
\def \cutout {(0,0) --++ (3.5,0) --++ (0,7) --++ (-3.5,0) --++(0,-7)}
\def \mycircle {(0,0) circle (10)}
\begin{tikzpicture}
%This works
\fill[even odd rule] \mycircle \cutout;
%This doesn't work
%\fill[even odd rule] \mycircle \begin{scope}[xshift=1cm] \cutout \end{scope};
\end{tikzpicture}
我该怎么做呢?
答案1
scopes
带图书馆的一个选项
%\usetikzlibrary{scopes} %<---- Somewhere in the preamble
\begin{tikzpicture}
\def\big_area{(0,0) circle (3)}
\def\cut_this_out{(0,0) circle (1)}
%\draw[fill, even odd rule] \big_area \cut_this_out;
\draw[fill, even odd rule] \big_area {[shift={(3cm,2cm)}]\cut_this_out};
\end{tikzpicture}
为了您自己的理智,请不要在 TeX 宏名称中使用下划线。
答案2
为什么你不能这样做?也就是说,你为什么需要范围?对于你给出的例子来说,它肯定不是必需的。
\documentclass[tikz,border=10pt,multi]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[fill, even odd rule] (0,0) circle (3) [shift={(1cm,1cm)}](0,0) circle (1);
\end{tikzpicture}
\def \cutout {(0,0) --++ (3.5,0) --++ (0,7) --++ (-3.5,0) --++(0,-7)}
\def \mycircle {(0,0) circle (10)}
\begin{tikzpicture}
\fill[even odd rule] \mycircle [xshift=1cm]\cutout;
\end{tikzpicture}
\end{document}