summaryrefslogtreecommitdiff
path: root/fonts/mnsymbol/source/Sym-Operators.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/mnsymbol/source/Sym-Operators.mf
Initial commit
Diffstat (limited to 'fonts/mnsymbol/source/Sym-Operators.mf')
-rw-r--r--fonts/mnsymbol/source/Sym-Operators.mf882
1 files changed, 882 insertions, 0 deletions
diff --git a/fonts/mnsymbol/source/Sym-Operators.mf b/fonts/mnsymbol/source/Sym-Operators.mf
new file mode 100644
index 0000000000..bb93d8291d
--- /dev/null
+++ b/fonts/mnsymbol/source/Sym-Operators.mf
@@ -0,0 +1,882 @@
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big plus";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw (centre + op_height/2 * dir 0) -- (centre + op_height/2 * dir 180);
+ draw (centre + op_height/2 * dir 90) -- (centre + op_height/2 * dir 270);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginbigop(scale, scale); "big times";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z1 - z0 = z3 - z2 = op_width * dir 0;
+ z2 - z0 = op_width * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- z3;
+ draw z1 -- z2;
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big wedge";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- 1/2[z1, z2] -- z3;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big wedge dot";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- 1/2[z1, z2] -- z3;
+ fill circle(centre - sign * 1/4op_height * dir 90, 4/3dot_size * sqrt scale);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(6/5scale, scale); "double big wedge";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = 5/6op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ 1/2[z0a,z0b] = z0;
+ 1/2[z1a,z1b] = 1/2[z1, z2];
+ 1/2[z2a,z2b] = z3;
+ z0b - z0a = z1b - z1a = z2b - z2a = 1/3(plus_size + 11/5rule_thickness) * dir 0;
+
+ draw z0a -- z1a -- z2a;
+ draw z0b -- z1b -- z2b;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big curly wedge";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw prec(centre + sign * op_height/2 * dir 90,
+ centre - sign * op_height/2 * dir 90,
+ op_width);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big curly wedge dot";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw prec(centre + sign * op_height/2 * dir 90,
+ centre - sign * op_height/2 * dir 90,
+ op_width);
+ fill circle(centre - sign * 3/8op_height * dir 90, 4/3dot_size * sqrt scale);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(6/5scale, scale); "double big curly wedge";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ 1/2[z0,z1] = centre;
+ z1 - z0 = 1/3(plus_size + 11/5rule_thickness) * dir 0;
+
+ draw prec(z0 + sign * op_height/2 * dir 90,
+ z0 - sign * op_height/2 * dir 90,
+ 5/6op_width);
+ draw prec(z1 + sign * op_height/2 * dir 90,
+ z1 - sign * op_height/2 * dir 90,
+ 5/6op_width);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw subset(centre + sign * op_height/2 * dir 90,
+ centre - sign * op_height/2 * dir 90,
+ op_width);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union dot";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw subset(centre + sign * op_height/2 * dir 90,
+ centre - sign * op_height/2 * dir 90,
+ op_width);
+ fill circle(centre - sign * 1/8op_height * dir 90, 4/3dot_size * sqrt scale);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union plus";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw subset(centre + sign * op_height/2 * dir 90,
+ centre - sign * op_height/2 * dir 90,
+ op_width);
+
+ t := 2rule_thickness;
+ r := 3/8op_width - t;
+
+ draw (centre - sign * 1/8op_width * dir 90 + r * dir 0)
+ -- (centre - sign * 1/8op_width * dir 90 + r * dir 180);
+ draw (centre + (r - sign * 1/8op_width) * dir 90)
+ -- (centre + (r + sign * 1/8op_width) * dir 270);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- z1 -- z2 -- z3;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union dot";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- z1 -- z2 -- z3;
+ fill circle(centre - sign * 1/8op_height * dir 90, 4/3dot_size * sqrt scale);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union plus";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z3 - z0 = z2 - z1 = op_width * dir 0;
+ z1 - z0 = sign * op_height * dir 90;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw z0 -- z1 -- z2 -- z3;
+
+ t := 2rule_thickness;
+ r := 3/8op_width - t;
+
+ draw (centre - sign * 1/8op_width * dir 90 + r * dir 0)
+ -- (centre - sign * 1/8op_width * dir 90 + r * dir 180);
+ draw (centre + (r - sign * 1/8op_width) * dir 90)
+ -- (centre + (r + sign * 1/8op_width) * dir 270);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for alpha = 0, 90, 45, 135:
+ for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle minus";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ r := op_height/2 - 11/10 * (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+ draw (centre - r * dir alpha) -- (centre + r * dir alpha);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for alpha = 0, 45:
+ for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle plus";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ r := op_height/2 - 11/10 * (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+ draw (centre - r * dir alpha) -- (centre + r * dir alpha);
+ draw (centre - r * dir (alpha + 90)) -- (centre + r * dir (alpha + 90));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle dot";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+ fill circle(centre, scale * 1.3dot_size);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle circle";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+ draw circle(centre, op_height/5);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle triangle";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ draw circle(centre, op_height/2);
+
+ pickup rule_pen;
+
+ draw triangle(centre, op_height/5, 90);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle asterisk";
+ thick := 4/3rule_thickness * sqrt scale;
+
+ pickup pencircle scaled thick;
+
+ r := op_height/2 - 11/10rule_thickness * (4/3 * sqrt scale);
+
+ draw circle(centre, op_height/2);
+
+ penpos a0(4/3thick, 0 - 7);
+ penpos a1(4/3thick, 72 - 7);
+ penpos a2(4/3thick, 144 - 7);
+ penpos a3(4/3thick, 216 - 7);
+ penpos a4(4/3thick, 288 - 7);
+
+ penpos b0(2/3thick, 0 - 7);
+ penpos b1(2/3thick, 72 - 7);
+ penpos b2(2/3thick, 144 - 7);
+ penpos b3(2/3thick, 216 - 7);
+ penpos b4(2/3thick, 288 - 7);
+
+ reg_poly_points(a)(5, centre, r, 77);
+
+ z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = centre;
+
+ fill stroke z.a0e -- z.b0e;
+ fill stroke z.a1e -- z.b1e;
+ fill stroke z.a2e -- z.b2e;
+ fill stroke z.a3e -- z.b3e;
+ fill stroke z.a4e -- z.b4e;
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle star";
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ r := op_height/2 - 11/10rule_thickness * (4/3 * sqrt scale);
+
+ draw circle(centre, op_height/2);
+
+ pickup rule_pen;
+
+ reg_poly_points(a)(5, centre, r, 90);
+ reg_poly_points(b)(5, centre, r/10, 126);
+
+ draw z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1.1, 1.54:
+ beginbigop(1.1scale, scale); "product";
+ draw_product(centre, op_width, op_height, sign, 5/3rule_thickness * sqrt scale);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+def draw_sum(suffix $)(expr centre, width, height, thick) =
+ thin := 2/3thick;
+
+ z1$ - z0$ = z3$ - z2$ = width * dir 0;
+ z2$ - z0$ = height * dir 90;
+
+ 1/2[1/2[z0$,z1$], 1/2[z2$,z3$]] = centre;
+
+ z4$ - z1$ = z3$ - z5$ = 1/5height * dir 90;
+
+ z6$ = whatever[z0$,z1$] = z4$ - whatever * dir 77;
+ z7$ = whatever[z2$,z3$] = z5$ + whatever * dir -77;
+
+ penpos 0$(thick, 90);
+ penpos 6$(thick, 90);
+ penpos 4$(thin, 167);
+ penpos 2$(thin, -90);
+ penpos 7$(thin, -90);
+ penpos 5$(thin, 203);
+
+ z8$ = centre;
+ penpos 8$(2thin, 20);
+
+ z9$ = z8$r + whatever * (z2$r - z8$l) = whatever[z2$r,z7$r];
+
+ z10$ = z0$l + thin * dir 90;
+ z11$ = z8$r + whatever * (z10$ - z8$l);
+ y11$ = y10$;
+
+ z12$ = whatever[z10$,z8$l];
+ y12$ = y0$r;
+
+ fill z0$l -- z6$l -- z4$l -- z4$r{-dir 77} .. {dir 180}1/4[z6$r,z0$r] -- z12$ -- z10$ -- cycle;
+ fill z2$l -- z7$l -- z5$l -- z5$r{dir 113} .. {dir 180}1/4[z7$r,z2$r] -- z2$r -- cycle;
+ fill z2$r -- z8$l -- z8$r -- z9$ -- cycle;
+ fill z10$ -- z8$l -- z8$r -- z11$ -- cycle;
+enddef;
+
+for scale = 1.1, 1.54:
+ beginbigop(scale, scale); "sum";
+ draw_sum(a)(centre, op_width, op_height, 4/3rule_thickness * sqrt scale);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for number = 0, 1, 2, 3:
+ for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * (1/2 + 2/3number) * order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ for i = 0 upto number:
+ centre := ((w - scale * (number - 2*i) * 2/3order_width + display_shift + text_shift)/2,
+ (h - d)/2);
+
+ draw_integral([i])(scale, centre);
+ endfor;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * (1/2 + 1) * order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "integral dots";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := ((w - 2scale * order_width + display_shift + text_shift)/2,
+ (h - d)/2);
+
+ draw_integral([0])(scale, centre);
+
+ centre := ((w + 2scale * order_width + display_shift + text_shift)/2,
+ (h - d)/2);
+
+ draw_integral([2])(scale, centre);
+
+ z0 = 1/4[z0[0],z0[2]];
+ z1 = 2/4[z0[0],z0[2]];
+ z2 = 3/4[z0[0],z0[2]];
+
+ fill circle(z0, dot_size);
+ fill circle(z1, dot_size);
+ fill circle(z2, dot_size);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "landup/down integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := ((w + display_shift + text_shift)/2, (h - d)/2);
+
+ draw_integral(a)(scale, centre);
+
+ pickup pencircle scaled 1/2thick;
+
+ z0 = z0a + sign * sqrt scale * (-2thick, -2/3thick);
+ z1 = z0a + sign * sqrt scale * ( 0, 2/3thick);
+ z2 = z0a + sign * sqrt scale * ( 2thick, -2/3thick);
+
+ draw z0 .. z1 .. z2;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "stroked integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := ((w + display_shift + text_shift)/2, (h - d)/2);
+
+ draw_integral(a)(scale, centre);
+
+ alpha := angle (z1a - z3a) - 70;
+
+ pickup pencircle scaled 1/2thick;
+
+ draw (z0a - sqrt scale * 2thick * dir alpha) -- (z0a + sqrt scale * 2thick * dir alpha);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for number = 0, 1:
+ for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1.3) * 4/5order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * (1/2 + 2/3number) * order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "contour integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ for i = 0 upto number:
+ centre := ((w - scale * (number - 2*i) * 2/3order_width + display_shift + text_shift)/2,
+ (h - d)/2);
+
+ draw_integral([i])(scale, centre);
+ endfor;
+
+ centre := 1/2[z0[0], z0[number]];
+
+ pickup pencircle scaled 5/12thick;
+
+ if number = 0:
+ draw circle(centre, 2thick * sqrt scale);
+ else:
+ draw super_ellipse(centre,
+ (2thick + number * 5/5thick) * sqrt scale,
+ (2thick + number * 1/5thick) * sqrt scale,
+ 7/8, 0);
+ fi;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for alpha = -90, 90:
+ for sign = 1, -1:
+ for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1.3) * 4/5order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "oriented contour integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+ centre := ((w+display_shift+text_shift)/2, (h-d)/2);
+
+ draw_integral(a)(scale, centre);
+
+ pickup pencircle scaled 5/12thick;
+
+ r := 2thick * sqrt scale;
+
+ beta := alpha + angle (z1a - z3a) + 25sign;
+
+ reg_poly_points(a)(8, z0a, r, beta);
+
+ z0 = z0a + r * dir (beta + 10);
+ z1 = z0a + r * dir (beta - 10);
+
+ draw z0{dir (beta + 100)} .. z.a1 .. z.a2 .. z.a3 .. z.a4 .. z.a5 .. z.a6 .. z.a7 ..
+ {dir (beta + 80)}z1;
+
+ if sign > 0:
+ draw arrowhead(z1, (beta + 65), 1/2scale * arrow_spread);
+ else:
+ draw arrowhead(z0, (beta - 65), 1/2scale * arrow_spread);
+ fi;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+ endfor;
+endfor;
+
+for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "sum integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := ((w + display_shift + text_shift)/2, (h - d)/2);
+
+ draw_integral(a)(scale, centre);
+ draw_sum(b, 1/3[z0a.l,z0a.r], scale * order_width, 3/4scale * asc_height, 1/2thick);
+
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+%for scale = 1, 1.8:
+%
+% display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+% text_shift# := -2/8order_width#;
+% script_delta# := (1 + 3/2(scale-1)) * 1/2order_width#;
+% define_whole_pixels(display_shift, text_shift, script_delta);
+%
+% beginsymbol(scale * 1/2 * order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+% ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+% (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+% "partial integral";
+%
+% italcorr script_delta#; % kerning between upper limit and lower limit
+% endchar;
+%endfor;
+%charlist current_char - 1: current_char;
+
+for scale = 1, 1.8:
+
+ display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := -2/8order_width#;
+ script_delta# := (1 + 3/2(scale-1)) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift, script_delta);
+
+ beginsymbol(scale * (1/2 + 1) * order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial integral dots";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := (1/2(w + script_delta), (h-d)/2);
+
+ z0 = centre + 1/2scale * order_width * left;
+ z1 = centre;
+ z2 = centre + 1/2scale * order_width * right;
+
+ fill circle(z0, dot_size);
+ fill circle(z1, dot_size);
+ fill circle(z2, dot_size);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.8:
+
+ display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := -4/8order_width# + 5/4(scale-1) * 2/8order_width#;
+ script_delta# := (1/2 + 4/2(scale-1)) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift, script_delta);
+
+ beginsymbol(scale * 1/2 * order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial landup/down integral";
+
+ italcorr script_delta#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := (1/2(w + script_delta), (h-d)/2);
+
+ pickup pencircle scaled 1/2thick;
+
+ z0 = centre + sign * sqrt scale * (-2thick, -2/3thick);
+ z1 = centre + sign * sqrt scale * ( 0, 2/3thick);
+ z2 = centre + sign * sqrt scale * ( 2thick, -2/3thick);
+
+ draw z0 .. z1 .. z2;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.8:
+
+ display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := -4/8order_width# + 5/4(scale-1) * 2/8order_width#;
+ script_delta# := (1/2 + 4/2(scale-1)) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift, script_delta);
+
+ beginsymbol(scale * 1/2 * order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial stroked integral";
+
+ italcorr script_delta#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := (1/2(w + script_delta), (h-d)/2);
+
+ alpha := 10;
+
+ pickup pencircle scaled 1/2thick;
+
+ draw (centre - sqrt scale * 2thick * dir alpha) -- (centre + sqrt scale * 2thick * dir alpha);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for number = 0, 1:
+ for scale = 1, 1.8:
+
+ display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := -4/8order_width# + 5/4(scale-1) * 2/8order_width#;
+ script_delta# := (1/2 + 4/2(scale-1)) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift, script_delta);
+
+ beginsymbol(scale * (1/2 + 2/3number) * order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial contour integral";
+
+ italcorr script_delta#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ centre := (1/2(w + script_delta), (h-d)/2);
+
+ pickup pencircle scaled (5/12thick * sqrt scale);
+
+ if number = 0:
+ draw circle(centre, 2thick * sqrt scale);
+ else:
+ draw super_ellipse(centre,
+ (2thick + number * 5/5thick) * sqrt scale,
+ (2thick + number * 1/5thick) * sqrt scale,
+ 7/8, 0);
+ fi;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for alpha = -90, 90:
+ for sign = 1, -1:
+ for scale = 1, 1.8:
+
+ display_shift# := 0;%(1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := -4/8order_width# + 5/4(scale-1) * 2/8order_width#;
+ script_delta# := (1/2 + 4/2(scale-1)) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift, script_delta);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# - display_shift# - 2text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial oriented contour integral";
+
+ italcorr script_delta#; % kerning between upper limit and lower limit
+
+ pair centre;
+ centre := (1/2(w + script_delta), (h-d)/2);
+
+ pickup pencircle scaled (5/12thick * sqrt scale);
+
+ r := 2thick * sqrt scale;
+
+ beta := alpha + 80 + 25sign;
+
+ reg_poly_points(a)(8, centre, r, beta);
+
+ z0 = centre + r * dir (beta + 10);
+ z1 = centre + r * dir (beta - 10);
+
+ draw z0{dir (beta + 100)} .. z.a1 .. z.a2 .. z.a3 .. z.a4 .. z.a5 .. z.a6 .. z.a7 ..
+ {dir (beta + 80)}z1;
+
+ if sign > 0:
+ draw arrowhead(z1, (beta + 65), 1/2scale * arrow_spread);
+ else:
+ draw arrowhead(z0, (beta - 65), 1/2scale * arrow_spread);
+ fi;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+ endfor;
+endfor;
+
+for scale = 1, 1.8:
+
+ display_shift# := (1 + 5/2(scale-1)) * 1/4order_width#;
+ text_shift# := (scale-1) * 1/2order_width#;
+ define_whole_pixels(display_shift, text_shift);
+
+ beginsymbol(scale * 1/2order_width# + 2side_bearing# + display_shift# - text_shift#,
+ ((scale - 1)/2 + 1) * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#,
+ (scale - 1)/2 * 1.4asc_height# + scale * 1/6equal_spread# + 2/3rule_thickness#);
+ "partial sum integral";
+
+ italcorr (1 + 3/2(scale-1)) * 2/3order_width#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ z0 = (1/2(w + script_delta), (h-d)/2);
+
+ penpos0(4/5thick, 0);
+
+ draw_sum(a, 1/3[z0l,z0r], scale * order_width, 3/4scale * asc_height, 1/2thick * sqrt scale);
+
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginbigop(3/4scale, scale); "complement";
+
+ pickup pencircle scaled (4/3rule_thickness * sqrt scale);
+
+ z0 = centre + op_height/2 * up;
+ z1 = centre - op_height/2 * up;
+ z2 = centre - op_width/2 * right;
+ z3 = centre + op_width/2 * right;
+
+ draw (1/4[z0,z1] + op_width/2 * right){up}
+ .. z0
+ .. {down}(1/3[z0,z1] - op_width/2 * right)
+ -- (2/3[z0,z1] - op_width/2 * right){down}
+ .. z1
+ .. (3/4[z0,z1] + op_width/2 * right){up};
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+