为何剪辑

为何剪辑

我正在尝试在 TikZ 图片中的箭头上添加淡入淡出,但是当我在垂直箭头上添加淡入淡出时,箭头尖端会部分消失。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
\begin{tikzpicture}
    \draw [->] (0,0) -- (0,1);
    \draw [->, path fading=south] (1,0) -- (1,1);
\end{tikzpicture}
\end{document}

为什么会发生这种情况?还有其他方法可以在箭头上添加淡入淡出效果吗?

答案1

我不知道为什么垂直/近乎垂直的箭头会出现这种情况。一种解决方法是先绘制箭头,如下所示:

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fadings, decorations.markings}
\begin{document}
\begin{tikzpicture}
\draw [->] (0,0) -- (0,1);
\draw[
  decoration={markings,mark=at position 1 with {\arrow{>}}},
  preaction={decorate},
  shorten >=0.4pt, path fading=south,
  ] (1,0) -- (1,1);
\end{tikzpicture}
\end{document}

正常箭和褪色箭

编辑:

我发现,通过在路径的开头插入一个额外的点,淡入淡出的边界框会扩大,而无需绘制任何内容。额外的点可以是起点的重复,在 x 和 y 上都有偏移,这样它既适用于(近)垂直箭头,也适用于(近)水平箭头:

\documentclass[tikz, border=1cm]{standalone}\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
\begin{tikzpicture}
    \draw [->] (0,0) -- (0,1);
    \draw [->, path fading=south] ([xshift=5pt, yshift=5pt]1,0) (1,0) -- (1,1);
\end{tikzpicture}
\end{document}

箭和褪色的箭

答案2

这是一个错误分析,我没有解决方案。我尝试回答以下两个问题:

  • 为什么会有剪辑?
  • 为什么当线垂直/水平时会出现剪辑,但当线不那么无聊

为何剪辑

事实上,这不是剪裁。这是褪色/阴影的自然边界。请参阅后面的解释\pgfshadepath。或者让我总结如下:褪色/阴影本质上是一扇窗户和一块窗帘。通常你会买一块足够大的窗帘来覆盖整个窗户。否则,路过你窗户的人就会看到你房间里面。

但在计算窗帘的必要尺寸时,有一个注意事项。例如,如果您有一个 50bp x 50bp 的窗口,您会认为 50.1bp x 50.1bp 的窗帘绝对足够大。但事实并非如此。因为有些人希望窗帘以 45° 旋转的方式安装。因此,窗帘最终覆盖了一个八边形区域,但留下了四个小角。

窗户与“合适”窗帘之间的关系

因此,软件包作者通过订购超大尺寸的窗帘来智取胜。窗帘经过平移和重新缩放,使窗户位于中心,覆盖 25% 的面积。

放大的窗帘

有时,我们会看到又粗又短的窗户。然后窗帘也沿着适当的轴线缩放

不按比例缩放的窗帘

为什么水平和垂直箭头有问题

实际上,所有箭头都是有问题的,因为箭头尖端不计入边界框。更准确地说,

  • Ti 的默认箭头Z 没有边界框(凸包)。
  • 也就是说,默认的箭头尖端\usetikzlibrary{arrows.meta} 确实有一个边界框(凸包)。
  • 也就是说,箭头的边界框直到输出例程的最后才可用。

你看,箭头是通过命令添加的\pgfusepath ,并且只有在你完成了节点、装饰、双重以及可能的阴影和褪色等所有操作后,才会执行此命令。事实上,魔法节点current path bounding box 从未包含箭头尖。(参见 的定义\pgf@arrow@update@bb。)

因此,当您使用带有箭头的路径淡入淡出时,箭头不一定位于窗口内,尽管它们通常仍被窗帘覆盖,因为存在一些安全余地。

窗户缩小,箭头流血

相关内容