TikZ:定义和重用复杂对象?

TikZ:定义和重用复杂对象?

(如何)是否可以保存一些复杂的TikZ对象以便重复使用它们(在同一张图片和不同的图片中)?

我知道可以定义自己的样式,但我不确定这是否是我想要的(样式似乎仅适用于属性,而不适用于复杂和完成的对象)。并且可以使用 保存整个图像savebox,但它可以用于保存图片的部分吗?

让我们举个例子:某人正在构建几个光学实验。所有实验都使用相同类型的元件,如镜子、激光器、偏振器、分束器等,但每个实验的配置和设置都不同。每个元件都有自己的图片(就像在电路中,每种类型的元件都有自己的“图标”一样)。

我如何以及在何处定义我的“元素种类”以便能够在我的大量 TikZ 图片中重复使用它们?

最后,我希望能够画出类似(不一定完全一样)的图片,例如

\begin{tikzpicture}
  \mirror at (0,0);
  \laser at (1,0);
  \draw (1,0) --(0,0) --(0,1);
\end{tikzpicture}

答案1

解决此问题的一种方法是按照 PGF/TikZ 手册第 107.5 节“声明新形状”中的说明定义自己的节点形状,然后将其定义\mirror\node [shape=mirror](该shape=部分是可选的,但我建议在此处使用)。但是,不幸的是,您需要使用 PGF 而不是 TikZ 命令来定义节点形状,这使得创建它们变得困难,并且不允许您简单地将现有的 TikZ 图片转换为节点形状。

答案2

最简单的方法可能就是简单地定义\mirror为一个命令。

\def\mirror at (#1,#2){\draw (#1,#2) rectangle ++(2,2);}
\begin{tikzpicture}
\mirror at (1,2)
\mirror at (2,4)
\end{tikzpicture}

不过与 TikZ 命令不同,您必须小心空格的数量。如果您简单地定义 ,可能会更容易记住\def\mirror(#1,#2){...,但这取决于您。

使用较新版本(CVS)的 TikZ,您可以选择使用 pic 环境来实现此目的。

\begin{tikzpicture}[mirror/.pic={\draw (0,0) rectangle ++(2,2);}]
\draw (1,2) pic {mirror};
\path (2,4) pic {mirror} ++ (2,2) node {Yes, it is flexible} -- (1,2) pic {mirror};
\end{tikzpicture}

相关内容