答案1
除了istgame
在Alan Munn 的评论,还有forest
基于 Ti 的包钾Z 可以用来绘制一般的树。我的答案基于@cfr 的这个回答,如果她看到这个,她将能够提供更优雅的版本。但是,我认为这个答案已经说明了森林的一些优势,即您可以通过编程方式执行操作,例如 s 的放置edge label
,即您不必像其他方法那样手动进行重复,而且,也许更重要的是,如果您决定更改排版,比如说acc
要直立(我想推荐),您只需执行一次,而不是一遍又一遍。
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
/tikz/my edge label/.style={inner sep=5pt, midway},
/tikz/c/.style n args={2}{circle,inner sep=3pt,draw,fill=#1,label=above
right:$#2$},
trian/.style={tikz={\draw[dashed]() -- ++(1,-1) --++({-2cm-3*sqrt(2)*1pt},0) -- ();}},
for tree={
l sep=4em,
s sep=8em,
anchor=center,
before typesetting nodes={
if n'=1{
if n=1{}{edge label/.wrap value={\noexpand node [my edge label,right]
{$not$} }}
}{
edge label/.wrap value={\noexpand node [my edge label,left] {$acc$} }
},
},
if n children=0{}{
circle,
draw,
}
}
[,c={black}{x_1},trian
[,c={cyan}{{(a^0,1-a^0)}},label=below:{$x_2$}
[{$(a^0,1-a^0)$}]
[,c={cyan}{{x_3}},trian
[,c={black}{{(a^1,1-a^1)}},label=below:{$x_4$}
[{$\bigl(\delta_1a^1,\delta_2(1-a^1)\bigr)$}]
[,c={black}{{x_5}},trian
[,c={cyan}{{(a^2,1-a^2)}},label=below:{$x_6$}
[{$\bigl((\delta_1)^2a^1,(\delta_2)^2(1-a^1)\bigr)$}]
[{$(0,0)$}]
]
]
]
]
]
]
\end{forest}
\end{document}
答案2
这是使用专门用于绘制博弈论树的包的版本istgame
。该包没有虚线分支连续体的虚线样式,因此我创建了一个以现有istgame
分支连续体\istcntm
宏为模型的新命令。此宏被调用\istcntmx
并允许您将 TikZ 选项传递给三角形。其语法完全相同。
\documentclass{article}
\usepackage{istgame}
\makeatletter
\ExplSyntaxOn
\NewDocumentCommand \istcntmx
{ t' O{\istdefault@grow} r() D(){0,0} O{dashed} G{} D+.{\cntmdefault@levdist}D.+{\cntmdefault@sibdist} }
{
\IfBooleanTF {#1}
{
\istCntmRootx' [ #2 ] ( #3 ) ( #4 ) [ #5 ] + #7 .. #8 +
}
{
\istCntmRootx [ #2 ] ( #3 ) ( #4 ) [ #5 ] + #7 .. #8 +
}
}
\NewDocumentCommand\istCntmRootx{t'O{south}r()D(){0,0}O{dashed}G{.5}D+.{\cntmdefault@levdist}D.+{\cntmdefault@sibdist}}
{
\IfBooleanTF {#1}
{
\cntmdistance{#7}{#8}
\tikzset{level~1/.style={level~distance=\cntmlevdist,sibling~ distance=\cntmsibdist]}}
\setistNullNodeStyle[]{\istdefault@nullnodesize}[]
\node (#3) at (#4) [null~node] {} [\xtgrowprime=#2] child[#5] child[#5];
\draw [#5] (#3) -- (#3-1) -- (#3-2);
\setistNullNodeStyle{\istdefault@nullnodesize}
}
{
\cntmdistance{#7}{#8}
\tikzset{level~1/.style={level~distance=\cntmlevdist,sibling~ distance=\cntmsibdist]}}
\setistNullNodeStyle[]{\istdefault@nullnodesize}[]
\node (#3) at (#4) [null~node] {} [\xtgrow=#2] child[#5] child[#5];
\draw [#5] (#3) -- (#3-1) -- (#3-2);
\setistNullNodeStyle{\istdefault@nullnodesize}
}
}
\ExplSyntaxOff
\makeatother
\setistDecisionNodeStyle[black]{6pt}
\tikzset{blue node/.style={draw=blue,fill=cyan!50,circle=6pt}}
\begin{document}
\begin{istgame}
\xtdistance{20mm}{35mm}
\istcntmx(0)+15mm..25mm+
\istroot(0)
\istb*{}[]{(a^{0},1-a^{0})}[[xshift=10pt,yshift=-8pt]right]
\endist
\istroot(1)(0-1)[blue node]<[yshift=-3pt]below>{$x_{2}$}
\istb{acc}[al]{(a^{0},1-a^{0})} \istb{not}[ar]{x_{3}}[r]
\endist
\istroot(2)(1-2)[blue node]
\istcntmx(0-1)(1-2)+15mm..25mm+
\istb*{}[]{(a^{1},1-a^{1})}[[xshift=10pt,yshift=-8pt]right]
\endist
\istroot(3)(2-1)<[yshift=-3pt]below>{$x_{4}$}
\istb{acc}[al]{(\delta_{1}a^{1},\delta_{2}(1-a^{1}))} \istb*{not}[ar]
\endist
\end{istgame}
\end{document}
答案3
这是一个启动器。运行xelatex
或使用auto-pst-pdf
:
\documentclass{article}
\usepackage{pst-tree}
\newcommand\Triangle[1][black]{\TRIANGLE[#1]}
\def\TRIANGLE[#1](#2){\rput[t](#2){%
\pspolygon[linestyle=dashed](0,0)(-1.3,-1.3)(1.3,-1.3)}%
\pscircle[fillstyle=solid,fillcolor=#1](#2){5pt}}
\begin{document}
\psset{treesep=2,levelsep=2}
\psTree{\Tdot[dotsize=10pt,name=x1]}%
\psTree{\TC[radius=5pt,name=x2]_[tpos=0.8]{$(a^0,1-a^0)$}}
\TR[name=x2l]{$(a^0,1-a^0)$}^{$acc$}
\psTree{\TC[radius=5pt,name=x3]_{$not$}}
\Tdot[dotsize=10pt,name=x4]_[tpos=0.8]{$(a^1,1-a^1)$}
\endpsTree
\endpsTree
\endpsTree
\uput{10pt}[20](x1){$x_1$}%
\Triangle(x1)%
\uput{10pt}[-90](x2){$x_2$}%
\uput{10pt}[0](x3){$x_3$}%
\Triangle[cyan!40](x3)%
\end{document}
答案4
这是使用istgame
包裹。
istgame版本v2.0
在版本 2 中,您可以使用新的宏,它比使用 (已过时)后跟\istrootcntm
更简单(如果默认使用)且功能更强大。您可以使用 来控制连续三角形的特征。\istcntm
\istroot
\cntmpreset(*)
\documentclass{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}[font=\scriptsize]
% presets
\tikzset{odd node/.style={decision node,minimum size=6pt}}
\tikzset{even node/.style={oval node,fill=cyan!50,minimum size=6pt}}
% game tree
\cntmdistance*{20mm}{35mm}
\cntmpreset*[densely dashed]{.6}
\istrootcntm(1a)[odd node]<15>{$x_1$}
\istb{(a^0,1-a^0)}[right,near end] \endist
\istroot(2)(1a-1)[even node]<-90>{$x_2$}
\istb{acc}[al]{\left(a^0,1-a^0\right)}
\istb{not}[ar]
\endist
\istrootcntm(2a)(2-2)[even node]<0>{$x_3$}
\istb{(a^2,1-a^2)}[right,near end] \endist
\istroot(3)(2a-1)[odd node]<-90>{$x_4$}
\istb{acc}[al]{\left(\delta_1 a^1,\delta_2(1-a^1)\right)}
\istb{not}[ar]
\endist
\istrootcntm(3a)(3-2)[odd node]<0>{$x_5$}
\istb{(a^2,1-a^2)}[right,near end] \endist
\istroot(4)(3a-1)[even node]<-90>{$x_6$}
\istb{acc}[al]{\left((\delta_1)^2a^2,(\delta_2)^2(1-a^2)\right)}
\istb{not}[ar]{(0,0)}
\endist
\end{istgame}
\end{document}
原始答案(istgame v1.0)
我从艾伦的答案中借用了距离和颜色,它们适用于树木生长的各个方向。
(我正在更新 istgame 包,希望在各种情况下绘制游戏树会更容易一些。我还花了一些时间来更新与分支连续体相关的宏。)
\documentclass{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}[scale=1.2,font=\scriptsize]
% presets
\tikzset{odd node/.style={decision node,minimum size=6pt}}
\tikzset{even node/.style={oval node,fill=cyan!50,minimum size=6pt}}
\NewDocumentCommand\DASHEDcntm{ r() r() G{} O{below right} }
{
\istroot(#1)(#2)[null node]+15mm..{(7/4)*15mm}+
\istb[dashed] \istb[dashed] \endist
\draw [dashed] (#1-1) -- (#1-2);
\xtPayoff($(#1-1)!.5!(#1-2)$){#3}[#4]
}
% game tree
\xtdistance{20mm}{35mm}
\DASHEDcntm(1a)(0,0){(a^0,1-a^0)}
\istroot(1a)[odd node]<15>{$x_1$} \istb \endist
\istroot(2)(1a-1)[even node]<-90>{$x_2$}
\istb{acc}[al]{\left(a^0,1-a^0\right)}
\istb{not}[ar]
\endist
\DASHEDcntm(2a)(2-2){(a^1,1-a^1)}
\istroot(2a)(2-2)[even node]<0>{$x_3$} \istb \endist
\istroot(3)(2a-1)[odd node]<-90>{$x_4$}
\istb{acc}[al]{\left(\delta_1 a^1,\delta_2(1-a^1)\right)}
\istb{not}[ar]
\endist
\DASHEDcntm(3a)(3-2){(a^2,1-a^2)}
\istroot(3a)(3-2)[odd node]<0>{$x_5$} \istb \endist
\istroot(4)(3a-1)[even node]<-90>{$x_6$}
\istb{acc}[al]{\left((\delta_1)^2a^2,(\delta_2)^2(1-a^2)\right)}
\istb{not}[ar]{(0,0)}
\endist
\end{istgame}
\end{document}