Создание дерева деревьев в TikZ

Создание дерева деревьев в TikZ

Я хотел бы создать дерево в TikZузлы которых сами являются деревьями.

У меня есть следующий фрагмент кода:

\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-qtree} 

\tikzset{% 
    every picture/.append style={
      grow'=up,
      sibling distance=.5em
    }
}

\begin{document}

\begin{tikzpicture}[baseline=-.3em]
  \node[draw] {
    \begin{tikzpicture}
      \Tree 
      [. $+$ 
      \node[draw]{
      \begin{tikzpicture}
       \Tree
       [. $+$ [. $+$ $a$ $b$ ]
           [. $+$ $c$ $d$ ] ]
      \end{tikzpicture}
      }; 
      \node[draw]{
      \begin{tikzpicture}
       \Tree
       [. $+$ $e$
           $f$ ]
      \end{tikzpicture}
      }; 
      ]
    \end{tikzpicture}
  };
\end{tikzpicture}

\end{document}

Проблема в том, что узлы внешнего дерева соединены неправильно:

введите описание изображения здесь

Я думаю, причина в том, что qtree каким-то образом "все еще видит" внутренние узлы. Есть ли способ позволить TikZ "развидеть" внутренние узлы? Что-то вроде противоположности "запомнить картинку"?

Я всегда могу экспортировать внутренние узлы в отдельный PDF-файл, а затем снова включить его, но я искал более элегантный вариант, если это возможно.

решение1

Вы вкладываете tikzpictures,чего следует избегать. Здесь вы можете хранить внутренние tikzpictures в \saveboxes.

\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-qtree} 

\tikzset{% 
    every picture/.append style={
      grow'=up,
      sibling distance=.5em
    }
}
\newsavebox\TreeA
\newsavebox\TreeB
\begin{document}
\savebox\TreeA{\begin{tikzpicture}
       \Tree
       [. $+$ [. $+$ $a$ $b$ ]
           [. $+$ $c$ $d$ ] ]
      \end{tikzpicture}
}
\savebox\TreeB{\begin{tikzpicture}
       \Tree
       [. $+$ $e$
           $f$ ]
      \end{tikzpicture}
}
\begin{tikzpicture}[baseline=-.3em]
  \node[draw] {
    \begin{tikzpicture}
      \Tree 
      [. $+$ 
      \node[draw]{\usebox\TreeA}; 
      \node[draw]{\usebox\TreeB}; 
      ]
    \end{tikzpicture}
  };
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Связанный контент