% mathematical symbols by Anthony Phan. % file: mathbigs.mf (large symbols) % last modification: April 29, 2002. % Only known charcodes will be generated. def horizontal_rules_list= 0.5[-d,h]-math_axis,0.5[-d,h]-math_axis+x_height, 0.25[-d,h],0.5[-d,h],0.75[-d,h] enddef; % SUMMATIONS def tmp_program(expr left_stem, top_stem,top_total_beak,top_beak_jut, bot_stem,bot_total_beak,bot_beak_jut, hair)= pickup crisp.nib; % pos1(vround top_stem,90); pos6(vround bot_stem,-90); % top y1r=top y2r=h; bot y5r=bot y6r=-d; y1l=y2l; y5l=y6l; y4l=good.y 0.5[y6l,y1l]; y3r=good.y 0.5[y2r,y2l]; % x1=0.725[appr,w-appr]; x6=0.725[appr,w-appr+0.5u]; lft x2r=lft x5r+hround 0.25u=appr; x2r=x3r; x4l=good.x 0.545[appr,w-appr]; % adjust_slanted_bar(3r,4l,3,4)(max(left_stem-crisp,1),1); adjust_slanted_bar(5r,4l,5,4')(max(hair-crisp,1),-1); z4r=whatever[z3r,z4]; z4r=whatever[z5r,z4']; z2l=z3l=whatever[z3,z4l]; z5l=whatever[z4l,z5]; % arm1(top_total_beak-top_stem,top_beak_jut,hair,1/3,down,w-appr); arm6(bot_total_beak-bot_stem,bot_beak_jut,hair,1/3,up,w-appr+0.5u); % filldraw stroke z1e--z2e--z3e--z4e--z5e--z6e; penlabels(1,2,3,4,5,6); labels(4'); enddef; beginchar(small_summation_sign,8u#+2appr#,0.8asc_height#,0); "Small summation sign"; pickup null.nib; tmp_program(stem, 0.25[hair,stem],0.1asc_height,0.5u, 0.5[hair,stem],0.1asc_height,0.5u, hair); endchar; beginchar(summation_sign,14u#+2appr#,0,10/6dh#); "Textstyle summation sign"; tmp_program(cap_stem, 0.5[cap_hair,stem],2/6dh,0.75u, stem,2/6dh,0.75u, cap_hair); endchar; beginchar(Summation_sign,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle summation sign"; tmp_program(cap_curve, 0.5[cap_hair,curve],2.8/6dh,u, curve,2.8/6dh,u, cap_hair); endchar; % PRODUCTS AND COPRODUCTS def tmp_program(expr orientation,appr_corr, stem,hair,jut,inner_jut,bracket,dish)= if orientation=up: top y1=top y3=h; bot y2=bot y4=-d; else: top y2=top y4=h; bot y1=bot y3=-d; fi pos1(hround stem,0); pos2(hround stem,0); pos3(hround stem,0); pos4(hround stem,0); lft x1l=lft x2l=appr+hround(appr_corr+jut); rt x3r=rt x4r=w-appr-hround(appr_corr+jut); serif(1,2,bracket,jut,hair,false,dish,0,hair,true,0); serif(2,1,bracket,jut,hair,true,dish,inner_jut,hair,true,dish); serif(3,4,bracket,0,hair,false,0,jut,hair,true,dish); serif(4,3,bracket,inner_jut,hair,true,dish,jut,hair,true,dish); filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; filldraw z1f--z3c--z3d--z1e--cycle; penlabels(1,2,3,4); enddef; beginchar(small_product_sign,8u#+2appr#,0.8asc_height#,0); "Small product sign"; pickup crisp.nib; tmp_program(up,-0.875u,stem,hair,u,u,0.5u,dish); endchar; beginchar(product_sign,15u#+2appr#,0,10/6dh#); "Textstyle product sign"; pickup crisp.nib; tmp_program(up,0,cap_stem,cap_hair,1.8u,1.8u,0.9u,dish); endchar; beginchar(Product_sign,21u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle product sign"; pickup crisp.nib; tmp_program(up,0,cap_curve,vround(cap_hair*(cap_curve/cap_stem)), 2.4u,2.4u,1.2u,dish); endchar; beginchar(small_coproduct_sign,8u#+2appr#,0.8asc_height#,0); "Small coproduct sign"; pickup crisp.nib; tmp_program(down,-0.875u,stem,hair,u,u,0.5u,dish); endchar; beginchar(coproduct_sign,15u#+2appr#,0,10/6dh#); "Textstyle coproduct sign"; pickup crisp.nib; tmp_program(down,0,cap_stem,cap_hair,1.8u,1.8u,0.9u,dish); endchar; beginchar(Coproduct_sign,21u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle coproduct sign"; pickup crisp.nib; tmp_program(down,0,cap_curve,vround(cap_hair*(cap_curve/cap_stem)), 2.4u,2.4u,1.2u,dish); endchar; % BIG PLUS, BIG TIMES beginchar(bplus_sign,10/6dh#+2appr#,0,10/6dh#); "Textstyle big plus sign"; use_rule2; pickup rule.nib; y3=y4=good.y 0.5[-d,h]; pickup tiny.nib; pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90); lft x1l=hround 0.5(w-rth); x2=x1; lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; beginchar(Bplus_sign,14/6dh#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle big plus sign"; use_rule3; pickup rule.nib; y3=y4=good.y 0.5[-d,h]; pickup tiny.nib; pos1(rth,0); pos2(rth,0); pos3(rth,90); pos4(rth,90); lft x1l=hround 0.5(w-rth); x2=x1; lft x3=Appr; x1-x3=x4-x1=y1-y3=y3-y2; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; beginchar(btimes_sign,10/6dh#+2appr#,0,10/6dh#); "Textstyle big times sign"; use_rule2; pickup rule.nib; x0=good.x 0.5w; y0=y0'=good.y 0.5[-d,h]; pickup tiny.nib; rt x0'=w-Appr; z1-z0=z0-z2=(z0'-z0) rotated 45; z3-z0=z0-z4=(z0'-z0) rotated -45; pos1(rth+2eps,-45); pos2(rth+2eps,-45); pos3(rth+2eps,45); pos4(rth+2eps,45); filldraw stroke z1e..z2e; filldraw stroke z4e..z3e; penlabels(1,2,3,4); endchar; beginchar(Btimes_sign,14/6dh#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle big times sign"; use_rule3; pickup rule.nib; x0=good.x 0.5w; y0=y0'=good.y 0.5[-d,h]; pickup tiny.nib; rt x0'=w-Appr; z1-z0=z0-z2=(z0'-z0) rotated 45; z3-z0=z0-z4=(z0'-z0) rotated -45; pos1(rth+2eps,-45); pos2(rth+2eps,-45); pos3(rth+2eps,45); pos4(rth+2eps,45); filldraw stroke z1e..z2e; filldraw stroke z4e..z3e; penlabels(1,2,3,4); endchar; % COMPLEMENTS beginchar(bcomplement,7.5u#+2appr#,0,10/6dh#); "Textstyle complement"; autorounded; pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos7(rth2,0); pos8(rth2,0); h-bot y1=top y8+d=vround 0.25(h+d); y3+0.5rth2=h+vround(o*((h+d)/cap_height))+eps; y6-0.5rth2=-d-vround(o*((h+d)/cap_height))-eps; rt x1r=w-appr; x1=x2=x7=x8; x4=x5=appr+0.5rth2; x3=x6=0.5[x1,x4]; y2=y4=max(y3-x1+x3,1/6[y1,y3]); y5=y7=min(y6+x1-x3,1/6[y8,y6]); filldraw stroke z1e..z2e; filldraw stroke z7e..z8e; pickup rule.nib2; draw z2 up_to_left z3 left_to_down z4..z5 down_to_right z6 right_to_up z7; penlabels(1,2,7,8); labels(3,4,5,6); endchar; beginchar(Bcomplement,10u#+2appr#,0,14/6dh#); padded bigop_padding#; "displaystyle complement"; autorounded; pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos7(rth3,0); pos8(rth3,0); h-bot y1=top y8+d=vround 0.25(h+d); y3+0.5rth3=h+vround(o*((h+d)/cap_height))+eps; y6-0.5rth3=-d-vround(o*((h+d)/cap_height))-eps; rt x1r=w-appr; x1=x2=x7=x8; x4=x5=appr+0.5rth3; x3=x6=0.5[x1,x4]; y2=y4=max(y3-x1+x3,1/6[y1,y3]); y5=y7=min(y6+x1-x3,1/6[y8,y6]); filldraw stroke z1e..z2e; filldraw stroke z7e..z8e; pickup rule.nib3; draw z2 up_to_left z3 left_to_down z4..z5 down_to_right z6 right_to_up z7; penlabels(1,2,7,8); labels(3,4,5,6); endchar; % % Trucs % beginchar(btruc_sign,10/6dh#+2appr#,0,10/6dh#); "Textstyle truc sign"; pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos3(rth2,90); pos4(rth2,90); top y1=top y3r=top y4r=h; bot y2=-d; lft x1l=hround 0.5(w-rth2); x2=x1; lft x3=Appr; x1-x3=x4-x1; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; beginchar(Btruc_sign,14/6dh#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle truc sign"; pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos3(rth3,90); pos4(rth3,90); top y1=top y3r=top y4r=h; bot y2=-d; lft x1l=hround 0.5(w-rth2); x2=x1; lft x3=Appr; x1-x3=x4-x1; filldraw stroke z1e..z2e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; beginchar(bcurt_sign,10/6dh#+2appr#,0,10/6dh#); "Textstyle curT sign"; pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos3(rth2,90); pos4(rth2,90); bot y1=bot y3l=bot y4l=-d; top y2=h; lft x1l=hround 0.5(w-rth); x2=x1; lft x3=appr; x1-x3=x4-x1; filldraw stroke z2e..z1e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; beginchar(Bcurt_sign,14/6dh#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle curT sign"; pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos3(rth3,90); pos4(rth3,90); bot y1=bot y3l=bot y4l=-d; top y2=h; lft x1l=hround 0.5(w-rth); x2=x1; lft x3=appr; x1-x3=x4-x1; filldraw stroke z2e..z1e; filldraw stroke z3e..z4e; penlabels(1,2,3,4); endchar; % % Cups and caps (a revoir) % beginchar(bcap_sign,14u#+2appr#,0,10/6dh#); "Textstyle cap sign"; pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos4(rth2,0); pos5(rth2,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; bot y1=bot y5=-d; y3+0.5rth2=h+vround(o*((h+d)/cap_height))+eps; y2=y4=max(y3-0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; pickup rule.nib2; draw z2 up_to_right z3 right_to_down z4; penlabels(1,2,3,4,5); endchar; beginchar(Bcap_sign,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle cap sign"; pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos4(rth3,0); pos5(rth3,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; bot y1=bot y5=-d; y3+0.5rth3=h+vround(o*((h+d)/cap_height))+eps; y2=y4=max(y3-0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; pickup rule.nib3; draw z2 up_to_right z3 right_to_down z4; penlabels(1,2,3,4,5); endchar; beginchar(bcup_sign,14u#+2appr#,0,10/6dh#); "Textstyle cup sign"; pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos4(rth2,0); pos5(rth2,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; top y1=top y5=h; y3-0.5rth2=-d-vround(o*((h+d)/cap_height))-eps; y2=y4=min(y3+0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; pickup rule.nib2; draw z2 up_to_right z3 right_to_down z4; penlabels(1,2,3,4,5); endchar; beginchar(Bcup_sign,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle cup sign"; pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos4(rth3,0); pos5(rth3,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; top y1=top y5=h; y3-0.5rth3=-d-vround(o*((h+d)/cap_height))-eps; y2=y4=min(y3+0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; pickup rule.nib3; draw z2 up_to_right z3 right_to_down z4; penlabels(1,2,3,4,5); endchar; beginchar(bcup_plus,14u#+2appr#,0,10/6dh#); "Textstyle cup-plus sign"; ensure_centering_of(rth2); % pickup tiny.nib; pos1(rth2,0); pos2(rth2,0); pos4(rth2,0); pos5(rth2,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; top y1=top y5=h; y3-0.5rth2=-d-vround(o*((h+d)/cap_height))-eps; y2=y4=min(y3+0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; % pos6(rth2,0); pos7(rth2,0); pos8(rth2,90); pos9(rth2,90); y8=y9=vround(0.5[-d,h]-0.5rth2)+0.5rth2; x6=x7=0.5w; numeric a; a=0.5(min(lft x5l-rt x1r-2.6u,h+d-rth2-1.3u)-rth2); y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; filldraw stroke z6e..z7e; filldraw stroke z8e..z9e; % pickup rule.nib2; draw z2 down_to_right z3 right_to_up z4; penlabels(1,2,3,4,5,6,7,8,9); endchar; beginchar(Bcup_plus,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle cup-plus sign"; ensure_centering_of(rth3); % pickup tiny.nib; pos1(rth3,0); pos2(rth3,0); pos4(rth3,0); pos5(rth3,0); lft x1l=lft x2l=appr; rt x4r=rt x5r=w-appr; x3=0.5[x2,x4]; top y1=top y5=h; y3-0.5rth3=-d-vround(o*((h+d)/cap_height))-eps; y2=y4=min(y3+0.5(x4-x2),0.5[y3,y1]); filldraw stroke z2e..z1e; filldraw stroke z4e..z5e; % pos6(rth3,0); pos7(rth3,0); pos8(rth3,90); pos9(rth3,90); y8=y9=vround(0.5[-d,h]-0.5rth3)+0.5rth3; x6=x7=0.5w; numeric a; a=0.5(min(lft x5l-rt x1r-2.9u,h+d-rth3-1.45u)-rth3); y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; filldraw stroke z6e..z7e; filldraw stroke z8e..z9e; % pickup rule.nib3; draw z2 down_to_right z3 right_to_up z4; penlabels(1,2,3,4,5,6,7,8,9); endchar; beginchar(bsqcap_sign, 14u#+2appr#,0,10/6dh#); "Textstyle square cap sign"; pickup tiny.nib; pos1(rth2,180); pos4(rth2,0); top y2r=top y3r=h; bot y1=bot y4=-d; top y2r-bot y2l=top y3r-bot y3l=rth2; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; penlabels(1,2,3,4); endchar; beginchar(Bsqcap_sign,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle square cap sign"; pickup tiny.nib; pos1(rth3,180); pos4(rth3,0); top y2r=top y3r=h; bot y1=bot y4=-d; top y2r-bot y2l=top y3r-bot y3l=rth3; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; penlabels(1,2,3,4); endchar; beginchar(bsqcup_sign,14u#+2appr#,0,10/6dh#); "Textstyle square cup sign"; pickup tiny.nib; pos1(rth2,180); pos4(rth2,0); bot y2r=bot y3r=-d; top y1=top y4=h; top y2l-bot y2r=top y3l-bot y3r=rth2; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; penlabels(1,2,3,4); endchar; beginchar(Bsqcup_sign,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle square cup sign"; pickup tiny.nib; pos1(rth3,180); pos4(rth3,0); bot y2r=bot y3r=-d; top y1=top y4=h; top y2l-bot y2r=top y3l-bot y3r=rth3; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; penlabels(1,2,3,4); endchar; beginchar(bsqcup_plus,14u#+2appr#,0,10/6dh#); "Textstyle square cup-plus sign"; ensure_centering_of(rth2); % pickup tiny.nib; pos1(rth2,180); pos4(rth2,0); bot y2r=bot y3r=-d; top y1=top y4=h; top y2l-bot y2r=top y3l-bot y3r=rth2; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; % pos6(rth2,0); pos7(rth2,0); pos8(rth2,90); pos9(rth2,90); y8=y9=vround(0.5[-d,h]-0.5rth2)+0.5rth2; x6=x7=0.5w; numeric a; a=0.5(min(lft x4l-rt x1l-2.6u,h+d-rth2-1.3u)-rth2); y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; filldraw stroke z6e..z7e; filldraw stroke z8e..z9e; penlabels(1,2,3,4,6,7,8,9); endchar; beginchar(Bsqcup_plus,18u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle square cup-plus sign"; ensure_centering_of(rth3); % pickup tiny.nib; pos1(rth3,180); pos4(rth3,0); bot y2r=bot y3r=-d; top y1=top y4=h; top y2l-bot y2r=top y3l-bot y3r=rth3; lft x1r=appr; rt x4r=w-appr; x2r=x1r; x3r=x4r; x2l=x1l; x3l=x4l; filldraw stroke z1e--z2e--z3e--z4e; % pos6(rth3,0); pos7(rth3,0); pos8(rth3,90); pos9(rth3,90); y8=y9=vround(0.5[-d,h]-0.5rth3)+0.5rth3; x6=x7=0.5w; numeric a; a=0.5(min(lft x4l-rt x1l-2.9u,h+d-rth3-1.45u)-rth3); y6-y8r=y8l-y7=vround a; x6l-x8=x9-x6r=hround a; filldraw stroke z6e..z7e; filldraw stroke z8e..z9e; penlabels(1,2,3,4,6,7,8,9); endchar; % % Wedges and Vees % beginchar(bwedge_sign,16u#+2appr#,0,10/6dh#); "Textstyle wedge sign"; pickup tiny.nib; lft x1=appr; x2=good.x 0.5w; x3-x2=x2-x1; bot y1=-d; y1=y3=y4=y6; top y2=h+vround(o*((h+d)/cap_height))+eps; x6-x1=diag_width(rth2-tiny,z2-z1); x3-x4=diag_width(rth2-tiny,z2-z3); z5-z4=whatever*(z2-z3); z5-z6=whatever*(z2-z1); filldraw z1--z2--z3--z4--z5--z6--cycle; labels(1,2,3,4,5,6); endchar; beginchar(Bwedge_sign,22.4u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle wedge sign"; pickup tiny.nib; lft x1=appr; x2=good.x 0.5w; x3-x2=x2-x1; bot y1=-d; y1=y3=y4=y6; top y2=h+vround(o*((h+d)/cap_height))+eps; x6-x1=diag_width(rth3-tiny,z2-z1); x3-x4=diag_width(rth3-tiny,z2-z3); z5-z4=whatever*(z2-z3); z5-z6=whatever*(z2-z1); filldraw z1--z2--z3--z4--z5--z6--cycle; labels(1,2,3,4,5,6); endchar; beginchar(bvee_sign,16u#+2appr#,0,10/6dh#); "Textstyle vee sign"; pickup tiny.nib; lft x1=appr; x2=good.x 0.5w; x3-x2=x2-x1; top y1=h; y1=y3=y4=y6; bot y2=-d-vround(o*((h+d)/cap_height))-eps; x6-x1=diag_width(rth2-tiny,z2-z1); x3-x4=diag_width(rth2-tiny,z2-z3); z5-z4=whatever*(z2-z3); z5-z6=whatever*(z2-z1); filldraw z1--z2--z3--z4--z5--z6--cycle; labels(1,2,3,4,5,6); endchar; beginchar(Bvee_sign,22.4u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle vee sign"; pickup tiny.nib; lft x1=appr; x2=good.x 0.5w; x3-x2=x2-x1; top y1=h; y1=y3=y4=y6; bot y2=-d-vround(o*((h+d)/cap_height))-eps; x6-x1=diag_width(rth3-tiny,z2-z1); x3-x4=diag_width(rth3-tiny,z2-z3); z5-z4=whatever*(z2-z3); z5-z6=whatever*(z2-z1); filldraw z1--z2--z3--z4--z5--z6--cycle; labels(1,2,3,4,5,6); endchar; beginchar(bwedge_curly,16u#+2appr#,0,10/6dh#); "Textstyle curly wedge sign"; pickup tiny.nib; x2=hround 0.5(w-rth2)+0.5rth2; top y2=h+vround(o*((h+d)/cap_height))+eps; pos2(rth2,0); bot y1r=bot y3l=-d; lft x1r=appr; x3l-x2r=x2l-x1r; x1l=x1r; x3l=x3r; x4=x2; pos4(rth2,0); y4=0.625[y2,y1r]; y1l-y1r=y3r-y3l=(rth2-tiny)/cosd angle(z4r-z1r); filldraw stroke z2e{down}...z1e{z1r-z4r}; filldraw stroke z2e{down}...z3e{z3l-z4l}; penlabels(1,2,3,4); endchar; beginchar(Bwedge_curly,22.4u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle curly wedge sign"; pickup tiny.nib; x2=hround 0.5(w-rth3)+0.5rth3; top y2=h+vround(o*((h+d)/cap_height))+eps; pos2(rth3,0); bot y1r=bot y3l=-d; lft x1r=appr; x3l-x2r=x2l-x1r; x1l=x1r; x3l=x3r; x4=x2; pos4(rth3,0); y4=0.625[y2,y1r]; y1l-y1r=y3r-y3l=(rth3-tiny)/cosd angle(z4r-z1r); filldraw stroke z2e{down}...z1e{z1r-z4r}; filldraw stroke z2e{down}...z3e{z3l-z4l}; penlabels(1,2,3,4); endchar; beginchar(bvee_curly,16u#+2appr#,0,10/6dh#); "Textstyle curly vee sign"; pickup tiny.nib; x2=hround 0.5(w-rth2)+0.5rth2; bot y2=-d-vround(o*((h+d)/cap_height))-eps; pos2(rth2,0); top y1r=top y3l=h; lft x1r=appr; x1l=x1r; x3l=x3r; x3l-x2r=x2l-x1r; x4=x2; pos4(rth2,0); y4=0.625[y2,y1r]; y1r-y1l=y3l-y3r=(rth2-tiny)/cosd angle(z4r-z1r); filldraw stroke z2e{up}...z1e{z1r-z4r}; filldraw stroke z2e{up}...z3e{z3l-z4l}; penlabels(1,2,3,4); endchar; beginchar(Bvee_curly,22.4u#+2appr#,0,14/6dh#); padded bigop_padding#; "Displaystyle curly vee sign"; pickup tiny.nib; x2=hround 0.5(w-rth3)+0.5rth3; bot y2=-d-vround(o*((h+d)/cap_height))-eps; pos2(rth3,0); top y1r=top y3l=h; lft x1r=appr; x1l=x1r; x3l=x3r; x3l-x2r=x2l-x1r; x4=x2; pos4(rth3,0); y4=0.625[y2,y1r]; y1r-y1l=y3l-y3r=(rth3-tiny)/cosd angle(z4r-z1r); filldraw stroke z2e{up}...z1e{z1r-z4r}; filldraw stroke z2e{up}...z3e{z3l-z4l}; penlabels(1,2,3,4); endchar; % Ugly beginchar(btriangle_up,16u#+2appr#,0,10/6dh#); "Big triangle up"; pickup tiny.nib; lft x1r=appr; x2r=good.x 0.5w; x3r-x2r=x2r-x1r; bot y1r=-d; y1r=y3r=y1=y3; top y2r=h+o; top y1l-bot y1r=top y3l-bot y3r=rth; x1-x1r=diag_width(rth-tiny,z2r-z1r); x3r-x3=diag_width(rth-tiny,z2r-z3r); z2l-z1=whatever*(z2r-z1r); z2l-z3=whatever*(z2r-z3r); z1l=whatever[z1,z2l]; z3l=whatever[z3,z2l]; filldraw stroke z1e--z2e--z3e--z1e; penlabels(1,2,3); endchar; beginchar(btriangle_down,16u#+2appr#,0,10/6dh#); "Big triangle down"; pickup tiny.nib; lft x1r=appr; x2r=good.x 0.5w; x3r-x2r=x2r-x1r; top y1r=h; y1r=y3r=y1=y3; bot y2r=-d-o; top y1r-bot y1l=top y3r-bot y3l=rth; x1-x1r=diag_width(rth-tiny,z2r-z1r); x3r-x3=diag_width(rth-tiny,z2r-z3r); z2l-z1=whatever*(z2r-z1r); z2l-z3=whatever*(z2r-z3r); z1l=whatever[z1,z2l]; z3l=whatever[z3,z2l]; filldraw stroke z1e--z2e--z3e--z1e; penlabels(1,2,3); endchar; numeric nice_shift#,overshot#,true_width#,bulb_dtsz#; true_width#=7u#; overshot#=0.2u#; bulb_dtsz#=0.9dtsz#; nice_shift#=true_width#+2overshot# % total width +2letter_fit#+0.25u# % extra space between integrals -bulb_dtsz#; % bulbs should be exactly one above % another when letter_fit# is 0. define_whole_pixels(true_width,nice_shift,overshot,bulb_dtsz); % A modifier ind\'ependamment de la version display beginchar(bintegral_sign, 0.5(true_width#+curve#)+2appr#,0,100/54dh#); "Textstyle integral sign"; italcorr 0.5(true_width#-curve#)+overshot#; bulb_dtsz:=0.9dtsz; numeric t,a[]; t=0.70; a1=30; a2=15; % % middle points % y4l=y3r=0.5[-d,h]; x4l=w-appr; x4l-x3r=curve; % % dots for bulbs % adjust_dot7((appr+0.5bulb_dtsz-overshot,-d-o+0.9bulb_dtsz), bulb_dtsz,false,false); adjust_dot0((x4l+x3r-0.5[x7,x7'],h+o-0.9bulb_dtsz), bulb_dtsz,false,false); dot(0,0'); dot(7,7'); % % connecting dots to make bulbs. % z1=0.5[z0,z0']; z6=0.5[z7,z7']; z1r=(x0',y1); z6l=(x7,y6); z1l-z1=0.5bulb_dtsz*left rotated -a1; z6r-z6=0.5bulb_dtsz*right rotated -a1; % % upper and lower connection between bulbs and stem. % y2r=h+o; y5l=-d-o; y2r-y2l=y5r-y5l=hair; x2l=0.05[x0,x4l]; x5r=0.05[x7',x3r]; penpos2(whatever,90-a2); penpos5(whatever,90-a2); % % Do I need to check if those points are not too close % to the vertical axis? % x3l=0.2[x4l,x3r]; x4r=0.2[x3r,x4l]; y3l=0.15[y2l,y5r]; y4r=0.15[y5r,y2l]; % % That's the nasty part: one has to make sure % that hair thick curves won't come too ``hairy''. % tmp_path:=z3l up_to_right z2l; z2'l=point t of tmp_path; penpos2'(hair,angle(direction t of tmp_path)+90); tmpp_path:=z4r down_to_left z5r; z5'r=point t of tmpp_path; penpos5'(hair,angle(direction t of tmpp_path)-90); % % Filling curves % fill z1r up_to_left z2r...z2'r{-direction t of tmp_path} ...z3r{down}...z4r & tmpp_path & z5r...{dir(90-a1)}z6r --z6l down_to_right z5l...z5'l{-direction t of tmpp_path} ...z4l{up}...z3l & tmp_path & z2l...{dir(-90-a1)}z1l--cycle; penlabels(1,2,3,4,5,6,2',5'); tmp_picture:=currentpicture; endchar; beginchar(bintegral_double, nice_shift#+0.5(true_width#+curve#)+2appr#,0,100/54dh#); "Textstyle double integral sign"; italcorr 0.5(true_width#-curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)); endchar; beginchar(bintegral_triple, 2nice_shift#+0.5(true_width#+curve#)+2appr#,0,100/54dh#); "Textstyle triple integral sign"; italcorr 0.5(true_width#-curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)) +(tmp_picture shifted (2nice_shift,0)); endchar; beginchar(bintegral_contour, 0.5(true_width#+curve#)+2appr#,0,100/54dh#); "Textstyle contour integral sign"; italcorr 0.5(true_width#-curve#)+overshot#; currentpicture:=tmp_picture; pickup rule.nib0; rt x1=w-appr+hround 0.5(true_width-curve)+eps; 0.5[rt x1,lft x3]=w-appr-0.5curve=x2=x4; top y2=vround(0.5[-d,h]+0.5true_width)+eps; 0.5[y2,y4]=0.5[-d,h]=y1=y3; draw z1 up_to_left z2 left_to_down z3 down_to_right z4 right_to_up z1; labels(1,2,3,4); endchar; % A revoir beginchar(bintegral_dblcont, nice_shift#+0.5(true_width#+curve#)+2appr#,0,100/54dh#); "Textstyle double contour integral sign"; italcorr 0.5(true_width#-curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)); pickup rule.nib0; rt x1=w-appr+hround 0.5(true_width-curve)+eps; x2=x4=0.5[rt x1,lft x3]=w-appr-0.5(nice_shift+curve); top y2=vround(0.5[-d,h]+min(0.625true_width, 0.5(true_width+nice_shift)))+eps; 0.5[y2,y4]=0.5[-d,h]=y1=y3; draw z1 up_to_left z2 left_to_down z3 down_to_right z4 right_to_up z1; labels(1,2,3,4); endchar; numeric nice_shift#,overshot#,true_width#,bulb_dtsz#; true_width#=10u#; overshot#=0.2u#; bulb_dtsz#:=1.1dtsz#; nice_shift#=true_width#+2overshot# % total width +2letter_fit#+0.5u# % extra space between integrals -bulb_dtsz#; % bulbs should be exactly one above % another when letter_fit# is 0. define_whole_pixels(true_width,nice_shift,overshot,bulb_dtsz); beginchar(Bintegral_sign, 0.5(true_width#+cap_curve#)+2appr#,rth.frac#,4dh#-rth.frac#); "Displaystyle integral sign"; italcorr 0.5(true_width#-cap_curve#)+overshot#; numeric t,a[]; t=0.70; a1=30; a2=15; % % middle points % y4l=y3r=0.5[-d,h]; x4l=w-appr; x4l-x3r=cap_curve; % % dots for bulbs % adjust_dot7((appr+0.5bulb_dtsz-overshot,-d-o+0.9bulb_dtsz), bulb_dtsz,false,false); adjust_dot0((x4l+x3r-0.5[x7,x7'],h+o-0.9bulb_dtsz), bulb_dtsz,false,false); dot(0,0'); dot(7,7'); % % connecting dots to make bulbs. % z1=0.5[z0,z0']; z6=0.5[z7,z7']; z1r=(x0',y1); z6l=(x7,y6); z1l-z1=0.5bulb_dtsz*left rotated -a1; z6r-z6=0.5bulb_dtsz*right rotated -a1; % % upper and lower connection between bulbs and stem. % y2r=h+o; y5l=-d-o; y2r-y2l=y5r-y5l=cap_hair; x2l=0.05[x0,x4l]; x5r=0.05[x7',x3r]; penpos2(whatever,90-a2); penpos5(whatever,90-a2); % % Do I need to check if those points are not too close % to the vertical axis? % x3l=0.2[x4l,x3r]; x4r=0.2[x3r,x4l]; y3l=0.15[y2l,y5r]; y4r=0.15[y5r,y2l]; % % That's the nasty part: one has to make sure % that hair thick curves won't come too ``hairy''. % tmp_path:=z3l up_to_right z2l; z2'l=point t of tmp_path; penpos2'(cap_hair,angle(direction t of tmp_path)+90); tmpp_path:=z4r down_to_left z5r; z5'r=point t of tmpp_path; penpos5'(cap_hair,angle(direction t of tmpp_path)-90); % % Filling curves % fill z1r up_to_left z2r...z2'r{-direction t of tmp_path} ...z3r{down}...z4r & tmpp_path & z5r...{dir(90-a1)}z6r --z6l down_to_right z5l...z5'l{-direction t of tmpp_path} ...z4l{up}...z3l & tmp_path & z2l...{dir(-90-a1)}z1l--cycle; penlabels(1,2,3,4,5,6,2',5'); tmp_picture:=currentpicture; endchar; beginchar(Bintegral_double, nice_shift#+0.5(true_width#+cap_curve#)+2appr#, rth.frac#,4dh#-rth.frac#); "Displaystyle double integral sign"; italcorr 0.5(true_width#-cap_curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)); endchar; beginchar(Bintegral_triple, 2nice_shift#+0.5(true_width#+cap_curve#)+2appr#,rth.frac#,4dh#-rth.frac#); "Displaystyle triple integral sign"; italcorr 0.5(true_width#-cap_curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)) +(tmp_picture shifted (2nice_shift,0)); endchar; beginchar(Bintegral_contour, 0.5(true_width#+cap_curve#)+2appr#,rth.frac#,4dh#-rth.frac#); "Displaystyle contour integral sign"; italcorr 0.5(true_width#-cap_curve#)+overshot#; currentpicture:=tmp_picture; pickup rule.nib0; rt x1=w-appr+hround 0.5(true_width-cap_curve)+eps; 0.5[rt x1,lft x3]=w-appr-0.5cap_curve=x2=x4; top y2=vround(0.5[-d,h]+0.5true_width)+eps; 0.5[y2,y4]=0.5[-d,h]=y1=y3; draw z1 up_to_left z2 left_to_down z3 down_to_right z4 right_to_up z1; labels(0,1,2,3,4); endchar; % A revoir beginchar(Bintegral_dblcont, nice_shift#+0.5(true_width#+cap_curve#)+2appr#, rth.frac#,4dh#-rth.frac#); "Displaystyle double contour integral sign"; italcorr 0.5(true_width#-cap_curve#)+overshot#; currentpicture:=tmp_picture+(tmp_picture shifted (nice_shift,0)); pickup rule.nib0; rt x1=w-appr+hround 0.5(true_width-cap_curve)+eps; x2=x4=0.5[rt x1,lft x3]=w-appr-0.5(nice_shift+cap_curve); top y2=vround(0.5[-d,h]+min(0.625true_width, 0.5(true_width+nice_shift)))+eps; 0.5[y2,y4]=0.5[-d,h]=y1=y3; draw z1 up_to_left z2 left_to_down z3 down_to_right z4 right_to_up z1; labels(1,2,3,4); endchar;