嵌套 tikz 节点

嵌套 tikz 节点

我想将 tikz 图(使用 的费曼图tikz-feynman)放入其他 tikz 节点中,但似乎行不通。下面是 MWE。它必须使用 进行编译,lualatex因为我正在使用图表。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs}
\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\tikzset{
  box/.pic={
    \feynmandiagram[inner,horizontal=a to d]{
      a -- [fermion] b -- [fermion] c -- [fermion] d -- [draw=none]
      e -- [fermion] f -- [fermion] g -- [fermion] h -- [draw=none] a,
      b -- [boson] g, c -- [boson] f,
    };
  }
}

\begin{tikzpicture}
  \graph [clockwise=4,radius=5em]{
    % a/{B}, b/{\tikz{\pic {box};}}, c/{C}, d/{f}  %% <-- what I want to do
    a/{B}, b/{box}, c/{C}, d/{f}
  };
  \graph {
    (a) -> {(b), (d)}, {(b), (d)} -> (c)
  };
\end{tikzpicture}

\end{document}

附言:在我浪费了几个小时之后,我还发现tikz-feynman它不适用于文档类!standalone

编辑:感谢@TorbjørnT.,上述问题是由于 造成的standalone,并通过从 开始得到解决\RequirePackage{luatex85}

答案1

嵌套tikzpictures 并不总是可以依赖它起作用,而且嵌套深度为三级。\feynmandiagram以 开头的 是 的缩写tikzpicture,您将第一个 放在第二个 里面,而第二个 又放在第三个 里面。\tikz\begin{tikzpicture} .. \end{tikzpicture}tikzpicture

一个可行的替代方法是使用savebox

请注意,您实际上并不需要\usepackage{tikz} \usetikzlibrary{graphs}同时tikz-feynman加载两者。

代码输出

\RequirePackage{luatex85}
\documentclass{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}
\newsavebox{\foo}
\savebox{\foo}{
\feynmandiagram[horizontal=a to d]{
      a -- [fermion] b -- [fermion] c -- [fermion] d -- [draw=none]
      e -- [fermion] f -- [fermion] g -- [fermion] h -- [draw=none] a,
      b -- [boson] g, c -- [boson] f,
    };}
\begin{document}

\begin{tikzpicture}
  \graph [clockwise=4,radius=10em]{
     a/{B}, b/\usebox{\foo}, c/{C}, d/{f} 
  };
  \graph {
    (a) -> {(b), (d)}, {(b), (d)} -> (c)
  };
\end{tikzpicture}
\end{document}

相关内容