游戏树需要进一步扩展(tikz)

游戏树需要进一步扩展(tikz)

我已经开始制作游戏树,但在第二关之后就卡住了。非常感谢有关扩展到所需输出或更简洁的代码的建议。

期望输出

在此处输入图片描述

电流输出

在此处输入图片描述

当前代码

\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所有命令和选项。tikzpicturemacrosistgameistgame

在此处输入图片描述

梅威瑟:

\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}

相关内容