defaultfont := "phvr8r"; prologues := 0; boolean colors; colors = true; verbatimtex \documentclass{article} \usepackage{multicol} \begin{document} \def\lorem{ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.} \def\loremii{\lorem\lorem} \def\loremiii{\lorem \lorem \lorem \lorem} \parskip .5cm \font\hv = phvr8r scaled 1200 \font\foofonti = cmfrak scaled 1200 \font\foofontii = cmcss12 scaled 1000 etex; boolean bgs; bgs = true; vardef doc(suffix s)(expr col, pict) = interim bboxmargin := 10pt; picture s.p; picture s.psol; s.p = nullpicture; addto s.p contour bbox(pict) withcolor white; addto s.p also currentpicture if colors: withcolor col else: withcolor (.90, .90, .90) fi ; currentpicture := nullpicture; clip s.p to bbox(pict); addto s.p also pict; addto s.p doublepath bbox(pict) withpen pencircle scaled 4pt; s.psol := nullpicture; addto s.psol contour bbox(pict) withcolor (.95, .95, .95); addto s.psol also pict; addto s.psol doublepath bbox(pict) withpen pencircle scaled 4pt; pair s.size; s.size = (urcorner pict) - (llcorner pict); pair s.loc; transform s.tr; enddef; vardef docpicraw(suffix s)(expr locp) = s.tr := locp; s.loc := (0,0) transformed locp; (if bgs: s.p else: s.psol fi transformed locp) enddef; def docpic(suffix s)(expr locp) = addto currentpicture also docpicraw(s, locp); enddef; vardef docpicclip(suffix s)(expr locp, clipp) = save p, pa; picture p; p := docpicraw(s, locp); path pa; addto p doublepath clipp transformed locp withpen pencircle scaled 4pt; clip p to clipp transformed locp; clip p to bbox(s.p) transformed locp; addto currentpicture also p; enddef; def ploc(suffix s) = show s.loc; enddef; string lnk[].a; string lnk[].b; pair lnk[].a.l; transform lnk[].a.loc; pair lnk[].b.l; transform lnk[].b.loc; path lnk[].a.p; path lnk[].b.p; nlinks = 0; def linkend(suffix e)(expr n, ed, ep) = lnk[n].e := ed; lnk[n].e.l := center(ep); lnk[n].e.p := ep shifted -center(ep); enddef; def link(expr sd, sp, ed, ep) = linkend(a, nlinks, sd, sp); linkend(b, nlinks, ed, ep); nlinks := nlinks+1; enddef; def strloc(expr str) = scantokens (str & ".tr") enddef; def locatelinkend(suffix e)(expr ind) = lnk[ind].e.loc := identity shifted lnk[ind].e.l transformed strloc(lnk[ind].e) ; enddef; def plainlinkend(suffix e)(expr ind) = draw lnk[ind].e.p transformed lnk[ind].e.loc withpen pencircle scaled 4pt; draw (((0,0) transformed lnk[ind].e.loc) ) withpen pencircle scaled 40pt; enddef; vardef plainlink(expr ind, offsa, offsb, ta, tb) = locatelinkend(a, ind); locatelinkend(b, ind); plainlinkend(a, ind) plainlinkend(b, ind) save la, lb; pair la,lb; la = (0,0) transformed lnk[ind].a.loc; lb = (0,0) transformed lnk[ind].b.loc; draw la{right} .. tension ta and tb .. (.33333[la,lb] + offsa) .. tension tb .. (.66666[la,lb] + offsb) .. tension tb and ta .. lb{right} withpen pencircle scaled 6pt; enddef; def cir(expr x, y, r) = (x-2*r,y)...(x,y-r)...(x+2*r,y)...(x,y+r)...cycle enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 %%%%% THE LINKS link("a", cir(50,30,25), "c", cir(70,160,37)); link("b", cir(50,230,30), "a", cir(350,290,30)); link("b", cir(60,170,35), "d", cir(150,60,50)); link("c", cir(75,110,40), "b", cir(58,310,32)); link("a", cir(48,100,26), "e", cir(220,150,32)); pair p; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% THE DOCUMENTS fill unitsquare scaled 700 shifted (-100,-100) withcolor black; %for i = -100 step 30 until 800 : % p := (i,-50); % fill p -- p+(100,800) -- p+(125,800) -- p+(15,0) -- cycle; %endfor; doc(a, (1,.85,.75), btex \hv\vbox{\hsize=3cm\tolerance=10000 \columnseprule=.4pt \columnsep=.5cm \parskip .5cm \linewidth=18cm\begin{multicols}{5}\loremiii \end{multicols}}etex); %for i = -100 step 40 until 200 : %for j = -100 step 40 until 800 : % p := (i-.1*j,j+.05*i); % fill p .. p+(20,5) .. p+(5,20) .. cycle; %endfor; %endfor; fill unitsquare scaled 700 shifted (-100,-100) withcolor black; doc(b, (.70,1,.70), btex \rm\vbox{\hsize=4.5cm\tolerance=10000\loremii}etex); fill unitsquare scaled 700 shifted (-100,-100) withcolor black; %draw (0,0) % for i = 0 upto 200: % .. (uniformdeviate(600), uniformdeviate(600)) % endfor % withpen pencircle scaled 1.5 xscaled 2; doc(c, (.80,.75,1), btex \foofonti\vbox{\linewidth=15cm\tolerance=10000 \begin{multicols}{3}\loremiii\end{multicols}} etex); fill unitsquare scaled 700 shifted (-100,-100) withcolor black; %for i = -100 step 20 until 800 : % p := (i,0); % draw p % for j = 1 step 10 until 600: % .. p + (15*sind(j*5), j) % endfor % withpen pencircle scaled 20 xscaled .2; %endfor; doc(d, (.60,1,1), btex \foofontii\vbox{\hsize=10.5cm\tolerance=10000\loremii}etex); fill unitsquare scaled 700 shifted (-100,-100) withcolor black; %for i = -100 step 30 until 800 : % p := (i,0); % fill p -- p+(-100,800) -- p+(-125,800) -- p+(-15,0) -- cycle; %endfor; % %for i = -100 step 30 until 800 : % p := (0,i); % fill p -- p+(800,-50) -- p+(800,-60) -- p+(0,-10) -- cycle; %endfor; doc(e, (1,.70,1), btex \sc\vbox{ \linewidth=10cm \begin{multicols}{3} \raggedright\tolerance=10000\loremii \end{multicols}} etex); beginfig(1); spacing = 25; bscale = .85; docpic(a, identity); %docpic(b, identity shifted (a.loc + (0, -ypart(b.size)-50))); %docpic(c, identity shifted (b.loc + (xpart(b.size)+50, 0))); %docpic(d, identity shifted (b.loc + (0, -400))); %docpic(e, identity shifted (d.loc + (xpart(d.size)+50, 0))); docpic(b, identity scaled bscale shifted (a.loc + (xpart(a.size)+spacing, 0))); docpic(c, identity shifted (b.loc + (bscale * xpart(b.size)+spacing, 0))); docpic(d, identity shifted (c.loc + (xpart(c.size)+spacing, 0))); docpic(e, identity shifted (d.loc + (xpart(d.size)+spacing, 0))); def doclabel(suffix d)(expr l) = label.lrt(l infont defaultfont scaled 10 , d.loc + (0,ypart d.size)); enddef; doclabel(a, "1"); doclabel(b, "2"); doclabel(c, "3"); doclabel(d, "4"); doclabel(e, "5"); plainlink(0, (100,-60), (100, -60), .75, 1); plainlink(1, (60, 100), (-60,-100), .8, 1.1); plainlink(2, (-50,120),(0, 0), .8, .8); plainlink(3, (50, -160), (-50, -160), .8, .8); plainlink(4, (0, -60), (0, 0), .8, .8); % addto currentpicture also a.p; % % y2=-400; % % addto currentpicture also c.p shifted(0,y2); % addto currentpicture also d.p shifted(xpart(c.size)+50,y2); % addto currentpicture also e.p shifted(0,-800); % addto currentpicture also b.p shifted(xpart(e.size)+50,-800); scantokens("ploc(b)"); endfig; ccx = 210; ccy = 160; cor = 20; path csp; csp = (-200, 0){up} ... (-200+cor, 150-cor) ... (0, 150){right}; csp := (csp & (reverse csp xscaled -1) ..(csp scaled -1) ..(reverse csp yscaled -1)) .. cycle ; path cbp; cbp = (-ccx,-ccy) -- (-ccx,ccy) -- (ccx, ccy) -- (ccx,-ccy) -- cycle ; boolean fillcscreen; fillcscreen = false; def cscreenkey = fillcscreen := true; enddef; vardef cscreen = clip currentpicture to csp; if fillcscreen: save p; picture p; p := currentpicture; fill cbp withcolor black; fill csp withcolor white; addto currentpicture also p; fi draw csp withpen pencircle scaled 3pt; draw cbp withpen pencircle scaled 2pt;; fillcscreen := false; enddef; bboxmargin := 0pt; def atrans(expr e) = identity shifted(-50,-50) scaled (e[1.2, .9]) rotated (e*15) shifted (e[(0,0), (-150,25)]) enddef; def aclip(expr e) = lnk0a.p scaled ((sqrt(e))[7, 2]) shifted lnk0a.l enddef; def ctrans(expr e) = identity shifted (-lnk0b.l) scaled (e[.9,1.2]) rotated (e[-15,0]) shifted (e[(150,-60),(0,0)]) enddef; def cclip(expr e) = lnk0b.p scaled (e[1.05, 5]) shifted lnk0b.l enddef; def btrans(expr e) = identity shifted (-lnk3b.l) scaled (e[1.0,1.15]) rotated (e[-15,0]) shifted (e[(150, -70),(0,20)]) enddef; def bclip(expr e) = lnk3b.p scaled(e[1.05, 5]) shifted lnk3b.l enddef; def linkline(expr ind) = locatelinkend(a, ind); locatelinkend(b, ind); draw ((0,0) transformed lnk[ind].a.loc) .. ((0,0) transformed lnk[ind].b.loc) withpen pencircle scaled 6pt; draw ((0,0) transformed lnk[ind].a.loc) .. ((0,0) transformed lnk[ind].a.loc) withpen pencircle scaled 12pt; draw ((0,0) transformed lnk[ind].b.loc) .. ((0,0) transformed lnk[ind].b.loc) withpen pencircle scaled 12pt; enddef; def aniframe(expr fract) = docpicclip(a, atrans(fract), aclip(fract)); % link 0 docpicclip(c, ctrans(fract), cclip(fract)); if fract>.5: docpicclip(a, atrans(fract), aclip(fract)); fi; if fract < .01: docpicclip(e, identity shifted (-lnk4b.l) scaled .7 rotated -5 shifted (150,60), lnk4b.p scaled 1.5 shifted lnk4b.l); linkline(4); fi; if fract > .99: docpicclip(b, btrans(0), bclip(0)); linkline(3); fi; linkline(0); cscreen; enddef; % Now, c starts to move away. % Inverting the parameter to make change easier. def ctransii(expr e) = identity shifted (e[(-lnk3a.l),(-lnk0b.l)]) scaled (e[.9,1.2]) rotated (e[15,0]) shifted (e[(-150,-30),(0,0)]) enddef; def cclipii(expr e) = lnk3a.p scaled (e[1.05, 5]) shifted lnk3a.l enddef; def aniframeii(expr fract) = % link 0 docpicclip(c, ctransii(1-fract), cclipii(1-fract)); docpicclip(b, btrans(fract), bclip(fract)); if fract>.5: fi; if fract < .01: docpicclip(a, atrans(fract), aclip(fract)); linkline(0); fi; if fract > .99: docpicclip(d, identity shifted (-lnk2b.l) scaled .7 rotated -15 shifted (150,-140), lnk2b.p scaled 1.05 shifted lnk2b.l); linkline(2); docpicclip(a, identity shifted (-lnk1b.l) scaled 1.0 rotated -15 shifted (150,-50), lnk1b.p scaled 1.5 shifted lnk1b.l); linkline(1); fi; linkline(3); cscreen; enddef; curframe = 2; def frames = % Initial position beginfig(curframe); cscreenkey; aniframe(0); endfig; beginfig(curframe+1); aniframe(0.3); endfig; beginfig(curframe+2); aniframe(0.65); endfig; beginfig(curframe+3); cscreenkey; aniframe(1.0); endfig; beginfig(curframe+4); aniframeii(.3); endfig; beginfig(curframe+5); aniframeii(.65); endfig; beginfig(curframe+6); cscreenkey; aniframeii(1); endfig; curframe := curframe + 7; enddef; if false: bgs := false; frames; bgs := true; frames; fi beginfig(42); picture pics[]; currentpicture := nullpicture; cscreenkey; aniframe(0); pics[0] := currentpicture; currentpicture := nullpicture; aniframe(0.3); pics[1] := currentpicture; currentpicture := nullpicture; aniframe(.65); pics[2] := currentpicture; currentpicture := nullpicture; cscreenkey; aniframe(1.0); pics[3] := currentpicture; currentpicture := nullpicture; aniframeii(.3); pics[4] := currentpicture; currentpicture := nullpicture; aniframeii(.65); pics[5] := currentpicture; currentpicture := nullpicture; cscreenkey; aniframeii(1); pics[6] := currentpicture; currentpicture := nullpicture; x0 := 450; y0 := -350; addto currentpicture also pics[0]; addto currentpicture also pics[1] shifted (x0,0); addto currentpicture also pics[2] shifted (2*x0,0); addto currentpicture also pics[3] shifted (3*x0,0); addto currentpicture also pics[4] shifted (3*x0,1*y0); addto currentpicture also pics[5] shifted (3*x0,2*y0); addto currentpicture also pics[6] shifted (3*x0,3*y0); ahlength := 50pt; drawarrow (0,-250){right}...(2*x0,1.2*y0)...(3*x0-300, 3*y0){down} withpen pencircle scaled 20pt; endfig; verbatimtex \end{document} etex end;