将两张 TikZ 图片合并为一张

将两张 TikZ 图片合并为一张

是否可以将两个现有的 TikZ 图片合并为一个?我有两张这种类型的图片,想在一个tikzpicture环境中将它们放在彼此下方(并在两张图片之间添加一些箭头),而无需编辑所有坐标:

  \begin{tikzpicture}[domain=0:2.1, smooth, scale=0.8]
  \draw[->] (0,0) -- (4.2,0);
  \draw[->] (0,0) -- (0,3.2);
  \draw[] (1,0) -- (1,-0.15) node[below] {$\alpha_0$};
  \draw[color=red,thick,samples=500] plot (\x,{3*exp(-5*(\x-1)^2});
  \draw[color=blue,dashed,thick,samples=500] plot (\x,{3*exp(-5*(\x-1)^2});
  \end{tikzpicture}

有没有简单的方法可以做到这一点?

答案1

您只需将两张 TikZ 图片放在另一张 TikZ 图片的节点内,即可将它们合并为一张。只要您不必担心编译时间,就可以编写类似下面的代码。
它还有助于处理中间的箭头。

\documentclass{article}

\usepackage{tikz}
\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}

    \begin{tikzpicture}
       \node (a) at (0,0)
         {
            \begin{tikzpicture}
               \draw (0,0) circle (1cm);
            \end{tikzpicture}
         };
        \node (b) at (a.south) [anchor=north,yshift=-1cm]
         {
            \tikz\fill[blue] (0,0) circle (0.7cm);
         };
       \draw [<->] (a)--(b);
    \end{tikzpicture}

\end{document}

示例代码的结果

答案2

要移动图片的一部分,可以使用{scope}和以下移动选项之一:

  • shift=<coordinate>{}(当参数包含逗号时,必须用括号括起来,
  • xshift=<distance>
  • yshift=<distance>

在下面的例子中,我将使用shift一个预定义坐标(shift)(名称无关紧要),以便以后轻松访问移位。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  % Shifting coordinate (optional)
  \coordinate (shift) at (0,-3);
  % First image, without a scope
  \draw (0,0) circle (1);
  \fill (2,-1) rectangle ++(4,2);
  %% named node
  \node (A 1) at (8,0) {Node 1};
  %% named coordinate
  \coordinate (C 1) at (10,0);
  \begin{scope}[shift=(shift)]
    \draw (8,0) circle (1);
    \fill (2,-1) rectangle ++(4,2);
    \node (A 2) at (0,0) {Node 2};
    \coordinate (C 2) at (10,0);
  \end{scope}
  % Connection line
  %% A) use named coordinates nodes
  \draw [red,->] (A 1) -- (A 2);
  %% B) use named coordinates
  \draw [blue, ->] (C 2) -- (C 1);
  %% C) use calculation with (shift)
  \draw [green, ->] (0,0) -- ($(8,0)+(shift)$);
  %% D) shift a single coordinate
  \draw [orange, ->] (2,-1) -- ([shift=(shift)] 4,1);
\end{tikzpicture}
\end{document}

生成的图像

要访问两个坐标系,我更喜欢使用命名节点或坐标,它们基本上是相同的(示例中的红色和蓝色箭头)。但也可以使用库calc并通过使用(绿色箭头)手动添加移位($<coord>+(shift)$)。正如 Qrrbrbirlbel 所说,也可以将该shift选项应用于单个坐标(橙色箭头)。

相关内容