📄 line.mf
字号:
qqs:=ceiling(qqs#*hppp); % the way rule widths are calculateddefine_pixels(qqh,qqw,arrowlen,arrowht,arrowcurve);def line (expr delx, dely) =numeric qht,qwd,absdely;if dely > 0: if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/dely; fi; beginchar( 8(delx-1)+(dely-1),qwd#,qht#,0pt#); x0=0; y0=0; x1=w; y1=h; else: absdely=-dely; if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi; beginchar(64+8(delx-1)+(absdely-1),qwd#,qht#,0pt#); x0=0; y0=h; x1=w; y1=0;fi;pickup pencircle scaled qqs;draw z0..z1enddef;def larrow (expr char, delx, dely) =numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;numeric qht,qwd,absdely;if dely > 0: if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/dely; fi; % fixed by DEK on 24 Jan 89; previous code buggy but caused no harm else: absdely=-dely; if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi;fi;beginchar(char,qwd#,qht#,0pt#);if dely > 0: y0=0; else: y0=h; fi;x0=0;rxa=arrowlen; rya=0;rxb=arrowlen; ryb=arrowht;rxc=arrowlen; ryc=-arrowht;rxd=.5rxa; ryd=.5ryb-arrowcurve;rxe=rxd; rye=-ryd;numeric rlen;rlen = sqrt(delx*delx + dely*dely);x1=(rxa*delx - rya*dely)/rlen;y1=(rxa*dely+rya*delx)/rlen + y0;%x2=rxb; y2=ryb;x2=(rxb*delx - ryb*dely)/rlen;y2=(rxb*dely+ryb*delx)/rlen + y0;%x3=rxc; y3=ryc;x3=(rxc*delx - ryc*dely)/rlen;y3=(rxc*dely+ryc*delx)/rlen + y0;%x4=rxd; y4=ryd;x4=(rxd*delx - ryd*dely)/rlen;y4=(rxd*dely+ryd*delx)/rlen + y0;%x5=rxe; y5=rye;x5=(rxe*delx - rye*dely)/rlen;y5=(rxe*dely+rye*delx)/rlen + y0;fill z0..z5..z3--z1--z2..z4..z0--cycleenddef;def rarrow (expr char, delx, dely) =numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;numeric qht,qwd,absdely;if dely > 0: if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/dely; fi; else: absdely=-dely; if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx; else: qht# := qqw#; qwd# := delx*qqw#/absdely; fi;fi;beginchar(char,qwd#,qht#,0pt#);if dely > 0: y0=h; else: y0=0; fi;x0=w;rxa=-arrowlen; rya=0;rxb=rxa; ryb=arrowht;rxc=rxa; ryc=-arrowht;rxd=.5rxa; ryd=.5ryb-arrowcurve;rxe=rxd; rye=-ryd;numeric rlen;rlen = sqrt(delx*delx + dely*dely);%x1= rxa;y1=rya; %%%% replace the following by rotationsx1=(rxa*delx - rya*dely)/rlen + x0;y1=(rxa*dely+rya*delx)/rlen + y0;%x2=rxb; y2=ryb;x2=(rxb*delx - ryb*dely)/rlen + x0;y2=(rxb*dely+ryb*delx)/rlen + y0;%x3=rxc; y3=ryc;x3=(rxc*delx - ryc*dely)/rlen + x0;y3=(rxc*dely+ryc*delx)/rlen + y0;%x4=rxd; y4=ryd;x4=(rxd*delx - ryd*dely)/rlen + x0;y4=(rxd*dely+ryd*delx)/rlen + y0;%x5=rxe; y5=rye;x5=(rxe*delx - rye*dely)/rlen + x0;y5=(rxe*dely+rye*delx)/rlen + y0;fill z0..z5..z3--z1--z2..z4..z0--cycleenddef;% character code rules, for% line(x,y):% 0 < x,y <= 6 : 8*(x-1) + (y-1)%% larrow(x,y):% 0 < x,y <= 4 : 8*(2x-1) + (2y-1)% y=0 : '33% rarrow(x,y):% 0 < x,y < 3 : 8*(3x-1) + (3y-1)% 0 < x <= 4, y=3 : 8*(2x-1) + 6% 0 < x < 4, y = 4 : 8*(2x) + 7% x=3, 0 < y <=4 : 8*6 + (2y-1)% x = 4, 0 < y < 4 : 8*7 + 2y% y=0 : 55%% for y < 0: value is 64 + value for (x, |y|)%% up arrow: '66 down arrow: '77fontdimen 1: 0,0,0,0,0,0,0,qqs#; % line thickness in pointslet cmchar=\; % cmchar should precede each character, for testing purposesfont_coding_scheme:= "LaTeX line";cmchar "Character '00";line(1,1);endchar;cmchar "Character '11";larrow(9,1,1);endchar;cmchar "Character '22";rarrow(18,1,1);endchar;cmchar "Character '01";line(1,2);endchar;cmchar "Character '13";larrow(11,1,2);endchar;cmchar "Character '25";rarrow(21,1,2);endchar;cmchar "Character '02";line(1,3);endchar;cmchar "Character '15";larrow(13,1,3);endchar;cmchar "Character '16";rarrow(14,1,3);endchar;cmchar "Character '03";line(1,4);endchar;cmchar "Character '17";larrow(15,1,4);endchar;cmchar "Character '27";rarrow(23,1,4);endchar;cmchar "Character '04";line(1,5);endchar;cmchar "Character '05";line(1,6);endchar;cmchar "Character '10";line(2,1);endchar;cmchar "Character '31";larrow(25,2,1);endchar;cmchar "Character '52";rarrow(42,2,1);endchar;cmchar "Character '12";line(2,3);endchar;cmchar "Character '35";larrow(29,2,3);endchar;cmchar "Character '36";rarrow(30,2,3);endchar;cmchar "Character '14";line(2,5);endchar;cmchar "Character '20";line(3,1);endchar;cmchar "Character '51";larrow(41,3,1);endchar;cmchar "Character '61";rarrow(49,3,1);endchar;cmchar "Character '21";line(3,2);endchar;cmchar "Character '53";larrow(43,3,2);endchar;cmchar "Character '63";rarrow(51,3,2);endchar;cmchar "Character '23";line(3,4);endchar;cmchar "Character '57";larrow(47,3,4);endchar;cmchar "Character '67";rarrow(55,3,4);endchar;cmchar "Character '24";line(3,5);endchar;cmchar "Character '30";line(4,1);endchar;cmchar "Character '71";larrow(57,4,1);endchar;cmchar "Character '72";rarrow(58,4,1);endchar;cmchar "Character '32";line(4,3);endchar;cmchar "Character '75";larrow(61,4,3);endchar;cmchar "Character '76";rarrow(62,4,3);endchar;cmchar "Character '34";line(4,5);endchar;cmchar "Character '40";line(5,1);endchar;cmchar "Character '41";line(5,2);endchar;cmchar "Character '42";line(5,3);endchar;cmchar "Character '43";line(5,4);endchar;cmchar "Character '45";line(5,6);endchar;cmchar "Character '50";line(6,1);endchar;cmchar "Character '54";line(6,5);endchar;cmchar "Character '100";line(1,-1);endchar;cmchar "Character '111";larrow(73,1,-1);endchar;cmchar "Character '122";rarrow(82,1,-1);endchar;cmchar "Character '101";line(1,-2);endchar;cmchar "Character '113";larrow(75,1,-2);endchar;cmchar "Character '125";rarrow(85,1,-2);endchar;cmchar "Character '102";line(1,-3);endchar;cmchar "Character '115";larrow(77,1,-3);endchar;cmchar "Character '116";rarrow(78,1,-3);endchar;cmchar "Character '103";line(1,-4);endchar;cmchar "Character '117";larrow(79,1,-4);endchar;cmchar "Character '127";rarrow(87,1,-4);endchar;cmchar "Character '104";line(1,-5);endchar;cmchar "Character '105";line(1,-6);endchar;cmchar "Character '110";line(2,-1);endchar;cmchar "Character '131";larrow(89,2,-1);endchar;cmchar "Character '152";rarrow(106,2,-1);endchar;cmchar "Character '112";line(2,-3);endchar;cmchar "Character '135";larrow(93,2,-3);endchar;cmchar "Character '136";rarrow(94,2,-3);endchar;cmchar "Character '114";line(2,-5);endchar;cmchar "Character '120";line(3,-1);endchar;cmchar "Character '151";larrow(105,3,-1);endchar;cmchar "Character '161";rarrow(113,3,-1);endchar;cmchar "Character '121";line(3,-2);endchar;cmchar "Character '153";larrow(107,3,-2);endchar;cmchar "Character '163";rarrow(115,3,-2);endchar;cmchar "Character '123";line(3,-4);endchar;cmchar "Character '157";larrow(111,3,-4);endchar;cmchar "Character '167";rarrow(119,3,-4);endchar;cmchar "Character '124";line(3,-5);endchar;cmchar "Character '130";line(4,-1);endchar;cmchar "Character '171";larrow(121,4,-1);endchar;cmchar "Character '172";rarrow(122,4,-1);endchar;cmchar "Character '132";line(4,-3);endchar;cmchar "Character '175";larrow(125,4,-3);endchar;cmchar "Character '176";rarrow(126,4,-3);endchar;cmchar "Character '134";line(4,-5);endchar;cmchar "Character '140";line(5,-1);endchar;cmchar "Character '141";line(5,-2);endchar;cmchar "Character '142";line(5,-3);endchar;cmchar "Character '143";line(5,-4);endchar;cmchar "Character '145";line(5,-6);endchar;cmchar "Character '150";line(6,-1);endchar;cmchar "Character '154";line(6,-5);endchar;%%%Horizontal arrows:cmchar "Character '33";larrow(27,1,0);endchar;cmchar "Character '55"; %right arrowbeginchar(45,qqw#,qqw#,0pt#);x0=w; y0=0;x1=x0-arrowlen; y1=0;x2=x1; y2=arrowht;x3=x1; y3=-y2;x4=.5[x0,x1]; y4=.5y2-arrowcurve;x5=x4; y5=-y4;fill z0..z4..z2--z1--z3..z5..z0--cycle;endchar;%%%vertical arrowscmchar "Character '66"; %up arrowbeginchar(54,qqw#,qqw#,0pt#);x0=0; y0=w;y1=y0-arrowlen; x1=0;y2=y1; x2=arrowht;y3=y1; x3=-x2;y4=.5[y0,y1]; x4=.5x2-arrowcurve;y5=y4; x5=-x4;fill z0..z4..z2--z1--z3..z5..z0--cycle;endchar;cmchar "Character '77"; %down arrowbeginchar(63,qqw#,qqw#,0pt#);x0=0; y0=0;y1=arrowlen; x1=0;y2=y1; x2=arrowht;y3=y1; x3=-x2;y4=.5y1; x4=.5x2-arrowcurve;y5=y4; x5=-x4;fill z0..z4..z2--z1--z3..z5..z0--cycle;endchar;bye
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -