在 TikZ 中,是否可以剪掉一条线?我想在箭头周围创建一个薄层,其中不应绘制任何内容(即保留绘制箭头时的内容),以营造箭头位于之后绘制的所有形状之上的感觉。我已经意识到,为了获得我想要的效果,我需要剪掉一个看起来像箭头但稍微粗一点的区域。我该如何实现呢?
答案1
尝试这样的操作:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{invclip/.style={clip,insert path={{[reset cm]
(-16383.99999pt,-16383.99999pt) rectangle (16383.99999pt,16383.99999pt)
}}}}
\begin{document}
\begin{tikzpicture}
\filldraw[green](1,0)circle(3);
\filldraw[red](1,-0.5)rectangle(2,2);
\coordinate(A) at (0,0);
\draw[->,line width=2pt](A)-+(50:3)coordinate(B);
\begin{pgfinterruptboundingbox}
\path[invclip]($(A)+(-40:0.1)$)--($(B)+(-40:0.1)$)--($(B)+(-40:-0.1)$)--($(A)+(-40:-0.1)$)--cycle;
\end{pgfinterruptboundingbox}
\filldraw[blue](0,0)rectangle(1,1);
\end{tikzpicture}
\end{document}
我使用了这里的负面剪辑:如何在 TikZ 中反转“剪辑”选择?
你需要做什么:
定义一个宏来自动执行这一部分:
\draw[->,line width=2pt](A)-+(50:3)coordinate(B);
\begin{pgfinterruptboundingbox}
\path[invclip]($(A)+(-40:0.1)$)--($(B)+(-40:0.1)$)--($(B)+(-40:-0.1)$)--($(A)+(-40:-0.1)$)--cycle;
\end{pgfinterruptboundingbox}
确切的实施取决于您定义坐标的方式。
这是一个(不太复杂的)例子:
\newcommand{\clipVect}[4]{
\draw[->,line width=#4](#1)-+(#2:#3)coordinate(B);
\begin{pgfinterruptboundingbox}
\path[invclip]($(#1)+(#2-90:#4pt)$)--($(B)+(#2-90:#4pt)$)--($(B)+(#2+90:#4pt)$)--($(A)+(#2+90:#4pt)$)--cycle;
\end{pgfinterruptboundingbox}}
\clipVect{A}{50}{3}{2}
第一个参数是矢量的起点,第二个参数是方向(以度为单位),第三个参数是长度,第四个参数是线宽。
[另外,目前剪辑有点损坏(它剪辑掉了不在第一象限的所有内容 - 我猜这可以修复,但目前我还没有时间自己动手。] 忽略这个 - 我认为我已经修复了它(通过复制之前链接的问题中的另一个答案)。