我有一个基本的 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}