如何仅为游戏树中的三个分支中的一个着色?

如何仅为游戏树中的三个分支中的一个着色?

我正在使用 Osborne 的 egameps 包创建一个大型游戏的游戏树。我怎样才能将第一运动中树枝的右侧分支仅着色为红色。我尝试使用\iiib[][][linecolor=red]{$X$}{$Y$}{$Z$},因为我要处理双分支的情况,但它没有着色任何东西,并且扰乱了整个游戏树。我该怎么办?

以下是代码:

\documentclass[12pt]{scrartcl}
\usepackage{pstricks,egameps} 
\usepackage{pst-3d}% Above two packages are for extensive games

\begin{figure}[htb]%
\hspace*{\fill}%
\begin{egame}(810,290)
\putbranch(360,250)(3,1){360}
\egalvshift=5
\iiib[][][linecolor=red]{1}{$X$}{$Y$}{$Z$}
\putbranch(0,130)(1,1){90}
\egalhshift=18
\iib{2}{$Y$}{$Z$}[$0,2$][$1,1$]
\putbranch(360,130)(1,1){90}
\egalhshift=18
\iib{2}{$X$}{$Z$}[$0,2$][$2,0$]
\putbranch(720,130)(1,1){90}
\egalhshift=18
\iib[linecolor=red][]{2}{$Z$}{$Y$}[$1,1$][$2,0$]
\end{egame}
\hspace*{\fill}%
\caption[]{An extensive game.}\label{f:se1}
\end{figure}

答案1

收到补充信息后的版本。

\documentclass{article}
\usepackage{pstricks}
\usepackage{egameps}

\begin{document}

\begin{figure}[\htb]%
\hspace*{\fill}%
\begin{egame}(810,290)
\putbranch(360,250)(3,1){360}
\egalvshift=5
%\iiib[][][linecolor=red]{1}{$X$}{$Y$}{$Z$} 
\iiib{1}{$X$}{$Y$}{$Z$} 
\ib[linecolor=red]{1}{} 
\putbranch(0,130)(1,1){90}
\egalhshift=18
\iib{2}{$Y$}{$Z$}[$0,2$][$1,1$]
\putbranch(360,130)(1,1){90}
\egalhshift=18
\iib{2}{$X$}{$Z$}[$0,2$][$2,0$]
\putbranch(720,130)(1,1){90}
\egalhshift=18
\iib[linecolor=red][]{2}{$Z$}{$Y$}[$1,1$][$2,0$]
\end{egame}
\hspace*{\fill}%
\caption[]{An extensive game.}\label{f:se1}
\end{figure}

\end{document}

在此处输入图片描述

答案2

我认为,该egameps包是pstricks绘制游戏树的最佳工具。另一个解决方案是使用包istgame,它基于TikZ

在此处输入图片描述

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}[line width=.8pt]
\xtdistance{15mm}{40mm}
\istroot(0){1}
  \istb{X}[al]
  \istb{Y}[r]
  \istb[draw=red]{Z}[ar]
  \endist
\xtdistance{10mm}{20mm}
\istroot(1)(0-1){2}
  \istb{Y}[al]{0,2}
  \istb{Z}[ar]{1,1}
  \endist
\istroot(2)(0-2)<135>{2}
  \istb{X}[al]{0,2}
  \istb{Z}[ar]{2,0}
  \endist
\istroot(3)(0-3){2}
  \istb[draw=red]{Z}[al]{1,1}
  \istb{Y}[ar]{2,0}
  \endist
\end{istgame}

\end{document}

答案3

可能可以forest直接获取最后一级(至少对于一棵简单的树而言),但是现在,您需要手动提供它。

样式egame仅为这棵树设置了一些样式。代码中注释。

代码

\documentclass[tikz]{standalone}
\usepackage{forest}
\tikzset{
  edge label style/.style={text=.,font=\scriptsize,inner sep=+.1667em,midway,yshift=+1mm}}
\forestset{
  label position/.code=\forestoset{label position}{#1},
  last level/.initial=-1, % set it!
  egame/.style={
    /tikz/every label/.append style={inner sep=+.1em,font=\scriptsize},
    el/.style={% short for "edge label"
      if={n()<=\forestOve{\forestove{@parent}}{n children}/2}
        {edge label={node[edge label style, left] {$##1$}}}
        {edge label={node[edge label style, right]{$##1$}}}},
    for tree={
      label position=above,% default label position
      if={level==\pgfkeysvalueof{/forest/last level}}{% last level?
        delay={content/.expanded={$\forestov{content}$}}% put content in math
      }{
        node options={% a black dot
          shape=circle,
          fill, draw, inner sep=+0pt,
          minimum size=+2pt},
        delay={
          label/.expanded=% level as label
            {\forestove{label position}:\noexpand\pgfmathprint{int(level()+1)}}}
      }}}}
\begin{document}
\begin{forest} last level=2, egame
[
  [,        el=X, 
    [{0,2}, el=Y]
    [{1,1}, el=Z] ]
  [,        el=Y, label position=above right
    [{0,2}, el=X]
    [{2,0}, el=Z] ]
  [,        el=Z, edge=red
    [{1,1}, el=Z, edge=red]
    [{2,0}, el=Y] ]
]
\end{forest}
\end{document}

输出

在此处输入图片描述

答案4

推荐使用 PSTricks 的解决方案。

\documentclass[preview,border=12pt]{standalone}

\usepackage{pst-tree}
\psset{labelsep=5pt,radius=3pt}

\def\red{\ncline[linecolor=red]}
\def\lbl#1#2{\nput{#1}{\pssucc}{$#2$}}% \nput will not update the bounding box!

\begin{document}
\psTree{\TC*~[tnpos=a]{1}}
    \psset{levelsep=1}
    \psTree{\TC*\lbl{135}{2}\tlput{$X$}}
        \Tp*~{$0,2$}\tlput{$Y$}
        \Tp*~{$1,1$}\trput{$Y$}
    \endpsTree
    \psTree{\TC*\lbl{45}{2}\trput{$Y$}}
        \Tp*~{$0,2$}\tlput{$X$}
        \Tp*~{$2,0$}\trput{$Z$}
    \endpsTree  
    \psTree{\TC*[edge=\red]\lbl{45}{2}\trput{$Z$}}
        \Tp*[edge=\red]~{$1,1$}\tlput{$Z$}
        \Tp*~{$2,0$}\trput{$Y$}
    \endpsTree  
\endpsTree
\end{document}

在此处输入图片描述

笔记

  • \nput可用于标记树节点。不幸的是,它不会更新边界框。不应使用它。
  • ~[]{}是另一种标记树节点的语法。它将更新边界框。但不幸的是,它tnpos只能接受 4 个预设值:a用于上方、b用于下方、l用于左侧和r用于右侧。它不支持任意角度,例如45度。一个令人悲伤的消息!

相关内容