tikzpicture 有一个节点,其文本是一棵树:格式不均匀

tikzpicture 有一个节点,其文本是一棵树:格式不均匀

我想用 tikz 排版类似下面的图片。

在此处输入图片描述

为此,我编写了以下乳胶文档

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{chains}

\begin{document}

\begin{tikzpicture}[
  level distance=10mm,
  op/.style={circle,draw,fill=red!20},
  leaf/.style={circle,fill=blue!20,font=\ttfamily},
  ]
  \node (in) [fill=green!10] {\texttt{1 + 2*3}};
  \node (out) [fill=green!10,right=30mm of in] {
    \tikz{
      \node [op] {$+$}
        child { node [leaf] {1} }
        child { node [op] {$\times$}
          child { node [leaf] {2} }
          child { node [leaf] {3} }};
    }
  };
  \draw[->] (in) -- node [above] {\emph{parsing}} (out);
\end{tikzpicture}

\end{document}

这给了我输出

请注意,在树中,每个节点的左边缘和右边缘并不对称:左边缘比右边缘短。当在节点外部绘制同一棵树时out,它们是对称的。

为什么我会得到这种效果,以及如何解决这个问题?

答案1

反过来说:

\begin{tikzpicture}[
  level distance=10mm,
  op/.style={circle,draw,fill=red!20},
  leaf/.style={circle,fill=blue!20,font=\ttfamily},
  ]
  \node (out) [fill=green!10] {
    \tikz{
      \node [op] {$+$}
        child { node [leaf] {1} }
        child { node [op] {$\times$}
          child { node [leaf] {2} }
          child { node [leaf] {3} }};
    }
  };
  \node (in) [fill=green!10,left=30mm of out] {\texttt{1 + 2*3}};
  \draw[->] (in) -- node [above] {\emph{parsing}} (out);
\end{tikzpicture}

我真的不知道它为什么会起作用。

相关内容