12 22 METAPOST 1 METAPOST ps TEX METAPOST 1. METAPOST 2. METAPOST mpost.exe 3. TEX dvi ps pdf [1] METAPOST beginfig(0) path pp ; u := 2cm ; Angle := 10 ; n = 360 / Angle ; pp := (-u,-u )--(-u,u )--(u,u )--(u,-u )-- cycle; draw pp ; for i = 1 upto n : pp := pp scaled (1/(sind(Angle)+cosd(Angle))) rotated Angle ; draw pp ; endfor; 1: end 2 METAPOST numeric 4096 pair (x,y) color (r,g,b) path (a,b) (c,d) (a,b )..( c,d) picture transform pair path picture string string example boolean bool if pen pair numeric color path picture transform numeric pen path
pair path 13 22 3 pair path numeric sind cosd pair color beginfig(0) u := 2cm ; pair a ; draw ( 0u, 0u ) -- ( u, u ) ; draw ( u, 0u ) -- ( 0u, 1u ) ; a = whatever[( 0u, 0u ), ( u, u )] ; a = whatever[( u, 0u ), ( 0u, 1u )] ; dotlabel.bot ( "a", a ) ; a 2: whatever a [p1,p2] color path path pp ; pp := point1 point2... pointn[ cycle].... Bézier cycle Bézier control(x1,y1) and (x2,y2) control(x,y) point{dir} dir left right up down point{dir a} a point1.. tension a..point2 a a 3 4 point1.. tension a and b..point2 curl point1{curl c} METAPOST fullcircle halfcircle 4 picture transform picture picture picture currentpicture currentpicture := nullpicture ; pair path scaled xscaled yscaled rotated shifted rotatedaround picture Sierpinski
picture transform 14 22 beginfig(3); IteralTime := 7 ; u := 5cm ; picture pictemp ; path triangle ; triangle := ( 1u, 0u ) ( 0u, u sqrt( 3 ) ) ( 1u, 0u ) cycle ; filldraw triangle ; pictemp := currentpicture scaled 0.5 ; for i := 1 upto IteralTime : endfor; endfig; currentpicture := nullpicture ; draw pictemp shifted ( 0.5u, 0u ) ; draw pictemp shifted ( 0.5u, 0u ) ; draw pictemp shifted ( 0u, 0.5 u sqrt (3) ) ; pictemp := currentpicture scaled 0.5 ; METAPOST TEX picture picture picture pp ; pp := thelabel( btex \TeX s Output, ( 0, 0 ) ) ; btex \TeX s Output picture L A TEX %&latex \documentclass{article} \usepackage{cjk} \begin{cjk*}{gbk}{song} \begin{document} beginfig(2) draw fullcircle scaled 2cm ; label( btex, ( 0, 0 ) ) ; \end{cjk*} 3: LATEX \end{document} beginfig endfig L A TEX ps METAPOST
15 22 5 METAPOST numeric p[] ; METAPOST p1 p3.1 newinternal mu, nn, tl, A, stp, edp ; mu := 1mm ; nn := 16 ; tl := 100 ; A := 10mu ; stp := 1 ; edp := tl+1 ; for j := 0 upto ( tl nn ) : beginfig(j) path pp ; numeric rp[] ; for i := stp upto edp : rp[ i ] := 0 ; stwp1 := j ; stwp2 := tl nn j; for i := 1 upto nn : rp[( stwp1+i)] := rp[stwp1+i] + A sind(i/nn 360) ; rp[( stwp2+i)] := rp[stwp2+i] + A sind(i/nn 360) ; pp := (stp mu, rp[stp ] ) for i := stp+1 upto edp :.. ( i mu, rp[i ] ) draw pp ; setbounds currentpicture to (stp mu, 2A) (edp mu, 2A) (edp mu,2a) (stp mu,2a) cycle; end
16 22 6 vardef macro name( expr args ) = doings ; enddef ; vardef polygon ( expr n ) = save edge, i ; path edge ; edge := ( 1, 0 ) for i := 1 upto n 1 : ( cosd(360/n i), sind(360/n i) ) edge := edge cycle ; edge enddef ; save def macro name( expr args ) = doings ; enddef ; 7 for for counter := startnumber upto endnumber : endfor; for counter := startnumber step stst to endnumber : endfor; while forever : exitif something ; endfor;
17 22 if if somthing true or false : else : endif ; if something true or false : elseif true or false : else : endif ; 8 draw drawarrow u := 1cm ; drawarrow ( 0, 0 ) ( 2u, 0 ) ; drawarrow ( 0, 0 ).. ( u/2, u/2 sqrt (3) ).. ( u, u ) ; undraw label label.pos( String,point) pos top bot lft rt llft ulft lrt urt dotlabel label infont label( text infont defaultfont scaled defaultscale, z0) char <numeric primary> fill fill <path expression> withcolor <color expression> color 0.3white unfill fullcircle p = fullcircle scaled 2cm shifted point ; scaled shifted
18 22 harfcircle p = halfcircle scaled 2cm ; buildcycle p = buildcycle ( p1, p2 ) ; p1 p2 defaultscale pickup pencircle scaled 4pt 4pt cutbefore p := p1 cutbefore p2 ; p1 p2 p cutafter cutbefore decimal u := 4mm ; drawarrow ( 0, 0 ) ( 7u, 0 ) ; for i := 0 upto 6 : dotlabel.bot ( decimal i, ( i u, 0 ) ) ; direction of %&latex \documentclass{article} \usepackage{cjk} \begin{cjk*}{gbk}{song} \begin{document} beginfig(3) u := 2cm ; 4: direction of numeric t ; path p ; pair z ; drawarrow ( 0, 0 ) -- ( 1.5u, 0 ) ; drawarrow ( 0, 0 ) -- ( 0, 1.5u ) ; p := ( 0, 0 ).. for i := 1 upto 3 : ( i/4*u, ((i/4)**2)*u ).. endfor ( 1u, 1u ) ; draw p ; t := 3 ; dotlabel.lrt( btex, point t of p ) ; z = whatever [ ( 0, 0 ), ( 1.5u, 0 )] ; z - point t of p = whatever * direction t of p ; draw z -- point t of p ;
19 22 \end{cjk*} \end{document} directionpoint of numeric t ; path p ; p := ( 0, 0 ).. for i := 1 upto 3 : ( i/4 u, (( i/4) 2) u ).. endfor ( 1u, 1u ) ; t := directionpoint ( 1/2, 1 ) of p ; ***part xpart ypart redpart bluepart greenpart pair color dashed draw p dashed withdots scaled 2 ; draw p dashed evenly scaled 2 ; dashpattern dashed draw p dashed dashpattern(on 4pt off 4pt on 4pt) 9 sind,cosd dotprod div length 10 currentpicture linecap rounded squared butt linejoin mitered rounded beveled miterlimit mitered 11 fern.dat beginfig(0) draw begingraph ( 4cm, 4cm ) ; gdraw fern.dat plot btex $\cdot$ ; Gmarks := 1 ; endgraph ; Peano
20 22 beginfig(0) u := 2cm ; IteralTime := 4 ; path p, pp ; p := ( u, u ) ( u, u ) ( u, u ) ( u, u ) ; p := p scaled 0.5 ; for i := 1 upto IteralTime : pp := reverse p rotated 90 shifted ( u, u ) ; pp := pp p shifted ( u, u ) ; pp := pp p shifted ( u, u ) ; pp := pp reverse p rotated 90 shifted ( u, u ) ; p := pp scaled 0.5 ; draw pp ; setbounds currentpicture to ( 2u, 2u ) ( 2u, 2u ) ( 2u, 2u ) ( 2u, 2u ) cycle ; %&latex \documentclass{article} \usepackage{mflogo} \begin{document} \Huge beginfig(0) picture myp ; path pc ; myp := thelabel( btex Welcome to \MP, ( 0, 0 ) ) ; pc := fullcircle scaled ((ypart ulcorner myp) (ypart llcorner myp)) ; fill bbox myp ; unfill pc ; draw myp ; \end{document} end
21 22 12 METAPOST [1] [2]
22 22 [1] John D. Hobby:A User s Manual for METAPOST [2] André Heck:Learning METAPOST by Doing