在 tikz 中绘制树

在 tikz 中绘制树

我想在 LaTeX 中复制此 powerpoint 草图。我尝试使用 tikz,但没有成功。

任何帮助都值得感激! 在此处输入图片描述

答案1

除了istgameAlan 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}

相关内容