TikZ:用图片剪辑吗?

TikZ:用图片剪辑吗?

标题确实解释了一切,我想使用我已经定义的现有 .pic 来剪辑图片,因为我计划多次使用这个剪辑形状。

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\makeatletter
\tikzset{%
         clipshape/.pic={\clip (-1,-1) rectangle (1, 1);} %just a rectangle here, but typically a more complex shape.
}%
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{scope}
    \pic {clipshape};
    \fill (0,0) circle (1.1);
\end{scope}
\end{tikzpicture}
\end{document}

显然,这样做的最终结果将是一个侧面被部分切断的黑色圆圈。MWE 确实编译了,但没有出现剪辑。我使用图片的方式正确吗?还是我必须做一些更复杂的事情?

答案1

这里有两个例子:一个使用path picture,另一个使用标准clip

\documentclass[border=7pt]{standalone}
\usepackage{tikz}

\tikzset{
  clipshape 1/.pic={\path[path picture={#1}] (-1,-1) rectangle (1, 1);},
  clipshape 2/.pic={\clip (-1,-1) rectangle (1, 1);#1}
}

\begin{document}
  \begin{tikzpicture}
      \pic at (0,0) {clipshape 1={\fill[green] (0,0) circle (1.1);}};
      \pic at (3,0) {clipshape 2={\fill[red] (0,0) circle (1.1);}};
  \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

一个简单的宏定义就可以了:

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\newcommand*{\clipshape}{
  (-1, -1) rectangle (1, 1)
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
    \clip \clipshape;
    \fill (0,0) circle (1.1);
\end{scope}
\end{tikzpicture}
\end{document}

结果

然后可以重复使用该宏,并将其与其他路径元素组合等等。

相关内容