填充

填充

以下 MWE 显示了所需的输出,但问题是,是否(以及如何)可以通过以某种方式重新定义线 (1) 和 (2) 来“切出”内部正方形,从而使线 (3) 变得多余,从而实现相同的结果。我知道这幅图很简单,但人们很容易想象出更复杂的情况。

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw (-1,-1)--++(4,4);
\draw[fill=white] (0,0)--++(2,0)--++(0,2)--++(-2,0)--++(0,-2); % (1)
\draw (0.5,0.5)--++(1,0)--++(0,1)--++(-1,0)--++(0,-1); % (2)
\draw (0.5,0.5)--++(1,1); % (3)
\end{tikzpicture}

\end{document}

答案1

填充

如果您确实想填充外部矩形但不填充内部矩形,则可以使用even odd rule(PGF 手册,第 163f 页)。

代码

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[even odd rule]
\draw (-1,-1) -- ++ (4,4);
\draw[fill=white] (0,0) rectangle ++ (2,2) (.5,.5) rectangle ++ (1,1);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

剪裁

另一种方法是剪辑,但由于您想要将线“反向剪辑”到框中,因此您将需要经过调整的剪辑版本。

在这个小例子中,下面的代码就足够了,但如果您想绘制更多或更复杂的图片,您将需要reverseclip参考答案中的样式和/或scope

参考

代码

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[even odd rule]
\draw (0,0) rectangle (2,2) (1.5,1.5) rectangle (.5,.5);
\begin{pgfinterruptboundingbox}
\clip (0,0) rectangle (2,2) (1.5,1.5) rectangle (.5,.5) (3.1,3.1) rectangle (-1.1,-1.1);
\end{pgfinterruptboundingbox}
\draw (-1,-1)--++(4,4);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容