我想用 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}
我真的不知道它为什么会起作用。