我已经开始制作游戏树,但在第二关之后就卡住了。非常感谢有关扩展到所需输出或更简洁的代码的建议。
期望输出
电流输出
当前代码
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{tikzpicture}[
font = \footnotesize,
edge from parent/.style = {draw ,thin},
SN/.style = {%solid node
circle, inner sep=1.2 ,fill=blue},
HN/.style = {%hollow node
circle, inner sep=1.2, draw=blue,
},
level distance = 25mm,
level 1/.style = {sibling distance=50mm},
level 2/.style = {sibling distance=40mm},
]
\node (n0) [HN] {}
child{ node (n1) [SN] {}
edge from parent node[left]{text 1}
}
child{ node (n2) [SN] {}
child{node[HN] {}
edge from parent node[left]{text 3}}
child{node[HN] {}
edge from parent node[right]{text 4}}
edge from parent node[right]{text 2}};
\draw[<-,shorten <=1pt]
(n0) -- + (2,1) node[right,align=left] {nodetext 1 };
\draw[<-,shorten <=1pt]
(n2) -- + (2,1) node[right,align=left] {nodetext 2};
\end{tikzpicture}
\caption{Game tree}
\label{fig:Game tree}
\end{figure}
\end{document}
答案1
它可能不是那么容易阅读,但看起来可以继续你开始的方式:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{tikzpicture}[
font = \footnotesize,
edge from parent/.style = {draw ,thin},
SN/.style = {%solid node
circle, inner sep=1.2 ,fill=blue},
HN/.style = {%hollow node
circle, inner sep=1.2, draw=blue,
},
level distance = 25mm,
level 1/.style = {sibling distance=50mm},
level 2/.style = {sibling distance=40mm},
]
\node (n0) [HN] {}
child{ node (n1) [SN] {}
edge from parent node[left]{text 1}
}
child{ node (n2) [SN] {}
child{node (n3) [HN] {}
child{node (n4) [SN] {}
child{node[HN] {}
edge from parent node[left]{text 7}}
child{node[HN] {}
edge from parent node[right]{text 8}}
edge from parent node[left]{text 5}}
child{node[SN] {}
edge from parent node[right]{text 6}}
edge from parent node[left]{text 3}}
child{node[HN] {}
edge from parent node[right]{text 4}}
edge from parent node[right]{text 2}};
\draw[<-,shorten <=1pt]
(n0) -- + (2,1) node[right,align=left] {nodetext 1};
\draw[<-,shorten <=1pt]
(n2) -- + (2,1) node[right,align=left] {nodetext 2};
\draw[<-,shorten <=1pt]
(n3) -- + (-2,1) node[left,align=right] {nodetext 3};
\draw[<-,shorten <=1pt]
(n4) -- + (-2,1) node[left,align=right] {nodetext 4};
\end{tikzpicture}
\caption{Game tree}
\label{fig:Game tree}
\end{figure}
\end{document}
我建议您在命名节点时也请注意绘图上节点的名称(n1 等),这会很有帮助。
还有其他类型的树系统可以更易于使用,但请注意,此链接中的示例将文本放在放置节点的位置:使用 tikz 绘制树,子重叠. 请参阅 cfr 的答案,获取更适合您需求的示例。
答案2
如果您使用其中一种更简单的树规范语法,那么文本就不必放置在节点所在的位置。允许forest
您将节点中的文本完全放置在其他位置。
例如,
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
parent anchor=children,
anchor=center,
inner sep=0pt,
l sep*=5,
s sep*=5,
delay={
edge label/.wrap value={node [above, midway, sloped] {#1}; },
if content={}{}{
if n=1{
pin/.wrap pgfmath arg={135:#1}{content()},
}{
pin/.wrap pgfmath arg={45:#1}{content()},
}
},
circle,
minimum size=2.5pt,
fill,
content={},
}
}
[node text 1
[, edge label=text 1]
[node text 2, edge label=text 2
[node text 3, edge label=text 3
[node text 4, edge label=text 5
[]
[]
]
[]
]
[, edge label=text 4]
]
]
\end{forest}
\end{document}
通过这种方式指定许多或大型树要容易得多,因为括号反映了结构,树可以一致且灵活地格式化,并且构造的部分(或全部!)甚至可以自动完成。
答案3
编辑:istgame
版本 2.0
这istgame
版本 2 提供了一个新宏,\xtCommentTo
用于将注释添加到节点。输入模式转换器\setistmathTF*
也是版本 2 中可用的新宏。
\documentclass{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}[sloped]
% action labels in text mode
\setistmathTF*000{textrm}
% tree part
\setistSolidNodeStyle[blue]
\setistHollowNodeStyle[blue]
\xtShowEndPoints[hollow node]
\xtdistance{30mm}{60mm}
\istroot(n0)[hollow node]
\istb*{text 1}[above] \istb{text 2}[above] \endist
\istroot(n1)(n0-2)
\istb{text 3}[above] \istb{text 4}[above] \endist
\istroot(n2)(n1-1)[hollow node]
\istb{text 5}[above] \istb*{text 6}[above] \endist
\istroot(n3)(n2-1)
\istb{text 7}[above] \istb{text 8}[above] \endist
% comment part
\xtCommentTo[bend right](n0)(2,1){nodetext 1}[r]
\xtCommentTo(n1)(2,1){nodetext 2}[r]
\xtCommentTo[bend left,dashed](n2)(-2,1){nodetext 3}[l]
\xtCommentTo[solid](n3)(-2,1){nodetext 4}[l]
\end{istgame}
\end{document}
原始答案
这是一个解决方案,使用istgame
包。您可以istgame
像使用环境一样使用包,这意味着您可以在环境中使用包随附的tikzpicture
所有命令和选项。tikzpicture
macros
istgame
istgame
梅威瑟:
\documentclass{standalone}
\usepackage{istgame}
%\usepackage{makecell}
\begin{document}
\begin{istgame}[sloped]
% tree part
\setistSolidNodeStyle[blue]
\setistHollowNodeStyle[blue]
\xtShowEndPoints[hollow node]
\xtdistance{30mm}{60mm}
\istroot(n0)[hollow node]
\istb*{\mbox{text 1}}[above]
\istb{\mbox{text 2}}[above]
\endist
\istroot(n1)(n0-2)
\istb{\mbox{text 3}}[above]
\istb{\mbox{text 4}}[above]
\endist
\istroot(n2)(n1-1)[hollow node]
\istb{\mbox{text 5}}[above]
\istb*{\mbox{text 6}}[above]
\endist
\istroot(n3)(n2-1)
\istb{\mbox{text 7}}[above]
\istb{\mbox{text 8}}[above]
\endist
% add some more
\begin{scope}[<-,shorten <=1pt]
\draw [->,shorten >=1pt,bend right=30] ($(n0)+(2,1)$) node [right] {nodetext 1} to (n0);
\draw (n1) -- +(2,1) node [right] {nodetext 2};
\draw (n2) -- +(-2,1) node [left] {nodetext 3};
\draw (n3) -- +(-2,1) node [left] {nodetext 4};
\end{scope}
\end{istgame}
\end{document}