% blackboard typefaces by Anthony Phan. % file: mbbpunct.mf (punctuation) % last modification: 25.10.2001. def horizontal_rules_list= -body_depth,-desc_depth,x_height,cap_height,asc_height,body_height enddef; use_rule1; iff known bbnormal_space: beginchar(bbnormal_space,6u#+2letter_fit#,0,0); "Normal space"; endchar; iff known bbcompound_word_mark: beginchar(bbcompound_word_mark,0,x_height#,0); "Compound word mark"; endchar; beginchar(bbexclamation_point,hthick#+thin#+2appr#, asc_height#,0); "Exclamation point"; italcorr (asc_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(1,1'); bot y1=0; top y1'=dot_size; dot(1,1'); if square_dots: bot y2=vround 0.25[top y1',x_height]; y5=y2; x2=x3=x1; x4=x5=x1'; top y3=top y4=h; pickup square.nib; draw z2--z3--z4--z5--cycle; labels(2,3,4,5); else: top y7=h+o; bot y2=vround 0.25[top y1',x_height]; y4-y2=0.25dot_size; y7-y6=0.5dot_size; x2=x3=x4=x5=x6=x7=0.5[x1,x1']; numeric a,r,R; R=0.5max(dot_size-thin,0); r=0.5max(0.5dot_size-thin,0); a=(R-r)/(y6-y4); y6-y5=R*a; y4-y3=r*a; penpos6(hthick,0); penpos5(hthick*(1+-+a),0); penpos3(0.5hthick*(1+-+a),0); draw z2...z3r---z5r...z6r up_to_left z7 left_to_down z6l...z5l---z3l...cycle; labels(2,4,6); penlabels(3,5,6); fi endchar; beginchar(bbspanish_shriek,hthick#+thin#+2appr#, asc_height#-desc_depth#,desc_depth#); "Spanish open exclamation point"; italcorr (asc_height#-desc_depth# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(1,1'); top y1=h; top y1-bot y1'=dot_size; dot(1,1'); if square_dots: top y2=vround 0.25[bot y1',h-x_height]; y5=y2; x2=x3=x1; x4=x5=x1'; bot y3=bot y4=-d; pickup square.nib; draw z2--z3--z4--z5--cycle; labels(2,3,4,5); else: bot y7=-d-o; top y2=vround 0.25[bot y1',h-x_height]; y4-y2=-0.25dot_size; y7-y6=-0.5dot_size; x2=x3=x4=x5=x6=x7=0.5[x1,x1']; numeric a,r,R; R=0.5max(dot_size-thin,0); r=0.5max(0.5dot_size-thin,0); a=(R-r)/(y6-y4); y6-y5=R*a; y4-y3=r*a; penpos6(hthick,0); penpos5(hthick*(1+-+a),0); penpos3(0.5hthick*(1+-+a),0); draw z2...z3r---z5r...z6r up_to_left z7 left_to_down z6l...z5l---z3l...cycle; labels(2,4,6); penlabels(3,5,6); fi endchar; beginchar(bbquestion_mark,8u#+2appr#,asc_height#,0); "Question mark"; italcorr 0.9asc_height#*slant-0.5u#; center_bar(1,2); bot y1=0; top y2=dot_size; x5=x2; bot y3=vround 0.25[top y2,x_height]; x9=0.5[x1,x2]; top y9=h+o; rt x7=w-apprr+ho; lft x11=apprl; slope:=2(y9-y3)/24u; y5-y3=slope*(x5-x1); ellipse_set(9,7,6,5); if square_dots: y4=y3; x12=x3=x1; x4=x2; y5+y0-y12=slope*(x5+x0-x12); else: x3=0.5[x1,x2]; x3a=0.25[x1,x2]; x4=0.75[x1,x2]; y4=y3a=0.5[y3,y5]; z12=z5+z0; fi z0=(thick*unitvector((z6-z5)slanted slant) rotated 90)slanted -slant; x14=x7+x0; ellipse_set(9,14,13,12); bot y11=vround y7; if square_dots: y3l-y3=y3-y3r=y4l-y4=y4-y4r=0.5thin; x3l-x3=x3-x3r=x4r-x4=x4-x4l=0.5thin*(1++slant); x12l=x3l; x12r=x3r; x5r=x4r; x5l=x4l; ortho_penpos6(thin,z6-z5); ortho_penpos13(thin,z12-z13); z12l-z13l=whatever*(z12-z13); z12r-z13r=whatever*(z12-z13); z5l-z6l=whatever*(z5-z6); z5r-z6r=whatever*(z5-z6); penstroke z13e--z12e--z3e--z4e--z5e--z6e; draw z9 right_to_down z14...{z12-z13}z13; draw z6{z6-z5}...z7 up_to_left z9 left_to_down z11; else: draw z9 right_to_down z14...z13---z12...z3a ...z3{right}...z4...z5---z6...z7 up_to_left z9 left_to_down z11; fi dot(1,2); square_end11(down); labels(3a,7,8,9,10,11,14,15); penlabels(3,4,5,6,12,13); endchar; beginchar(bbspanish_query,8u#+2appr#, asc_height#-desc_depth#,desc_depth#); "Spanish open question mark"; % no italic correction center_bar(2,1); top y1=h; bot y2=h-dot_size; x5=x2; top y3=vround 0.25[bot y2,h-x_height]; x9=0.5[x1,x2]; bot y9=-d-o; lft x7=apprl-ho; rt x11=w-apprr; slope:=-2(y9-y3)/24u; y5-y3=slope*(x5-x1); ellipse_set(9,7,6,5); if square_dots: y4=y3; x12=x3=x1; x4=x2; y5+y0-y12=slope*(x5+x0-x12); else: x3=0.5[x1,x2]; x3a=0.25[x1,x2]; x4=0.75[x1,x2]; y4=y3a=0.5[y3,y5]; z12=z5+z0; fi z0=(thick*unitvector((z6-z5)slanted slant) rotated 90)slanted -slant; x14=x7+x0; ellipse_set(9,14,13,12); top y11=vround y7; if square_dots: y3l-y3=y3-y3r=y4l-y4=y4-y4r=-0.5thin; x3l-x3=x3-x3r=x4r-x4=x4-x4l=-0.5thin*(1++slant); x12l=x3l; x12r=x3r; x5r=x4r; x5l=x4l; ortho_penpos6(thin,z6-z5); ortho_penpos13(thin,z12-z13); z12l-z13l=whatever*(z12-z13); z12r-z13r=whatever*(z12-z13); z5l-z6l=whatever*(z5-z6); z5r-z6r=whatever*(z5-z6); penstroke z13e--z12e--z3e--z4e--z5e--z6e; draw z9 left_to_up z14{up}...{z12-z13}z13; draw z6{z6-z5}...z7 down_to_right z9 right_to_up z11; else: draw z9 left_to_up z14{up}...z13---z12...z3a ...z3{left}...z4...z5---z6...z7 down_to_right z9 right_to_up z11; fi dot(1,2); square_end11(up); labels(3a,7,8,9,10,11,14,15); penlabels(3,4,5,6,12,13); endchar; beginchar(bbasterisk,7u#+2appr#,body_height#,0); "Asterisk"; italcorr body_height#*slant-.5u#; numeric a,b; a=round(x_height/(1+cosd 36)); b=vround 0.85thin; x0=floor(w/2)+0.5; y0=h-a; x1r=x0; y1r=h+0.5; y3r=y9r=vround(y0+a*cosd 72); x3r-x0=x0-x9r=round(a*sind 72); y5r=y7r=vround(y0+a*cosd 144)-0.5; x5r-x0=x0-x7r=hround(a*sind 144); for i=0 upto 4: z[1+2i]l=z[1+2i]r +unitvector((z[1+(2i+4)mod 10]r-z[1+2i]r)slanted slant) rotated -90 scaled b slanted -slant +whatever*(z[1+(2i+4)mod 10]r-z[1+2i]r); z[1+2i]l=z[1+2i]r +unitvector((z[1+(2i-4)mod 10]r-z[1+2i]r)slanted slant) rotated 90 scaled b slanted -slant +whatever*(z[1+(2i-4)mod 10]r-z[1+2i]r); endfor for i=0 upto 4: z[2i+2]r=whatever[z[2i+1]r,z[(2i+5)mod 10]r]; z[2i+2]r=whatever[z[(2i-1)mod 10]r,z[(2i+3)mod 10]r]; z[2+2i]l=whatever[z[1+2i]l,z[1+(2i+4)mod 10]l]; z[2+2i]l=whatever[z[1+(2i-2)mod 10]l,z[1+(2i+2)mod 10]l]; endfor penstroke for i=0 upto 4: z[1+2i]e--z[2+2i]e-- endfor cycle; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar; beginchar(bbperiod,hthick#+thin#+2appr#,dot_size#,0); "Period"; italcorr (dot_size# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(1,1'); bot y1=0; top y1'=dot_size; dot(1,1'); endchar; beginchar(bbcomma,hthick#+thin#+2appr#, dot_size#,comma_size#-dot_size#); "Comma"; italcorr (dot_size# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(5,3); top y4=dot_size; lft x1=apprl-hround u; top y4-bot y1=comma_size; complete_comma; endchar; beginchar(bbsemicolon,hthick#+thin#+2appr#, x_height#,comma_size#-dot_size#); "Semicolon"; italcorr (x_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(5,3); top y4=dot_size; lft x1=apprl-hround u; top y4-bot y1=comma_size; complete_comma; pickup circle.nib; x7=x5; x7'=x3; top y7'=h; bot y7=h-dot_size; dot(7,7'); endchar; beginchar(bbcolon,hthick#+thin#+2appr#,x_height#,0); "Colon"; italcorr (x_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(1,1'); x2=x1; x2'=x1'; bot y1=0; top y2'=h; top y1'-bot y1=top y2'-bot y2=dot_size; dot(1,1'); dot(2,2'); endchar; iff known bbhyphenchar: beginchar(bbhyphenchar,4u#+2appr#,x_height#,0); "hyphenchar"; italcorr .5x_height#*slant-.5u#; penpos1(rule_thickness,90); penpos2(rule_thickness,90); top y1r=top y2r=vround(.5h+.5rule_thickness); rt x2=w-apprr; lft x1=apprl-hround .8u; penstroke z1e--z2e; penlabels(1,2); endchar; iff known bbdash: beginchar(bbdash,4u#+2appr#,x_height#,0); "dash"; italcorr .5x_height#*slant-.1u#; penpos1(rule_thickness,90); penpos2(rule_thickness,90); top y1r=top y2r=vround(.5h+.5rule_thickness); rt x2=w-apprr+hround 0.4u; lft x1=apprl-hround .4u; penstroke z1e--z2e; penlabels(1,2); endchar; beginchar(bben_dash,9u#+2letter_fit#,x_height#,0); "En dash"; italcorr 0.61803x_height#*slant+0.5u#; penpos1(thin,90); penpos2(thin,90); y1r=y2r=good.y(y1r+0.61803h-y1); x1=w-x2=hround 0.5(w-9u); penstroke z1e..z2e; penlabels(1,2); endchar; beginchar(bbem_dash,18u#+4letter_fit#,x_height#,0); "Em dash"; italcorr 0.61803x_height#*slant+0.5u#; penpos1(thin,90); penpos2(thin,90); y1r=y2r=good.y(y1r+0.61803h-y1); x1=w-x2=hround 0.5(w-18u); penstroke z1e..z2e; penlabels(1,2); endchar; iff known bbunderscore: beginchar(bbunderscore,18u#+4letter_fit#,0,paren_depth#); "Underscore"; % no italic correction penpos1(thin,90); penpos2(thin,90); y1l=y2l=-d; x1=w-x2=hround 0.5(w-18u); penstroke z1e..z2e; penlabels(1,2); endchar; beginchar(bbapostrophe,hthick#+thin#+2appr#,asc_height#,0); "Apostrophe"; italcorr (asc_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; center_bar(5,3); top y4=h; lft x1=apprl-hround u; top y4-bot y1=comma_size; complete_comma; endchar; beginchar(bbreverse_apostrophe,hthick#+thin#+2appr#,asc_height#,0); "Reverse apostrophe"; italcorr asc_height#*slant+0.5u#; center_bar(3,5); top y1=h; rt x1=w-apprr+hround u; top y1-bot y4=comma_size; complete_comma; endchar; beginchar(bbopening_quotes,7u#+2appr#,asc_height#,0); "Opening quotes"; italcorr asc_height#*slant+0.5u#; pickup circle.nib; rt x5=w-apprr; x5-x3=hthick; top y1=h; rt x1=hround(w-apprr+u); top y1-bot y4=comma_size; complete_comma; addto currentpicture also currentpicture shifted (apprl-lft x3,0); endchar; beginchar(bbclosing_quotes,7u#+2appr#,asc_height#,0); "Closing quotes"; italcorr (asc_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; pickup circle.nib; lft x5=apprl; x3-x5=hthick; top y4=h; lft x1=hround(apprl-u); top y4-bot y1=comma_size; complete_comma; addto currentpicture also currentpicture shifted (w-apprr-rt x3,0); endchar; iff known bbgerman_opening_comma: beginchar(bbgerman_opening_comma, hthick#+thin#+2appr#,dot_size#,comma_size#-dot_size#); italcorr (dot_size# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; "German opening comma"; center_bar(5,3); top y4=dot_size; lft x1=apprl-hround u; top y4-bot y1=comma_size; complete_comma; endchar; iff known bbgerman_opening_quotes: beginchar(bbgerman_opening_quotes,7u#+2appr#,dot_size#, comma_size#-dot_size#); "German opening quotes"; italcorr (dot_size# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; pickup circle.nib; lft x5=apprl; x3-x5=hthick; top y4=h; lft x1=hround(apprl-u); top y4-bot y1=comma_size; complete_comma; addto currentpicture also currentpicture shifted (w-apprr-rt x3,0); endchar; iff known bbstraight_quotes: beginchar(bbstraight_quotes,7u#+2appr#,asc_height#,0); "Straight quotes"; italcorr (asc_height# if not square_dots: -0.4dot_size# fi)*slant-0.5u#; pickup circle.nib; if square_dots: lft x1-apprl=w-apprr-rt x6=0; x1=x4; x6=x7; x2-x1=x3-x4=x6-x5=x7-x8=hthick; top y3=h; y3=y4=y7=y8; top y1=x_height; y1=y2=y5=y6; pickup square.nib; draw z1--z2--z3--z4--cycle; draw z5--z6--z7--z8--cycle; labels(1,2,3,4,5,6,7,8); else: y1=y3=x_height-thin+0.25dot_size; y2=y4=h-0.5dot_size; x1=x2=apprl+0.5(thin+hthick); x3=x4=w-apprr-0.5(thin+hthick); long_dot(1,2); long_dot(3,4); fi endchar; if (known bbfso_quotes)or(known bbfsc_quotes) or(known bbfdo_quotes)or(known bbfdc_quotes): def complete_quote(expr $,$$,$$$)= h-y[$]r=y[$+2]r=hround 0.06h; y[$+1]l=0.5[y[$]r,y[$+2]r]; x[$]r=x[$+2]r=x[$+1]l if $$$>0: + else:- fi(hround 4u+2eps)=$$; adjust_slanted_bar([$+1]l,[$]r,[$+1]a,[$]l) (thin,if $$$>0: -1 else: 1 fi); adjust_slanted_bar([$+1]l,[$+2]r,[$+1]b,[$+2]l) (thin,if $$$>0:1 else: -1 fi); z[$+1]r-z[$]r=whatever*(z[$+1]l-z[$]l); z[$+1]r-z[$+2]r=whatever*(z[$+1]l-z[$+2]l); penstroke z[$]e--z[$+1]e--z[$+2]e; penlabels([$],[$+1],[$+2]); labels([$+1]a,[$+1]b); enddef; fi iff known bbfso_quotes: beginchar(bbfso_quotes,6u#+2appr#,x_height#,0); "French single opening quote"; italcorr x_height#*slant-0.5u#; complete_quote(1,w-apprr-hround u+eps,1); endchar; iff known bbfsc_quotes: beginchar(bbfsc_quotes,6u#+2appr#,x_height#,0); "French single closing quote"; % no italic correction complete_quote(1,apprl+hround u-eps,-1); endchar; iff known bbfdo_quotes: beginchar(bbfdo_quotes,8u#+2appr#,x_height#,0); "French double opening quote"; italcorr x_height#*slant-0.5u#; complete_quote(1,w-apprr+eps,1); complete_quote(4,w-apprr-hround 3u+eps,1); endchar; iff known bbfdc_quotes: beginchar(bbfdc_quotes,8u#+2appr#,x_height#,0); "French double closing quote"; % no italic correction complete_quote(1,apprl-eps,-1); complete_quote(4,apprl+hround 3u-eps,-1); endchar; % % delimiters (see bbbigdel.mf if it still exists) % iff known parenthesis_left: beginchar(parenthesis_left,5.5u#+2appr#,body_height#,paren_depth#); "Left parenthesis"; pickup circle.nib; top y1=h; bot y3=-d; y2=0.5[y1,y3]; rt x1=rt x3=w-apprr; x4-x2=hthick; lft x2=min(apprl+hround u-ho, hround 0.5(w+apprl-apprr-thin-hthick)-eps); tmp_path:=z1{3(x2-x1),y2-y1}...z2{down}...z3{3(x3-x2),y3-y2}; z4=tmp_path intersectionpoint ((x4,y1)..(x4,y2)); z5=tmp_path intersectionpoint ((x4,y3)..(x4,y2)); draw tmp_path; draw z4..z5; square_end1((3(x1-x2),y1-y2)); square_end3((3(x3-x2),y3-y2)); labels(1,2,3,4,5); endchar; iff known parenthesis_right: beginchar(parenthesis_right,5.5u#+2appr#,body_height#,paren_depth#); "Right parenthesis"; pickup circle.nib; top y1=h; bot y3=-d; y2=0.5[y1,y3]; lft x1=lft x3=apprl; x4-x2=-hthick; rt x2=max(w-apprr-hround u+ho, hround 0.5(w+apprl-apprr+thin+hthick)+eps); tmp_path:=z1{3(x2-x1),y2-y1}...z2{down}...z3{3(x3-x2),y3-y2}; z4=tmp_path intersectionpoint ((x4,y1)..(x4,y2)); z5=tmp_path intersectionpoint ((x4,y3)..(x4,y2)); draw tmp_path; draw z4..z5; square_end1((3(x1-x2),y1-y2)); square_end3((3(x3-x2),y3-y2)); labels(1,2,3,4,5); endchar; def tmp_program(expr orientation,top_f,bot_f)= save a; a=hround(thin*(1++slant)); y6r=h; y8r=-d-1; y5r=top_f[y6r,y8r]; y7r=bot_f[y8r,y6r]; if orientation=left: forsuffixes @#=1,2,3,4: x@#r-x@#=x@#-x@#l=-0.5a; endfor x1r=x2r=x5r=x7r=min(apprl+hround u, hround 0.5(w+apprl-apprr-a-hthick)); x1-x3=x2-x4=-hthick; x6r=x8r=w-apprr+hround 0.5u; else: forsuffixes @#=1,2,3,4: x@#r-x@#=x@#-x@#l=0.5a; endfor x1r=x2r=x5r=x7r=max(w-apprr-hround u, hround 0.5(w+apprl-apprr+a+hthick)); x1-x3=x2-x4=hthick; x6r=x8r=apprl-hround 0.5u; fi forsuffixes @=1,1r,1l,3,3r,3l: z@=whatever[z5r,z6r]; endfor forsuffixes @=2,2r,2l,4,4r,4l: z@=whatever[z7r,z8r]; endfor penpos5(thin/abs cosd angle((z6r-z5r)slanted slant),90); penpos6(thin/abs cosd angle((z6r-z5r)slanted slant),90); penpos7(thin/abs cosd angle((z8r-z7r)slanted slant),-90); penpos8(thin/abs cosd angle((z8r-z7r)slanted slant),-90); penstroke z1e..z2e; penstroke z3e..z4e; penstroke z5e..z6e; penstroke z7e..z8e; penlabels(1,2,3,4,5,6,7,8); enddef; iff known bracket_left: beginchar(bracket_left,5.5u#+2appr#,body_height#,paren_depth#); "Left bracket"; tmp_program(left,0,0); endchar; iff known bracket_right: beginchar(bracket_right,5.5u#+2appr#,body_height#,paren_depth#); "Right bracket"; tmp_program(right,0,0); endchar; iff known angle_left: beginchar(angle_left,5.5u#+2appr#,body_height#,paren_depth#); "Left angle bracket"; tmp_program(left,.15,.15); endchar; iff known angle_right: beginchar(angle_right,5.5u#+2appr#,body_height#,paren_depth#); "Right angle angle"; tmp_program(right,.15,.15); endchar; vardef tmp_program(expr orientation)= path tmppp_path,tmpppp_path; pickup circle.nib; if orientation=left: lft x1=apprl-hround 0.5u; rt x4r=w-apprr+hround 0.5u; x6r=good.x 0.5(x1+x4r-hthick); x3r-x6r=hthick; else: rt x1=w-apprr+hround 0.5u; lft x4r=apprl-hround 0.5u; x6r=good.x 0.5(x1+x4r+hthick); x3r-x6r=-hthick; fi x2-x1=x4r-x5r=0.25(x6r-x1); x3r=x3l; x4l=x4r; x5r=x5l; x6r=x6l; y1=y2=good.y 0.5[-d,h]; top y4r=top y5r=h; y1-y4l=y1-y5l=y4r-y1; y5r-y6r=y3r-y1=y6l-y5l=y1-y3l=min(0.4(y5r-y1),0.75dh); tmp_path:=z1..z2 right_to_up z3r; tmpp_path:=z4r..z5r left_to_down z6r; tmppp_path=z2 right_to_down z3l; tmpppp_path=z4l..z5l left_to_up z6l; draw tmp_path; draw tmpp_path; draw tmppp_path; draw tmpppp_path; hbbowl(z2,z3r,(x3r,y6r),abs(x3r-x6r)) tmp_path; hbbowl(z2,z3l,(x3l,y6l),abs(x3l-x6l)) tmppp_path; hbbowl(z5r,z6r,(x6r,y3r),abs(x3r-x6r)) tmpp_path; hbbowl(z5l,z6l,(x6l,y3l),abs(x3l-x6l)) tmpppp_path; square_end1((x1-x4r,0)); square_end4r((x4r-x1,0)); square_end4l((x4l-x1,0)); penlabels(1,2,3,4,5,6); enddef; iff known brace_left: beginchar(brace_left,5.5u#+2appr#,body_height#,paren_depth#); "Left brace"; tmp_program(left); endchar; iff known brace_right: beginchar(brace_right,5.5u#+2appr#,body_height#,paren_depth#); "Right brace"; tmp_program(right); endchar; % the widths of the two next characters are calculated % to fit computer modern corresponding ones. iff known vertical: beginchar(vertical,3u#+2appr#,body_height#,paren_depth#); "Vertical"; save a; a=hround(thin*(1++slant)); penpos1(a,0); penpos2(a,0); penpos3(a,0); penpos4(a,0); penpos5(thin,90); penpos6(thin,90); penpos7(thin,90); penpos8(thin,90); x1l=x2l=x5r=x7l=hround 0.5(w+apprl-apprr-hthick-a); x3r=x4r=x6r=x8l=x1l+hthick+a; y1=y3=y5r=y6r=h+1; y2=y4=y7l=y8l=-d-1; penstroke z1e..z2e; penstroke z3e..z4e; penstroke z5e..z6e; penstroke z7e..z8e; penlabels(1,2,3,4,5,6,7,8); endchar; numeric slash_width#; slash_width#=(7u#-rule_thickness#) *((body_height#+paren_depth#)/(body_height#+paren_depth#-rule_thickness#)) +diag_width(thick#, (7u#-rule_thickness#,body_height#+paren_depth#-rule_thickness#)); beginchar(bbslash,slash_width#+2appr#, body_height#,paren_depth#); "Slash"; italcorr body_height#*slant-.5u#; x1r=w-apprr+0.5u; x4l=apprl-0.5u; y1r=h; y4l=-d; adjust_slanted_bar(1r,4l,2l,3r)(thick+thin,-1); a:=diag_width(thin,z1r-z3r); penpos1(a,0); penpos2(a,0); penpos3(a,0); penpos4(a,0); y1-y1a=thin; z1a=whatever[z1,z3]; z1-z1a=z2-z2a=z3a-z3=z4a-z4; penstroke z1e..z3e; penstroke z2e..z4e; fill z1--z2--z2a--z1a--cycle; fill z3--z4--z4a--z3a--cycle; penlabels(1,2,3,4); labels(1a,2a,3a,4a); endchar; numeric slash_width#; slash_width#=(7u#-rule_thickness#) *((body_height#+paren_depth#)/(body_height#+paren_depth#-rule_thickness#)) +diag_width(thick#, (-7u#+rule_thickness#,body_height#+paren_depth#-rule_thickness#)); beginchar(bbback_slash,slash_width#+2appr#, body_height#,paren_depth#); "Backlash"; italcorr body_height#*slant-.5u#; x1l=apprl-0.5u; x4r=w-apprr+0.5u; y1l=h; y4r=-d; adjust_slanted_bar(1l,4r,2r,3l)(thick+thin,1); a:=diag_width(thin,z1l-z3l); penpos1(a,0); penpos2(a,0); penpos3(a,0); penpos4(a,0); y1-y1a=thin; z1a=whatever[z1,z3]; z1-z1a=z2-z2a=z3a-z3=z4a-z4; penstroke z1e..z3e; penstroke z2e..z4e; fill z1--z2--z2a--z1a--cycle; fill z3--z4--z4a--z3a--cycle; penlabels(1,2,3,4); labels(1a,2a,3a,4a); endchar;