% egameps.sty
%
LaTeX style file for typesetting extensive games (using Postscript)
% Macros to draw extensive games, using the PSTricks package
% macros (but retaining TeX's integer arithmetic).
%
% See egameps.pdf for documentation.
% By Martin J. Osborne
% martin.osborne@utoronto.ca
% http://www.economics.utoronto.ca/osborne
% Version 1.1, 2004/6/19
%
% Defaults. (Changes made here will be global. To change locally, use
% optional arguments of functions.)
\def\@branchcolor{black} % color of branches
\def\@branchstyle{solid} % style of branches
\def\@branchwidth{0.8pt} % width of branches
%
% Style of arcs in \ctmbarc
\def\egarclinestyle{solid}
\def\egarclinewidth{0.6pt}
\def\egarclinecolor{black}
%
\newgray{verylightgray}{.9}
\def\ctmfillcolor{verylightgray} % color of triangle for continuum of branches
\def\egnode{\pscircle*{5}} % node
\def\eginode{\pscircle[linewidth=0.4pt]{5}} % initial node
\def\infosetdot{\pscircle*{2.5}}
\def\infosetdotsep{20} % dot spacing (n means: n times unitlength)
\newdimen\egplayerlabelsep
\egplayerlabelsep=1mm
\newdimen\egplayerboxsep
\egplayerboxsep=0mm
\newdimen\egactionlabelsep
\egactionlabelsep=0.7mm
\newdimen\egactionboxsep
\egactionboxsep=0mm
\newdimen\egpayoffboxsep
\egpayoffboxsep=0mm
\newdimen\egpayofflabelsep
\egpayofflabelsep=2mm
\def\egalboxlinestyle{none}
\def\egalboxlinecolor{black}
\def\egalboxfillstyle{none}
\def\egalboxfillcolor{white}
\def\egpayboxlinestyle{none}
\def\egpayboxlinecolor{black}
\def\egpayboxfillstyle{none}
\def\egpayboxfillcolor{white}
\def\egplboxlinestyle{none}
\def\egplboxlinecolor{black}
\def\egplboxfillstyle{none}
\def\egplboxfillcolor{white}
\def\egalpos{o} % position of action labels: offset
\def\egalbox{f} % box for action labels: framebox
\def\egpaybox{f} % box for payoff labels: framebox
\def\egplbox{f} % box for player labels: framebox
\def\egarrowstyle{n} % style of arrows on branches: none
\newif\ifinitial
\newpsobject{branchline}{psline}%
{linecolor=\@branchcolor,linestyle=\@branchstyle,linewidth=\@branchwidth}
\newcount\@egxnum
\newcount\@egxxnum
\newcount\@egxxxnum
\newcount\@egxxxxnum
\newcount\@egynum
\newcount\@egyynum
\newcount\@egyyynum
\newcount\@egyyyynum
\newdimen\@egrad
\newdimen\@egxdim
\newdimen\@egydim
\newcount\@@egxnum
\newcount\@@egxxnum
\newcount\@@egxxxnum
\newcount\@@egynum
\newcount\@@egyynum
\newcount\@@egyyynum
\newcount\@eghnum
\newcount\@egvnum
\newcount\@egabshnum
\newcount\@egabsvnum
\newcount\@eghdistance
\newcount\@tempcntx
\newcount\@tempcnty
\newcount\egalhshift
\newcount\egalvshift
% Command to change default direction
\newcommand{\egdirection}[1]{%
\if#1d\def\@egdefdirection{d}
\else\if#1u\def\@egdefdirection{u}
\else\if#1r\def\@egdefdirection{r}
\else\if#1l\def\@egdefdirection{l}
\else\@egame@warning{egdirection '#1' undefined; using 'd'}
\def\@egdefdirection{d}
\fi\fi\fi\fi%
}
% Default direction is down
\def\@egdefdirection{d}
\def\@egame@warning#1{%
\GenericWarning{%
\space\space\space\@spaces\@spaces\@spaces
}{%
egameps warning: #1%
}%
}
%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% Draw a branch
%%%%%%%%%%%%%%%%%%%%%%%%
%
% draw a branch in PSTricks style #1 from (#2,#3) to (#4,#5), putting the
% action label #6 above the branch if #7 is u (to the right if vertical
% branch) and below it if #7 is d (to the left if vertical branch), and the
% payoff label #8 according in the appropriate position given \egdirection
\def\@egdrawbranch{%
\@ifnextchar[{\@drawbrancho}{\@drawbranchn}
}
% #1: PSTricks style (linestyle, linecolor, etc.)
% (#2,#3): starting point
% (#4,#5): ending point
% #6: action label
% #7: action label position (c (center), o (outside), i (inside))
% #8: payoff label
\def\@drawbrancho[#1](#2,#3)(#4,#5)#6#7{%
\@@egxnum=#2\@@egynum=#3
\@@egxxnum=#4\@@egyynum=#5
\if\egarrowstyle e
\branchline[#1]{->}(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
\else
\branchline[#1](\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
\if\egarrowstyle m
\@@egxxxnum=\@@egxnum
\advance\@@egxxxnum by\@@egxxnum
\divide\@@egxxxnum by2
\@@egyyynum=\@@egynum
\advance\@@egyyynum by\@@egyynum
\divide\@@egyyynum by2
\branchline[#1]{->}(\@@egxnum,\@@egynum)(\@@egxxxnum,\@@egyyynum)
\fi
\fi
\@drawactionlabel{#6}{#7}
\@ifnextchar[{\@drawpayoffs}{}
}
\def\@drawbranchn(#1,#2)(#3,#4)#5#6{%
\@@egxnum=#1\@@egynum=#2
\@@egxxnum=#3\@@egyynum=#4
\if\egarrowstyle e
\branchline{->}(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
\else
\branchline(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
\if\egarrowstyle m
\@@egxxxnum=\@@egxnum
\advance\@@egxxxnum by\@@egxxnum
\divide\@@egxxxnum by2
\@@egyyynum=\@@egynum
\advance\@@egyyynum by\@@egyynum
\divide\@@egyyynum by2
\branchline{->}(\@@egxnum,\@@egynum)(\@@egxxxnum,\@@egyyynum)
\fi
\fi
\@drawactionlabel{#5}{#6}
\@ifnextchar[{\@drawpayoffs}{}
}
% #1: action label
% #2: action label position
% position action label relative to reference point (\@@egxnum, \@@egynum)
\def\@drawactionlabel#1#2{%
\psset{framesep=\egactionboxsep}
\fboxrule 0pt\fboxsep\egactionlabelsep
\advance\@@egxnum by\@@egxxnum
\divide\@@egxnum by2
\advance\@@egynum by\@@egyynum
\divide\@@egynum by2
% shifts
\@tempcntx=\@@egxnum% procedure changes \@@egxnum and \@@egynum, so
\@tempcnty=\@@egynum% save their original values
\ifnum\egalvshift=0
\ifnum\@@egxxnum=\@tempcntx
\else\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by\egalhshift
\@tempcnta=\egalhshift
\multiply\@tempcnta by\@egabsvnum
\divide\@tempcnta by\@egabshnum
\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by\@tempcnta
\else
\advance\@@egynum by-\@tempcnta
\fi
\else\ifnum\@@egxxnum<\@tempcntx
\if\@egdirection l
\advance\@@egxnum by\egalhshift
\else
\advance\@@egxnum by-\egalhshift
\fi
\@tempcnta=\egalhshift
\multiply\@tempcnta by\@egabsvnum
\divide\@tempcnta by\@egabshnum
\if\@egdirection l
\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by-\@tempcnta
\else
\advance\@@egynum by\@tempcnta
\fi
\else
\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by\@tempcnta
\else
\advance\@@egynum by-\@tempcnta
\fi
\fi
\fi\fi\fi
\else\ifnum\egalhshift=0
\ifnum\@@egyynum=\@tempcnty
\else\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by\egalvshift
\@tempcnta=\egalvshift
\multiply\@tempcnta by\@eghnum
\divide\@tempcnta by\@egvnum
\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by\@tempcnta
\else
\advance\@@egxnum by-\@tempcnta
\fi
\else\ifnum\@@egyynum<\@tempcnty
\if\@egdirection d
\advance\@@egynum by\egalvshift
\else
\advance\@@egynum by-\egalvshift
\fi
\@tempcnta=\egalvshift
\multiply\@tempcnta by\@eghnum
\divide\@tempcnta by\@egvnum
\if\@egdirection d
\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by-\@tempcnta
\else
\advance\@@egxnum by\@tempcnta
\fi
\else
\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by\@tempcnta
\else
\advance\@@egxnum by-\@tempcnta
\fi
\fi
\fi\fi\fi
\else
\if\@egdirection d
\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by\egalhshift
\else
\advance\@@egxnum by-\egalhshift
\fi
\else\if\@egdirection u
\ifnum\@@egxxnum>\@tempcntx
\advance\@@egxnum by\egalhshift
\else
\advance\@@egxnum by-\egalhshift
\fi
\else\if\@egdirection r
\advance\@@egxnum by\egalhshift
\else\if\@egdirection l
\advance\@@egxnum by\egalhshift
\fi\fi\fi\fi
\if\@egdirection d
\advance\@@egynum by\egalvshift
\else\if\@egdirection u
\advance\@@egynum by\egalvshift
\else\if\@egdirection r
\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by\egalvshift
\else
\advance\@@egynum by-\egalvshift
\fi
\else\if\@egdirection l
\ifnum\@@egyynum>\@tempcnty
\advance\@@egynum by\egalvshift
\else
\advance\@@egynum by-\egalvshift
\fi
\fi\fi\fi\fi
\fi\fi
%
\if\egalbox f
\def\@egalbox{\psframebox[linestyle=\egalboxlinestyle,%
linecolor=\egalboxlinecolor,fillstyle=\egalboxfillstyle,%
fillcolor=\egalboxfillcolor]}
\else\if\egalbox c
\def\@egalbox{\pscirclebox[linestyle=\egalboxlinestyle,%
linecolor=\egalboxlinecolor,fillstyle=\egalboxfillstyle,%
fillcolor=\egalboxfillcolor]}
\fi\fi
\if#2c
\setbox0\hbox{\fbox{\@egalbox{#1}}}
\psset{framesep=\egactionlabelsep}
\rput*(\@@egxnum,\@@egynum){\box0}
\else\if#2o % outside
\if\@egdirection d
\ifnum\@tempcntx<\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx>\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection u
\ifnum\@tempcntx<\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx>\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection r
\ifnum\@tempcnty<\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty>\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection l
\ifnum\@tempcnty<\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty>\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\fi\fi\fi\fi
\else\if#2i % inside
\if\@egdirection d
\ifnum\@tempcntx<\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx>\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection u
\ifnum\@tempcntx<\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx>\@@egxxnum
\ifnum\@tempcnty=\@@egyynum
\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection r
\ifnum\@tempcnty<\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty>\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\else\if\@egdirection l
\ifnum\@tempcnty<\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty>\@@egyynum
\ifnum\@tempcntx=\@@egxxnum
\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\else
\rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi
\else\ifnum\@tempcnty=\@@egyynum
\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
\fi\fi\fi
\fi\fi\fi\fi
\fi\fi\fi
}
\def\@drawpayoffs[#1]{%
\ifx#1\@empty
\else
\psset{framesep=\egpayoffboxsep}
\fboxrule 0pt\fboxsep\egpayofflabelsep
\if\egpaybox f
\def\@egpaybox{\psframebox[linestyle=\egpayboxlinestyle,%
linecolor=\egpayboxlinecolor,fillstyle=\egpayboxfillstyle,%
fillcolor=\egpayboxfillcolor]}
\else\if\egpaybox c
\def\@egpaybox{\pscirclebox[linestyle=\egpayboxlinestyle,%
linecolor=\egpayboxlinecolor,fillstyle=\egpayboxfillstyle,%
fillcolor=\egpayboxfillcolor]}
\fi\fi
\if\@egdirection d
\rput[t](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
\else\if\@egdirection u
\rput[b](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
\else\if\@egdirection r
\rput[l](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
\else\if\@egdirection l
\rput[r](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
\fi\fi\fi\fi
\fi
}
\def\@egdrawnode#1{
\psset{framesep=1pt}
\ifinitial\rput*(\@egxnum,\@egynum){\eginode}\initialfalse
\else\rput*(\@egxnum,\@egynum){\egnode}%
\fi
\psset{framesep=\egplayerboxsep}
\fboxrule 0pt\fboxsep\egplayerlabelsep
\if\@branchplp o
\rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else\if\@egdirection d
\if\@branchplp l
\rput[br](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else\if\@branchplp r
\rput[bl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else
\rput[b](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\fi\fi
\else\if\@egdirection u
\if\@branchplp l
\rput[tr](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else\if\@branchplp r
\rput[tl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else
\rput[t](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\fi\fi
\else\if\@egdirection r
\if\@branchplp u
\rput[br](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else\if\@branchplp d
\rput[tr](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else
\rput[r](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\fi\fi
\else\if\@egdirection l
\if\@branchplp u
\rput[bl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else\if\@branchplp d
\rput[tl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\else
\rput[l](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
\fi\fi
\fi\fi\fi\fi\fi
}
%%%%%%%%%%%%%%%%%%%%%
%%%%%% \putbranch
%%%%%%%%%%%%%%%%%%%%%
% \putbranch and the two macros it calls define the parameters
% \@egxnum
% \@egynum
% \@eghnum
% \@egvnum
% \@egabshnum (absolute value of \@eghnum)
% \@egabsvnum (absolute value of \@egvnum)
% \@egdirection
% \@eghdistance (for direction d, horizontal distance from node to outer
% branch (the single branch in the case of one, and either branch in
% the case of two))
% to be used by \ib, \iib, \iiib, and \ctmb.
\def\putbranch(#1,#2)(#3,#4){%
\egalhshift=0%
\egalvshift=0%
\@egxnum=#1\@egynum=#2\@eghnum=#3\@egvnum=#4%
% define absolute values of \@eghnum and \@egvnum
\ifnum\@eghnum<0
\@egabshnum=-\@eghnum
\else\@egabshnum=\@eghnum\fi
\ifnum\@egvnum<0
\@egabsvnum=-\@egvnum
\else\@egabsvnum=\@egvnum\fi
%% player label box
\if\egplbox f
\gdef\@egplbox{\psframebox[linestyle=\egplboxlinestyle,%
linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
fillcolor=\egplboxfillcolor]}
\else\if\egplbox c
\gdef\@egplbox{\pscirclebox[linestyle=\egplboxlinestyle,%
linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
fillcolor=\egplboxfillcolor]}
\else
\@egame@warning{egplbox style '\egplbox' undefined; using c}
\gdef\@egplbox{\pscirclebox[linestyle=\egplboxlinestyle,%
linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
fillcolor=\egplboxfillcolor]}
\fi\fi
%%
\@ifnextchar[{\@putbrancho(#1,#2)(#3,#4)}{\@putbranch(#1,#2)(#3,#4)}%
}
\def\@putbrancho(#1,#2)(#3,#4)[#5]#6{%
\def\@egdirection{#5}\@eghdistance=#6%
}
\def\@putbranch(#1,#2)(#3,#4)#5{%
\def\@egdirection{\@egdefdirection}\@eghdistance=#5%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% ONE BRANCH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% One branch
\def\ib{%
\if\@egdirection d
\@egvnum=-\@egabsvnum
\else\if\@egdirection u
\@egvnum=\@egabsvnum
\else\if\@egdirection r
\@eghnum=\@egabshnum
\else\if\@egdirection l
\@eghnum=-\@egabshnum
\fi\fi\fi\fi
\@egxxnum=\@egxnum
\ifnum\@eghnum=0
\@egyynum=\@egynum
\ifnum\@egvnum<0
\advance\@egyynum by-\@eghdistance
\else
\advance\@egyynum by\@eghdistance
\fi
\else
\@egyynum=\@egabsvnum
\multiply\@egyynum by\@eghdistance
\divide\@egyynum by\@egabshnum
\ifnum\@egvnum<0
\advance\@egyynum by-\@egynum
\multiply\@egyynum by-1
\else
\advance\@egyynum by\@egynum
\fi
\ifnum\@eghnum<0
\advance\@egxxnum by-\@eghdistance
\else
\advance\@egxxnum by\@eghdistance
\fi
\fi
\@ifnextchar[{\@ibpsto}{\@ibpstno}
}
%%% first argument is option list
% #1: list of options to be ultimately passed to \psline (via \branchline)
% #2: player label
\def\@ibpsto[#1]#2{%
\@ifnextchar[{\@ibo{#1}{#2}}{\@ib{#1}{#2}}%
}
% #1: list of options
% #2: player label
% #3: player label position
% #4: action label
\def\@ibo#1#2[#3]#4{%
\def\@branchplp{#3}
\@ifnextchar[{\@ibot{#1}{#2}{#4}}{\@ibotn{#1}{#2}{#4}}%
}
% #1: list of options
% #2: player label
% #3: action label
\def\@ib#1#2#3{%
\def\@branchplp{t}
\@ifnextchar[{\@ibot{#1}{#2}{#3}}{\@ibotn{#1}{#2}{#3}}%
}
% #1: list of options
% #2: player label
% #3: action label
\def\@ibotn#1#2#3{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{\egalpos}
\@egdrawnode{#2}%
}
% #1: list of options
% #2: player label
% #3: action label
% #4: action label position OR payoffs
\def\@ibot#1#2#3[#4]{%
\if#4c\def\@tempegalpos{1}
\else\if#4o\def\@tempegalpos{1}
\else\if#4i\def\@tempegalpos{1}
\else\def\@tempegalpos{0} % last argument is payoffs, not label position
\fi\fi\fi
\@ifnextchar[{\@ibt{#1}{#2}{#3}{#4}}{\@ibtn{#1}{#2}{#3}{#4}}%
}
% #1: list of options
% #2: player label
% #3: action label
% #4: action label position
% #5: payoffs
\def\@ibt#1#2#3#4[#5]{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
{#4}[#5]
\@egdrawnode{#2}%
}
% #1: list of options
% #2: player label
% #3: action label
% #4: action label position if \@tempalpos=1, otherwise payoff
\def\@ibtn#1#2#3#4{%
\if\@tempegalpos 0
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
{\egalpos}[#4]
\@egdrawnode{#2}%
\else
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{#4}
\@egdrawnode{#2}%
\fi
}
%%% first argument not an option list
% #1: player label
\def\@ibpstno#1{%
\@ifnextchar[{\@ibox{#1}}{\@ibx{#1}}%
}
% #1: player label
% #2: player label position
% #3: action label
\def\@ibox#1[#2]#3{%
\def\@branchplp{#2}
\@ifnextchar[{\@ibotx{#1}{#3}}{\@ibotnx{#1}{#3}}%
}
% #1: player label
% #2: action label
\def\@ibx#1#2{%
\def\@branchplp{t}
\@ifnextchar[{\@ibotx{#1}{#2}}{\@ibotnx{#1}{#2}}%
}
% #1: player label
% #2: action label
\def\@ibotnx#1#2{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}{\egalpos}
\@egdrawnode{#1}%
}
% #1: player label
% #2: action label
% #3: action label position OR payoffs
\def\@ibotx#1#2[#3]{%
\if#3c\def\@tempegalpos{1}
\else\if#3o\def\@tempegalpos{1}
\else\if#3i\def\@tempegalpos{1}
\else\def\@tempegalpos{0} % last argument is payoffs, not label position
\fi\fi\fi
\@ifnextchar[{\@ibtx{#1}{#2}{#3}}{\@ibtnx{#1}{#2}{#3}}%
}
% #1: player label
% #2: action label
% #3: action label position
% #4: payoffs
\def\@ibtx#1#2#3[#4]{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}%
{#3}[#4]
\@egdrawnode{#1}%
}
% #1: player label
% #2: action label
% #3: payoff
\def\@ibtnx#1#2#3{%
\if\@tempegalpos 0
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}%
{\egalpos}[#3]
\@egdrawnode{#1}%
\else
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}{#3}
\@egdrawnode{#1}%
\fi
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% TWO BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Two branches
% calculate \@egxxnum, \@egxxxnum, \@egyynum, and \@egyyynum from \@egxnum etc.
% (used also in \ctmb)
\def\@egxyiicalc{
\@eghnum=\@egabshnum
\@egvnum=\@egabsvnum
\@egxxnum=\@egxnum
\@egxxxnum=\@egxnum
\ifnum\@eghnum=0
\@egyynum=\@egynum
\@egyyynum=\@egynum
\if\@egdirection d
\advance\@egyynum by-\@eghdistance
\advance\@egyyynum by-\@eghdistance
\else\if\@egdirection u
\advance\@egyynum by\@eghdistance
\advance\@egyyynum by\@eghdistance
\else
\advance\@egyynum by-\@eghdistance
\advance\@egyyynum by\@eghdistance
\fi\fi
\else
\@egyynum=\@egabsvnum
\multiply\@egyynum by\@eghdistance
\divide\@egyynum by\@egabshnum
\if\@egdirection d
\advance\@egyynum by-\@egynum
\multiply\@egyynum by-1
\@egyyynum=\@egyynum
\advance\@egxxnum by\@eghdistance
\advance\@egxxxnum by-\@eghdistance
\else\if\@egdirection u
\advance\@egyynum by\@egynum
\@egyyynum=\@egyynum
\advance\@egxxnum by\@eghdistance
\advance\@egxxxnum by-\@eghdistance
\else\if\@egdirection r
\@egyyynum=\@egyynum
\advance\@egyynum by-\@egynum
\multiply\@egyynum by-1
\advance\@egyyynum by\@egynum
\advance\@egxxnum by\@eghdistance
\advance\@egxxxnum by\@eghdistance
\else\if\@egdirection l
\@egyyynum=\@egyynum
\advance\@egyynum by-\@egynum
\multiply\@egyynum by-1
\advance\@egyyynum by\@egynum
\advance\@egxxnum by-\@eghdistance
\advance\@egxxxnum by-\@eghdistance
\fi\fi\fi\fi
\fi
}
\def\iib{%
\@egxyiicalc
\@ifnextchar[{\@iibpsto}{\@iibpstno}
}
%%% options present
% #1: list of options to be ultimately passed to \psline (via \branchline)
\def\@iibpsto[#1]{%
\@ifnextchar[{\@iibao{#1}}{\@iiba{#1}}%
}
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
\def\@iibao#1[#2]#3{%
\@ifnextchar[{\@iibo{#1}{#2}{#3}}{\@iib{#1}{#2}{#3}}%
}
% #1: list of options for both branches
% #2: player label
\def\@iiba#1#2{%
\@ifnextchar[{\@iibo{#1}{#1}{#2}}{\@iib{#1}{#1}{#2}}%
}
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: player label position
% #5: action label 1
% #6: action label 2
\def\@iibo#1#2#3[#4]#5#6{%
\def\@branchplp{#4}
\@ifnextchar[{\@iibot{#1}{#2}{#3}{#5}{#6}}{\@iibotn{#1}{#2}{#3}{#5}{#6}}%
}
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
\def\@iib#1#2#3#4#5{%
\def\@branchplp{t}
\@ifnextchar[{\@iibot{#1}{#2}{#3}{#4}{#5}}{\@iibotn{#1}{#2}{#3}{#4}{#5}}%
}
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
\def\@iibotn#1#2#3#4#5{%
\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{\egalpos}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}{\egalpos}
\@egdrawnode{#3}%
}
% #1: list of options
% #2: list of options
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position OR payoffs
\def\@iibot#1#2#3#4#5[#6]{%
\@ifnextchar[{\@iibt{#1}{#2}{#3}{#4}{#5}{#6}}{\@iibtn{#1}{#2}{#3}{#4}%
{#5}{#6}}%
}
% if at least two optional arguments at end, check for third argument
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position or payoffs
% #7: payoffs
\def\@iibt#1#2#3#4#5#6[#7]{%
\@ifnextchar[{\@iibtz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}{\@iibtnz{#1}{#2}{#3}%
{#4}{#5}{#6}{#7}}%
}
% 3 arguments at end
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position
% #7: payoffs
% #8: payoffs
\def\@iibtz#1#2#3#4#5#6#7[#8]{%
\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
{#6}[#8]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}%
{#6}[#7]
\@egdrawnode{#3}%
}
% 2 arguments at end, so must be payoffs
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: payoffs
% #7: payoffs
\def\@iibtnz#1#2#3#4#5#6#7{%
\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
{\egalpos}[#7]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}%
{\egalpos}[#6]
\@egdrawnode{#3}%
}
% 1 argument at end, so must be egalpos
% #1: list of options for one branch
% #2: list of options for one branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position
\def\@iibtn#1#2#3#4#5#6{%
\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{#6}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}{#6}
\@egdrawnode{#3}%
}
%%% no options present
% #1: player label
\def\@iibpstno#1{%
\@ifnextchar[{\@iibox{#1}}{\@iibx{#1}}%
}
% #1: player label
% #2: player label position
% #3: action label 1
% #4: action label 2
\def\@iibox#1[#2]#3#4{%
\def\@branchplp{#2}
\@ifnextchar[{\@iibotx{#1}{#3}{#4}}{\@iibotnx{#1}{#3}{#4}}%
}
% #1: player label
% #2: action label 1
% #3: action label 2
\def\@iibx#1#2#3{%
\def\@branchplp{t}
\@ifnextchar[{\@iibotx{#1}{#2}{#3}}{\@iibotnx{#1}{#2}{#3}}%
}
% #1: player label
% #2: action label
% #3: action label
\def\@iibotnx#1#2#3{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{\egalpos}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{\egalpos}
\@egdrawnode{#1}%
}
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position OR payoffs
\def\@iibotx#1#2#3[#4]{%
\@ifnextchar[{\@iibtx{#1}{#2}{#3}{#4}}{\@iibtnx{#1}{#2}{#3}{#4}}%
}
% at least 2 arguments at end, so check for third
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position or payoffs
% #5: payoffs
\def\@iibtx#1#2#3#4[#5]{%
\@ifnextchar[{\@iibtxz{#1}{#2}{#3}{#4}{#5}}{\@iibtnxz{#1}{#2}{#3}%
{#4}{#5}}%
}
% 2 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: payoffs
% #5: payoffs
\def\@iibtnxz#1#2#3#4#5{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
{\egalpos}[#5]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
{\egalpos}[#4]
\@egdrawnode{#1}%
}
% 3 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position
% #5: payoffs
% #6: payoffs
\def\@iibtxz#1#2#3#4#5[#6]{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{#4}[#6]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#4}[#5]
\@egdrawnode{#1}%
}
% 1 argument at end, so must be egalpos
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position
\def\@iibtnx#1#2#3#4{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
{#4}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
{#4}
\@egdrawnode{#1}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% THREE BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculate coordinates for third (middle) branch
\def\@egxyiiicalc{%
\if\@egdirection d
\@egxxxxnum=\@egxnum
\ifnum\@eghnum=0
\@egyyyynum=\@egynum
\advance\@egyyyynum by-\@eghdistance
\else
\@egyyyynum=\@eghdistance
\multiply\@egyyyynum by\@egabsvnum
\divide\@egyyyynum by\@egabshnum
\advance\@egyyyynum by-\@egynum
\multiply\@egyyyynum by-1
\fi
\else\if\@egdirection u
\@egxxxxnum=\@egxnum
\ifnum\@eghnum=0
\@egyyyynum=\@egynum
\advance\@egyyyynum by\@eghdistance
\else
\@egyyyynum=\@eghdistance
\multiply\@egyyyynum by\@egabsvnum
\divide\@egyyyynum by\@egabshnum
\advance\@egyyyynum by\@egynum
\fi
\else\if\@egdirection r
\@egyyyynum=\@egynum
\@egxxxxnum=\@egxnum
\advance\@egxxxxnum by\@eghdistance
\else\if\@egdirection l
\@egyyyynum=\@egynum
\@egxxxxnum=\@egxnum
\advance\@egxxxxnum by-\@eghdistance
\fi\fi\fi\fi
}
\def\iiib{%
\@egxyiicalc
\@egxyiiicalc
\@ifnextchar[{\@iiibpsto}{\@iiibpstno}
}
%%% options present
% #1: list of options to be ultimately passed to \psline (via \branchline)
% #2: player label
\def\@iiibpsto[#1]#2{%
\@ifnextchar[{\@iiibo{#1}{#2}}{\@iiib{#1}{#2}}%
}
% #1: list of options
% #2: player label
% #3: player label position
% #4: action label 1
% #5: action label 2
% #6: action label 3
\def\@iiibo#1#2[#3]#4#5#6{%
\def\@branchplp{#3}
\@ifnextchar[{\@iiibot{#1}{#2}{#4}{#5}{#6}}{\@iiibotn{#1}{#2}{#4}%
{#5}{#6}}%
}
% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
\def\@iiib#1#2#3#4#5{%
\def\@branchplp{t}
\@ifnextchar[{\@iiibot{#1}{#2}{#3}{#4}{#5}}{\@iiibotn{#1}{#2}{#3}%
{#4}{#5}}%
}
% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
\def\@iiibotn#1#2#3#4#5{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{\egalpos}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}{\egalpos}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
{\egalpos}
\@egdrawnode{#2}%
}
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position OR payoffs
\def\@iiibot#1#2#3#4#5[#6]{%
\@ifnextchar[{\@iiibt{#1}{#2}{#3}{#4}{#5}{#6}}{\@iiibtn{#1}{#2}{#3}{#4}%
{#5}{#6}}%
}
% if at least two optional arguments at end, check for third argument
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position or payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibt#1#2#3#4#5#6[#7][#8]{%
\@ifnextchar[{\@iiibtz{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
{\@iiibtnz{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
}
% 4 arguments at end
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position
% #7: payoffs
% #8: payoffs
% #9: payoffs
\def\@iiibtz#1#2#3#4#5#6#7#8[#9]{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
{#6}[#9]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}%
{#6}[#7]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
{#6}[#8]
\@egdrawnode{#2}%
}
% 3 arguments at end, so must be payoffs
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibtnz#1#2#3#4#5#6#7#8{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
{\egalpos}[#8]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}%
{\egalpos}[#6]
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
{\egalpos}[#7]
\@egdrawnode{#2}%
}
% 1 argument at end, so must be egalpos
% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position
\def\@iiibtn#1#2#3#4#5#6{%
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{#6}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}{#6}
\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}{#6}
\@egdrawnode{#1}%
}
%%% no options present
% #1: player label
\def\@iiibpstno#1{%
\@ifnextchar[{\@iiibox{#1}}{\@iiibx{#1}}%
}
% #1: player label
% #2: player label position
% #3: action label 1
% #4: action label 2
% #5: action label 2
\def\@iiibox#1[#2]#3#4#5{%
\def\@branchplp{#2}
\@ifnextchar[{\@iiibotx{#1}{#3}{#4}{#5}}{\@iiibotnx{#1}{#3}{#4}{#5}}%
}
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
\def\@iiibx#1#2#3#4{%
\def\@branchplp{t}
\@ifnextchar[{\@iiibotx{#1}{#2}{#3}{#4}}{\@iiibotnx{#1}{#2}{#3}{#4}}%
}
% #1: player label
% #2: action label
% #3: action label
% #4: action label
\def\@iiibotnx#1#2#3#4{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{\egalpos}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{\egalpos}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{\egalpos}
\@egdrawnode{#1}%
}
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position OR payoffs
\def\@iiibotx#1#2#3#4[#5]{%
\@ifnextchar[{\@iiibtx{#1}{#2}{#3}{#4}{#5}}{\@iiibtnx{#1}{#2}{#3}%
{#4}{#5}}%
}
% at least 2 arguments at end, so check for third
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position or payoffs
% #6: payoffs
% #7: payoffs
\def\@iiibtx#1#2#3#4#5[#6][#7]{%
\@ifnextchar[{\@iiibtxz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
{\@iiibtnxz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
}
% 3 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: payoffs
% #6: payoffs
% #7: payoffs
\def\@iiibtnxz#1#2#3#4#5#6#7{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}%
{\egalpos}[#7]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
{\egalpos}[#5]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}%
{\egalpos}[#6]
\@egdrawnode{#1}%
}
% 4 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position
% #6: payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibtxz#1#2#3#4#5#6#7[#8]{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{#5}[#8]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#5}[#6]
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{#5}[#7]
\@egdrawnode{#1}%
}
% 1 argument at end, so must be egalpos
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position
\def\@iiibtnx#1#2#3#4#5{%
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{#5}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#5}
\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{#5}
\@egdrawnode{#1}%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% CONTINUUM OF BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% continuum of branches
% reset \@eghnum and \@egvnum, and for u and d directions, reset \@eghdistance
\def\@egctmsethv#1#2{%
\if\@egdirection d
\multiply\@eghdistance by\@egabsvnum
\divide\@eghdistance by\@egabshnum
\else\if\@egdirection u
\multiply\@eghdistance by\@egabsvnum
\divide\@eghdistance by\@egabshnum
\fi\fi
\@eghnum=#1\@egvnum=#2
\ifnum\@eghnum<0
\@egabshnum=-\@eghnum
\else\@egabshnum=\@eghnum\fi
\ifnum\@egvnum<0
\@egabsvnum=-\@egvnum
\else\@egabsvnum=\@egvnum\fi
\if\@egdirection d
\ifnum\@eghnum=0
\else
\multiply\@eghdistance by\@egabshnum
\divide\@eghdistance by\@egabsvnum
\fi
\else\if\@egdirection u
\multiply\@eghdistance by\@egabshnum
\divide\@eghdistance by\@egabsvnum
\fi\fi%
}
% Draw shaded triangle (using parameters from \putbranch)
\def\ctmb{%
\@egxyiicalc
\psline[linestyle=none,fillstyle=solid,fillcolor=\ctmfillcolor]%
(\@egxnum,\@egynum)(\@egxxnum,\@egyynum)(\@egxxxnum,\@egyyynum)%
\@ifnextchar[{\@ctmbpsto}{\@ctmbpstno}
}
\def\ctmbarc{%
\@egxyiicalc
\psline(\@egxnum,\@egynum)(\@egxxnum,\@egyynum)%
\psline(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum)%
\@tempcntx=\@egxnum%
\advance\@tempcntx by-\@egxxnum%
\divide\@tempcntx by2
\@tempcnty=\@egynum%
\advance\@tempcnty by-\@egyynum%
\divide\@tempcnty by2
\@egxdim=\@tempcntx\psxunit%
\@egydim=\@tempcnty\psyunit%
% see pst-3d.tex for \pst@pyth and pstricks.tex for its use
\pst@pyth\@egxdim\@egydim\@egrad%
\psclip%
{\psline[linestyle=none](\@egxnum,\@egynum)(\@egxxnum,\@egyynum)%
(\@egxxxnum,\@egyyynum)}
\pscircle[linestyle=\egarclinestyle,linewidth=\egarclinewidth,%
linecolor=\egarclinecolor](\@egxnum,\@egynum){\@egrad}
\endpsclip
\@ifnextchar[{\@ctmbpsto}{\@ctmbpstno}
}
% first argument is option
%
% #1: list of options
% #2: player name
\def\@ctmbpsto[#1]#2{%
\@ifnextchar[{\@ctmbo{#1}{#2}}{\@ctmb{#1}{#2}}%
}
% #1 is option list
% #2 is player name
% #3 is player label position
% (#4,#5) is direction of single branch
% #6 is action label
\def\@ctmbo#1#2[#3](#4,#5)#6{%
\@egctmsethv{#4}{#5}
\@ifnextchar[{\@ctmbot{#1}{#2}{#3}{#6}}{\@ctmbotn{#1}{#2}{#3}{#6}}%
}
% #1 is option list
% #2 is player name
% (#3,#4) direction of branch
% #5 is action label
\def\@ctmb#1#2(#3,#4)#5{%
\@egctmsethv{#3}{#4}
\@ifnextchar[{\@ctmbot{#1}{#2}{t}{#5}}{\@ctmbotn{#1}{#2}{t}{#5}}%
}
% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position OR payoff
\def\@ctmbot#1#2#3#4[#5]{%
\@ifnextchar[{\@ctmbt{#1}{#2}{#3}{#4}{#5}}{\@ctmbtn{#1}{#2}{#3}%
{#4}{#5}}%
}
% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position
% #6: payoff
\def\@ctmbt#1#2#3#4#5[#6]{
% need to recalculate \@eghdistance for u and d directions
\ib[#1]{#2}[#3]{#4}[#5][#6]
}
% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position OR payoff
\def\@ctmbtn#1#2#3#4#5{
\ib[#1]{#2}[#3]{#4}[#5]
}
% #1: option list
% #2: player name
% #3: player label position
% #4: action label
\def\@ctmbotn#1#2#3#4{%
\ib[#1]{#2}[#3]{#4}
}
% first argument is not option
%
% #1: player name
\def\@ctmbpstno#1{%
\@ifnextchar[{\@ctmbox{#1}}{\@ctmbx{#1}}%
}
% #1: player name
% #2: player label position
% (#3,#4): direction of branch
% #5: action label
\def\@ctmbox#1[#2](#3,#4)#5{%
\@egctmsethv{#3}{#4}
\@ifnextchar[{\@ctmbotx{#1}{#2}{#5}}{\@ctmbotnx{#1}{#2}{#5}}%
}
% #1: player name
% (#2,#3): direction of branch
% #4: action label
\def\@ctmbx#1(#2,#3)#4{%
\@egctmsethv{#2}{#3}
\@ifnextchar[{\@ctmbotx{#1}{t}{#4}}{\@ctmbotnx{#1}{t}{#4}}%
}
% #1: player name
% #2: player label position
% #3: action label
% #4: action label position
\def\@ctmbotx#1#2#3[#4]{%
\@ifnextchar[{\@ctmbtx{#1}{#2}{#3}{#4}}{\@ctmbtnx{#1}{#2}{#3}{#4}}%
}
% #1: player name
% #2: player label position
% #3: action label
\def\@ctmbotnx#1#2#3{%
\ib{#1}[#2]{#3}
}
% #1: player name
% #2: player label position
% #3: action label
% #4: action label position
% #5: payoffs
\def\@ctmbtx#1#2#3#4[#5]{%
\ib{#1}[#2]{#3}[#4][#5]
}
% #1: player name
% #2: player label position
% #3: action label
% #4: payoffs
\def\@ctmbtnx#1#2#3#4{%
\ib{#1}[#2]{#3}[#4]
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% INFORMATION SETS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Information set
% \infoset(x,y)[direction]{length}{name of player}[player label position]
%
\def\infoset(#1,#2){%
\def\@egdirection{\@egdefdirection} % in case reset by earlier \putbranch
\@ifnextchar[{\@infoseto(#1,#2)}{\@infoset(#1,#2)}%
}
\def\@infoseto(#1,#2)[#3]#4#5{%
\def\@infosetdir{#3}%
\@ifnextchar[{\@infos(#1,#2){#4}{#5}}{\@infosn(#1,#2){#4}{#5}}%
}
\def\@infoset(#1,#2)#3#4{%
\if\@egdirection d
\def\@infosetdir{h}%
\else\if\@egdirection u
\def\@infosetdir{h}%
\else\if\@egdirection r
\def\@infosetdir{v}%
\else\if\@egdirection l
\def\@infosetdir{v}%
\fi\fi\fi\fi
\@ifnextchar[{\@infos(#1,#2){#3}{#4}}{\@infosn(#1,#2){#3}{#4}}%
}
\def\@infos(#1,#2)#3#4[#5]{%
\def\@branchplp{#5}
\@infosetx(#1,#2){#3}{#4}%
}
\def\@infosn(#1,#2)#3#4{%
\if\@egdirection d
\if\@infosetdir h
\def\@branchplp{u}
\else
\def\@branchplp{r}
\fi
\else\if\@egdirection u
\if\@infosetdir h
\def\@branchplp{d}
\else
\def\@branchplp{r}
\fi
\else\if\@egdirection r
\if\@infosetdir v
\def\@branchplp{l}
\else
\def\@branchplp{u}
\fi
\else\if\@egdirection l
\if\@infosetdir v
\def\@branchplp{r}
\else
\def\@branchplp{u}
\fi
\fi\fi\fi\fi
\@infosetx(#1,#2){#3}{#4}%
}
\def\@infosetx(#1,#2)#3#4{%
\fboxrule 0pt\fboxsep\egplayerlabelsep
\@egxnum=#1\@egxxnum=#1\@egynum=#2\@egyynum=#2\@eghnum=#3\@egvnum=#3
\divide\@egvnum by\infosetdotsep% space between dots (not a vnum at all)
\advance\@egvnum by-1% because won't put dots at nodes
\if\@infosetdir h
% \multips doesn't start at right point
\advance\@egxxnum by\infosetdotsep% put first dot @ next pt after node
\multiput(\@egxxnum,\@egynum)(\infosetdotsep,0){\@egvnum}{\infosetdot}
\else\if\@infosetdir v%
\advance\@egyynum by\infosetdotsep
\multiput(\@egxnum,\@egyynum)(0,\infosetdotsep){\@egvnum}{\infosetdot}
\fi\fi
% \psline doesn't allow control of dot style, it seems
% \psline[linestyle=dotted](\@egxnum,\@egynum)(\@egxxnum,\@egyynum)
\psset{framesep=\egplayerboxsep}
\fboxrule 0pt\fboxsep\egplayerlabelsep
\divide\@eghnum by2
\if\@infosetdir h
\advance\@egxnum by\@eghnum
\if\@branchplp o
\rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\else\if\@branchplp u
\rput[b](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\else\if\@branchplp d
\rput[t](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\fi\fi\fi
\else\if\@infosetdir v
\advance\@egynum by\@eghnum
\if\@branchplp o
\rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\else\if\@branchplp l
\rput[r](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\else\if\@branchplp r
\rput[l](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
\fi\fi\fi
\fi\fi
}
%%%%%%%%%%%%%%%%%%%%%%
% egame environment
%%%%%%%%%%%%%%%%%%%%%%
\def\egame(#1,#2){%
\initialtrue
\@ifnextchar[{\@egulo(#1,#2)}{\@egul(#1,#2)}%
}
% set unit length for game
\def\@egulo(#1,#2)[#3]{%
\psset{unit=#3}
\begin{pspicture}(#1,#2)
}
\def\@egul(#1,#2){%
\psset{unit=0.1mm}
\begin{pspicture}(#1,#2)
}
\def\endegame{\end{pspicture}}