在 tikz 中调用先前命名的路径

在 tikz 中调用先前命名的路径

使用该intersections库,我们可以命名路径。例如

\path[name path=line1] (0,0) -- (1,1);

现在,我稍后如何在图片中调用该路径并line1对其进行命名和操作——例如绘图、标记等?

PS. 我确实查看了一些其他看似相关的问题的答案(例如路径的部分绘制等),但未能找到答案。

答案1

更新 2022-07-12:spath3库现在包含大量用于保存、操作和使用路径的功能,因此取代了这个答案。有关详细信息,请参阅文档。


如果你想通过重用路径来做一些严肃的事情,那么你可能需要看spath一下特克斯包。如果您只是想要一种快速的方法来(本质上)复制先前定义的路径,那么以下代码将起作用(尽管我还没有对其进行详细测试)。关键是当您将密钥放在name path路径上时,TikZ 确实会保存该路径。因此,所需要做的就是在正确的时间将其偷偷放回去。事实证明,主路径与操作前或操作后路径之间存在差异,但这并不难处理。

这是代码。intersections库提供了name path密钥,该decorations.markings库仅用于演示目的。

\documentclass[border=1cm]{standalone}
% \url{http://tex.stackexchange.com/q/26382/86}
\usepackage{tikz}
\usetikzlibrary{intersections,decorations.markings}

\makeatletter
\tikzset{
  use path for main/.code={%
    \tikz@addmode{%
      \expandafter\pgfsyssoftpath@setcurrentpath\csname tikz@intersect@path@name@#1\endcsname
    }%
  },
  use path for actions/.code={%
    \expandafter\def\expandafter\tikz@preactions\expandafter{\tikz@preactions\expandafter\let\expandafter\tikz@actions@path\csname tikz@intersect@path@name@#1\endcsname}%
  },
  use path/.style={%
    use path for main=#1,
    use path for actions=#1,
  }
}
\makeatother

\begin{document}
\begin{tikzpicture}
\draw[ultra thick,name path=mypath] (0,0) circle[radius=1cm];
\fill[blue,use path=mypath] (0,0) rectangle (1,1);
\draw[use path=mypath,postaction={decorate},decoration={markings,mark=at position .5 with {\arrow[orange,line width=5pt]{>};}}] (3,3) -- (4,4);
\end{tikzpicture}
\end{document}

结果如下:

在 TikZ 中使用路径

因此,后两个命令中的矩形和线均未使用。值得指出的是,虽然它们没有用过的,它们的大小用于计算 TikZ 图片的大小。这就是圆圈顶部和右侧有大空间的原因。因此,请谨慎选择要丢弃的路径(或找出更好的位置进行路径交换!)。

相关内容