如何重新使用带坐标的 tikzpicture

如何重新使用带坐标的 tikzpicture

我有一个基本的 tikzpicture,我想在其他 tikzpicture 中重复使用,并能够使用其中定义的坐标和路径。

例如,我有一个用于问题中的几何图形,还有一个带标签的相同几何图形用于解决方案。如果我将 tikzpicture 放在 中\newcommand,我可以将其插入另一个 tikzpicture,但坐标会混乱。在简单的情况下,我可以重新定义它们,但对于复杂的图形,我希望能够引用已从另一个 tikzpicture 定义的坐标。

在下面的模板中,第二张图片中的红色节点 A 是根据第一张图片中定义的坐标创建的:我希望它正好位于左下角的蓝色节点 A 的上方。

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

% basic figure to be reused
\newcommand{\basic}{%
  \begin{tikzpicture}[remember picture]% doesn't help

  \coordinate (A) at (0,0);
  \coordinate (B) at (1,1);
  \node [blue,below] at (A) {A};
  \draw [blue] (A) -- (B);

  \end{tikzpicture}
}%


\begin{tabular}{@{}c@{}}

\begin{tikzpicture}

  \node at (0,0) (pic1) {\basic};

\end{tikzpicture}

\vspace{1cm} \\

\begin{tikzpicture}

  \node at (0,0) (pic2) {\basic};

  \node [red,below] at (A) {A};

\end{tikzpicture}

\end{tabular}

\end{document}

在此处输入图片描述

也许我可以自动调整第二张图片中的坐标?或者也许有更好的方法。我尝试使用该remember picture选项,但不太清楚如何使用。

我看见这个问题但 Peter Grill 在他的回答中写道:“我不建议嵌套 tikzpicture 环境。”所以我想知道有什么更好的解决方案。还有那个问题scope,但当我尝试将 a与 a 一起使用时yshift,坐标也发生了偏移。还是我遗漏了什么?

答案1

\newcommand您可以使用来代替pic。这就是pic的用途,重用 的一部分tikzpictures

如果pic有名称,则可以通过结合 pic 的名称和节点的名称来引用所有内部节点。这里有一个例子:

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\tikzset{
%basic figure to be reused
    myfig/.pic={
  \coordinate (A) at (0,0);
  \coordinate (B) at (1,1);
  \node [blue,below] at (A) {A};
  \draw [blue] (A) -- (B);
    }
}

\begin{document}

\begin{tabular}{@{}c@{}}

\begin{tikzpicture}

  \pic {myfig};

\end{tikzpicture}

\vspace{1cm} \\

\begin{tikzpicture}

  \pic (original) {myfig};

  \node [red,below] at (originalA) {A};

\end{tikzpicture}

\end{tabular}

\end{document}

在此处输入图片描述

答案2

新的scontents这个包完全满足了你的要求,因为它允许你重复使用内容。在我看来,它相当慢,但到目前为止,这是唯一的警告

%Standalone for illustrative purposes
\documentclass{standalone}
\usepackage[store-cmd=tikz]{scontents}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
%Called with \getstored[1]{tikz}
\Scontents*{\coordinate (A) at (0,0);
    \coordinate (B) at (1,1);
    \node [blue,below] at (A) {A};
    \draw [blue] (A) -- (B);}
%If you need more content, use
%\Scontents*{mycontent...}
\begin{document}
\begin{tabular}{c}
\begin{tikzpicture}
\getstored[1]{tikz}
\end{tikzpicture}
\\
\begin{tikzpicture}
\getstored[1]{tikz}
\node [red,below] at (A) {A};
\end{tikzpicture}
\end{tabular}
\end{document}

在此处输入图片描述

相关内容