% This file contains metaobj code for several figures of the pstricks manual, % regarding connections, matrices and trees. % D. Roegel, May 6-9, 2001 verbatimtex %&latex \documentclass{article} \begin{document} etex def TCs= new_Circle_("")("filled(true)") enddef; def Tdot(expr p)= new_Circle_(p)("circmargin(-.2mm)") enddef; def Toplus= Tdot(btex $+$ etex) enddef; input metaobj % page 26 of beta manual beginfig(1); setObjectDefaultOption("Matrix")("hsep")(1cm); setObjectDefaultOption("Matrix")("vsep")(1cm); newBox.a(btex $U$ etex) "framed(false)"; newBox.b(btex $X\times_Z Y$ etex) "framed(false)"; newBox.c(btex $X$ etex) "framed(false)"; newBox.d(btex $Y$ etex) "framed(false)"; newBox.e(btex $Z$ etex) "framed(false)"; newMatrix.mat(3,3)(a,nb,nb,nb,b,c,nb,d,e); mat.c=origin; mcline.mat(1,1,2,2) "name(a)"; ObjLabel.mat(btex $y$ etex) "labpathname(a)","labdir(llft)"; mcline.mat(1,1,2,3) "doubleline(true)", "arrows(draw)","linestyle(dashed evenly)", "name(b)"; ObjLabel.mat(btex $x$ etex) "labpathname(b)","labdir(urt)"; mcline.mat(2,2,2,3), "name(c)"; ObjLabel.mat(btex $p$ etex) "labpathname(c)","labdir(bot)"; mcline.mat(2,2,3,2), "name(d)"; ObjLabel.mat(btex $q$ etex) "labpathname(d)","labdir(lft)"; mcline.mat(3,2,3,3), "name(e)"; ObjLabel.mat(btex $g$ etex) "labpathname(e)","labdir(bot)"; mcline.mat(2,3,3,3), "name(f)"; ObjLabel.mat(btex $f$ etex) "labpathname(f)","labdir(rt)"; drawObj(mat); endfig; clearObj a,b,c,d,e,mat; % page 27 of beta manual beginfig(3); newCircle.a(btex A etex); newCircle.b(btex B etex); newCircle.c(btex C etex); newCircle.d(btex D etex); newCircle.e(btex E etex); verbatimtex \small etex; newMatrix.mat(3,3)(nb,a,nb,b,e,c,nb,d,nb) "hsep(2cm)", "vsep(2cm)"; mcline.mat(2,2,2,3) "name(a)"; ObjLabel.mat(btex a etex) "labpathname(a)","labpos(0.75)", "labdir(top)"; mcline.mat(2,2,2,1) "name(b)"; ObjLabel.mat(btex b etex) "labpathname(b)","labdir(bot)"; mcline.mat(3,2,2,1) "name(c)"; ObjLabel.mat(btex c etex) "labpathname(c)","labdir(llft)"; mcarc.mat(3,2,1,2) "arcangleA(-40)","arcangleB(-40)", "border(3pt)", "name(d)";%, %"laberase(true)"; ObjLabel.mat(btex d etex) "labpathname(d)","labdir(lrt)", "labpos(0.3)"; ObjLabel.mat(btex e etex) "labpathname(d)","labdir(llft)", "labpos(0.7)"; mcarc.mat(1,2,2,1) "arcangleA(12)","arcangleB(12)", "name(f)"; ObjLabel.mat(btex f etex) "labpathname(f)","labdir(lrt)"; mcarc.mat(2,1,1,2) "arcangleA(12)","arcangleB(12)", "name(g)"; ObjLabel.mat(btex g etex) "labpathname(g)","labdir(ulft)"; mat.c=origin; drawObj(mat); endfig; % page 28 of beta manual clearObj a,b,c,d,e,mat; beginfig(4); newCircle.x(btex X etex); newCircle.y(btex Y etex) "framed(false)"; newCircle.Z(btex Z etex) "framed(false)"; % |z| is reserved newMatrix.mat(2,2)(nb,x,y,Z) "hsep(1cm)", "vsep(2cm)"; mcline.mat(1,2,2,1) "nodesepA(3pt)"; mcline.mat(1,2,2,2) "nodesepA(3pt)"; mcline.mat(2,1,2,2) "linestyle(dashed withdots)"; mat.c=origin; drawObj(mat); endfig; clearObj x,y,Z,mat; % page 33 of beta manual beginfig(5); setCurveDefaultOption("arrows")("draw"); % works t=_T(new_Ellipse(btex root etex))(TCs,TCs,TCs,TCs); Obj(t).c=origin; draw_Obj(t); endfig; beginfig(55); setCurveDefaultOption("arrows")("draw"); u=T_(Tn)(TCs, T_(Tc)(TCs,TCs)("hbsep(5mm)","hideleaves(true)"), TCs)("hbsep(5mm)"); Obj(u).c=origin; draw_Obj(u); endfig; % page 34 of beta manual beginfig(6); setCurveDefaultOption("arrows")("draw"); t:=_T(new_Circle(btex $X$ etex)) (new_Box_(btex $\tilde{\tilde{X}}$ etex)("framed(false)"), new_Box_(btex $x$ etex)("framed(false)"), new_Box_(btex $y$ etex)("framed(false)")); Obj(t).c=origin; draw_Obj(t); endfig; beginfig(66); setCurveDefaultOption("arrows")("draw"); % in the next example, we align the baselines, by adding \strut s: t:=_T(new_Circle(btex $X$ etex)) (new_Box_(btex \strut $\smash{\tilde{\tilde{X}}}$ etex)("framed(false)"), new_Box_(btex \strut $x$ etex)("framed(false)"), new_Box_(btex \strut $y$ etex)("framed(false)")); Obj(t).c=origin; draw_Obj(t); endfig; % page 35 of beta manual beginfig(7); setCurveDefaultOption("arrows")("draw"); setCurveDefaultOption("nodesepA")(3pt); % works setCurveDefaultOption("nodesepB")(3pt); % works setObjectDefaultOption("Tree")("hideleaves")(true); % works t:=_T(TCs) (_T(TCs)(TCs,Tn), _T(TCs)(TCs,_T(TCs)(Tn,TCs)) ); Obj(t).c=origin; draw_Obj(t); setCurveDefaultOption("nodesepA")(0); % works setCurveDefaultOption("nodesepB")(0); % works endfig; % page 36 of beta manual beginfig(8); setObjectDefaultOption("Tree")("hideleaves")(true); t:=T_(new_Circle(btex foo etex)) (new_HFan_(1cm,0)("filled(true)"), Tf, _T(new_RBox(btex bar etex))(new_HFan(1cm,0)) ) ("Dalign(center)"); Obj(t).c=origin; draw_Obj(t); setObjectDefaultOption("Tree")("hideleaves")(false); endfig; beginfig(88); setObjectDefaultOption("Tree")("hideleaves")(true); t:=_T(new_Circle(btex foo etex)) (_T(new_HFan_(1cm,0)("filled(true)","fillcolor(red)","fanlinearc(1mm)" %,"pointedfan(false)" )) (TCs,new_HFan_(1cm,0)("fanlinestyle(dashed evenly)"))); Obj(t).c=origin; draw_Obj(t); setObjectDefaultOption("Tree")("hideleaves")(false); endfig; % page 37 of beta manual beginfig(9); setCurveDefaultOption("arrows")("draw"); setObjectDefaultOption("Tree")("hideleaves")(true); % works setCurveDefaultOption("nodesepA")(3pt); % works setCurveDefaultOption("nodesepB")(3pt); % works setObjectDefaultOption("Tree")("Ualign")("center"); setObjectDefaultOption("Tree")("Lalign")("center"); setObjectDefaultOption("Tree")("hbsep")(5mm); setObjectDefaultOption("Tree")("vbsep")(5mm); setObjectDefaultOption("Tree")("hsep")(2cm); setObjectDefaultOption("Tree")("vsep")(2cm); t:=T_(Tc_(1.5mm))(T_(Tc_(1.5mm))(Toplus,Toplus)("treemode(L)"),Toplus,Toplus)("treemode(U)"); Obj(t).c=origin; draw_Obj(t); setCurveDefaultOption("nodesepA")(0pt); % works setCurveDefaultOption("nodesepB")(0pt); % works endfig; beginfig(10); setCurveDefaultOption("arrows")("draw"); setObjectDefaultOption("Tree")("hsep")(1cm); setObjectDefaultOption("Tree")("vsep")(1cm); % we draw two trees which share a root node: t:=T_(new_Circle(btex root etex))(Tr_(btex B etex))("treemode(L)"); Obj(t).c=origin; u:=_T(obj(Obj(t).root))(Tr_(btex A1 etex),Tr_(btex A2 etex)); draw_Obj(t); draw_Obj(u); endfig; % page 38 of beta manual beginfig(11); setCurveDefaultOption("arrows")("draw"); setObjectDefaultOption("Tree")("Dalign")("center"); setObjectDefaultOption("Tree")("hbsep")(5mm); t:=_T(Tc)(TCs, T_(Tc)(new_Circle_("")("filled(true)","circmargin(15pt)"),TCs) ("treenodehsize(1cm)"), TCs); Obj(t).c=origin; draw_Obj(t); endfig; beginfig(110); setCurveDefaultOption("arrows")("draw"); t:=_T(Tc)(Tr_(btex $j$ etex),Tr_(btex $K_4$ etex),Tr_(btex $x>y$ etex)); Obj(t).c=origin; draw_Obj(t); endfig; beginfig(111); setCurveDefaultOption("arrows")("draw"); t:=T_(Tc)(Tr_(btex $j$ etex),Tr_(btex $K_4$ etex),Tr_(btex $x>y$ etex)) ("treenodehsize(5mm)"); Obj(t).c=origin; draw_Obj(t); endfig; setObjectDefaultOption("Tree")("Dalign")("top"); setObjectDefaultOption("Tree")("hideleaves")(false); % works % page 39 of beta manual beginfig(12); setCurveDefaultOption("arrows")("draw"); t:=_T(TCs)(Tc,_T(TCs)(_T(Tc)(Tc,Tc,Tc),TCs,TCs,TCs)); Obj(t).c=origin; draw_Obj(t); endfig; beginfig(120); setCurveDefaultOption("arrows")("draw"); setObjectDefaultOption("Tree")("hideleaves")(true); t:=_T(TCs)(Tc,_T(TCs)(_T(Tc)(Tc,Tc,Tc),TCs,TCs,TCs)); Obj(t).c=origin; draw_Obj(t); setObjectDefaultOption("Tree")("hideleaves")(false); endfig; beginfig(121); setCurveDefaultOption("arrows")("draw"); t:=T_(TCs)(_T(TCs)(TCs,TCs),_T(TCs)(TCs,TCs))("vsep(.5cm)","hbsep(2cm)"); Obj(t).c=origin; draw_Obj(t); endfig; % page 40 of beta manual beginfig(13); % We don't have a hook for a given level as PSTricks does, % so we have to give the hsep option several times; % however, we could avoid it by building the tree in a non-streamlined way. % Also, the labels must be given in the opposite order. setCurveDefaultOption("arrows")("draw"); setObjectDefaultOption("Tree")("treemode")("R"); %setObjectDefaultOption("Tree")("treeflip")(true); t:=_T(Tc)( _T(TCs)(T_(TCs)(Tr_(btex $J_1$ etex),Tr_(btex $J_2$ etex))("hsep(3cm)"), T_(TCs)(Tr_(btex $K_1$ etex),Tr_(btex $K_2$ etex))("hsep(3cm)") ), _T(TCs)(T_(TCs)(Tr_(btex $Y_1$ etex),Tr_(btex $Y_2$ etex))("hsep(3cm)"), T_(TCs)(Tr_(btex $X_1$ etex),Tr_(btex $X_2$ etex))("hsep(3cm)") ) ); Obj(t).c=origin; draw_Obj(t); endfig; end