是否可以用 LaTeX 创建这棵树?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}
\node {E}
child { node {F} }
child { node {+}}
child { node {T}
child { node {T}
child{node{F}
child{node{8}} }}
child { node {*} }
child { node {F}
child{node{2}}}};
\end{tikzpicture}
\end{document}
我设法创建了树,但缺少属性,例如{Fv: = 2}
答案1
将 Gonzalo 的答案改编为该tikz-qtree
包,我们可以获得类似的结果。请注意,严格来说,您不需要将\node
s 分配给您未使用其他 TikZ 命令引用的节点。
\documentclass{article}
\usepackage{tikz-qtree}
\usepackage{mathtools}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\Tree [.\node(a) {E};
[.\node (b) {F}; ]
[.\node (c) {+}; ]
[.\node (d) {T};
[.\node (e) {T};
[.\node (f) {F}; [.\node (g) {8}; ]]]
[.\node (h) {*}; ]
[.\node (i) {F};
[.\node (j) {2}; ]
]
]
]
\begin{scope}[every node/.style={font=\footnotesize}]
\node[right=of a] (na) {\{E.v${}\coloneqq{}$+T.v\}};
\node[right=of d] (nd) {\{T.v${}\coloneqq{}$F.v$^{*}$T.v\}};
\node[right=of i] (ni) {\{F.v${}\coloneqq{}$2\}};
\node[left=of b] (nb) {\{F.v${}\coloneqq{}$5\}};
\node[left=of e] (ne) {\{T.v${}\coloneqq{}$F.v\}};
\node[left=of f] (nf) {\{F.v${}\coloneqq{}$8\}};
\foreach \i in {a,b,d,e,f,i}
\draw[dotted] (\i) -- (n\i);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
您可以命名节点,然后使用这些名称使用其他\node
和positioning
库来放置注释(我不确定注释应该采用文本模式还是数学模式,但您可以轻松更改);一个简单的\foreach
循环就可以绘制虚线:
\documentclass{scrartcl}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{trees,positioning}
\begin{document}
\begin{tikzpicture}
\node (a) {E}
child {node (b) {F}
}
child {node (c) {+}
}
child {node (d) {T}
child {node (e) {T}
child {node (f) {F} child {node (g) {8}} }
}
child {node (h) {*}}
child {node (i) {F} child {node (j) {2}}}
};
\begin{scope}[every node/.style={font=\footnotesize}]
\node[right=of a] (na) {\{E.v${}\coloneqq{}$+T.v\}};
\node[right=of d] (nd) {\{T.v${}\coloneqq{}$F.v$^{*}$T.v\}};
\node[right=of i] (ni) {\{F.v${}\coloneqq{}$2\}};
\node[left=of b] (nb) {\{F.v${}\coloneqq{}$5\}};
\node[left=of e] (ne) {\{T.v${}\coloneqq{}$F.v\}};
\node[left=of f] (nf) {\{F.v${}\coloneqq{}$8\}};
\foreach \i in {a,b,d,e,f,i}
\draw[dotted] (\i) -- (n\i);
\end{scope}
\end{tikzpicture}
\end{document}
在评论中,要求注释为红色,并且树带有标题:
\documentclass{scrartcl}
\usepackage{mathtools}
\usepackage{tikz}
\usetikzlibrary{trees,positioning}
\begin{document}
An example of a cross-reference to Figure~\ref{fig:tree}.
\begin{figure}
\centering
\begin{tikzpicture}
\node (a) {E}
child {node (b) {F}
}
child {node (c) {+}
}
child {node (d) {T}
child {node (e) {T}
child {node (f) {F} child {node (g) {8}} }
}
child {node (h) {*}}
child {node (i) {F} child {node (j) {2}}}
};
\begin{scope}[every node/.style={font=\footnotesize,color=red}]
\node[right=of a] (na) {\{E.v${}\coloneqq{}$+T.v\}};
\node[right=of d] (nd) {\{T.v${}\coloneqq{}$F.v$^{*}$T.v\}};
\node[right=of i] (ni) {\{F.v${}\coloneqq{}$2\}};
\node[left=of b] (nb) {\{F.v${}\coloneqq{}$5\}};
\node[left=of e] (ne) {\{T.v${}\coloneqq{}$F.v\}};
\node[left=of f] (nf) {\{F.v${}\coloneqq{}$8\}};
\foreach \i in {a,b,d,e,f,i}
\draw[dotted] (\i) -- (n\i);
\end{scope}
\end{tikzpicture}
\caption{A syntactic tree}
\label{fig:tree}
\end{figure}
\end{document}