在 tikzpicture 中将两个图形相互定位

在 tikzpicture 中将两个图形相互定位

我在同一个 tikzpicture 中有两个图表,我希望将第二个图表放置在第一个图表的右侧,但目前它们完全重叠。我尝试将它们放在相同的路径上,并在每个图表前使用 move-to 命令,但这似乎没有效果。

\documentclass{standalone}
\usepackage{tikz}                   
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\begin{tikzpicture}
    \path (-1, 0) graph[circular placement, radius=4cm,
           empty nodes, nodes={circle,draw}] {
        { subgraph I_n [V={a,b,c,d,e,f}] };
        e -- b -- d -- c -- a -- f;
        a -- e;
    } (1, 0) graph[circular placement, radius=4cm,
           empty nodes, nodes={circle,draw}] {
        { subgraph I_n [V={a,b,c,d,e,f}] };
        e -- b -- d -- c -- a -- f;
        a -- e;
        { [edges=dashed]
            a -- b -- c -- e -- f;
            d -- e;
            b -- f;
            d -- f;
        }
    };
\end{tikzpicture}
\end{document}

答案1

使用转移范围。

\documentclass{standalone}
\usepackage{tikz}                   
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\begin{tikzpicture}
  \begin{scope}[shift={(-1,0)}]
    \graph[circular placement, radius=4cm,
           empty nodes, nodes={circle,draw}] {
        { subgraph I_n [V={a,b,c,d,e,f}] };
        e -- b -- d -- c -- a -- f;
        a -- e;
    };
  \end{scope}
  \begin{scope}[shift={(1,0)}]
    \graph[circular placement, radius=4cm,
           empty nodes, nodes={circle,draw}] {
        { subgraph I_n [V={a,b,c,d,e,f}] };
        e -- b -- d -- c -- a -- f;
        a -- e;
        { [edges=dashed]
            a -- b -- c -- e -- f;
            d -- e;
            b -- f;
            d -- f;
        }
    };
  \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

遗憾的是,虽然pgfmanualsays graphpath 命令可以在路径的任何位置使用,但目前图的第一个节点链中的第一个节点总是(不确定)位于(0,0)

为了构建图形,您应该使用graph路径命令,该命令可以在路径上的任何地方使用,您也可以在任何地方使用诸如plot或 之类的命令--

pgfmanual v3.1.9a,第 19.3.1 节”图表命令

由于<options>ingraph[<options>]是在额外的范围内执行的,你可以

  • 用于graph[/tikz/shift={<coordinate>}, ...]手动移动图形
  • 或者定义一个新的图形选项来自动移动到路径上看到的最后一个坐标:
    \tikzgraphsset{
      auto shift/.style={
        /tikz/xshift=\tikz@lastx,
        /tikz/yshift=\tikz@lasty
      }
    }
    
    人们甚至可以附加auto shift风格/tikz/graphs/every graph来让生活更加轻松。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}

\makeatletter
\tikzgraphsset{
  auto shift/.style={
    /tikz/xshift=\tikz@lastx,
    /tikz/yshift=\tikz@lasty
  }
}
\makeatother

\begin{document}
Default, graph starts from the origin.\\
\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);
  \path (1,1) graph {a -> b -> c};
\end{tikzpicture}

Using \verb|/tikz/shift={(1,1)}|\\
\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);
  \path (1,1) graph[/tikz/shift={(1,1)}] {a -> b -> c};
\end{tikzpicture}

Using newly defined option \verb|auto shift|\\
\begin{tikzpicture}
  \draw[help lines] (0,0) grid (3,2);
  \path (1,1) graph[auto shift] {a -> b -> c};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容