diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf | 1132 |
1 files changed, 1132 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf new file mode 100644 index 00000000000..8dbcce80c92 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf @@ -0,0 +1,1132 @@ +% +% Copyright (c) 2011, Michael Ummels <michael.ummels@rwth-aachen.de> +% +% This Font Software is licensed under the SIL Open Font License, +% Version 1.1. This license is in the accompanying file OFL.txt, and +% is also available with a FAQ at: http://scripts.sil.org/OFL +% + +vardef ifneg(text values) = + select(negated)(values) +enddef; + +% equal signs + +if negated < 2: + beginorder(1, order_width#, ifneg(1,5/2) * equal_spread#); "equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 5/2equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(2,7/2) * equal_spread#); "equiv"; + s := equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex, right_ex, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 3.5equal_spread); + fi; + endchar; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1/2, 2) * equal_spread#); "sim"; + draw_sim(a, left_ex, right_ex, 1/4equal_spread, line_thickness); + + if negated = 1: + stroke_through(centre, 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(3/2, 5/2) * equal_spread#); "approx"; + s := 1/2equal_spread; + + draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness); + draw_sim(b, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness); + + if negated = 1: + stroke_through(centre, 5/2equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(5/2, 7/2) * equal_spread#); "triple sim"; + s := equal_spread; + + draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness); + draw_sim(b, left_ex, right_ex, 1/4equal_spread, line_thickness); + draw_sim(c, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness); + + if negated = 1: + stroke_through(centre, 7/2equal_spread); + fi; + endchar; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(3/2, 5/2) * equal_spread#); "sim equal"; + s := 1/2equal_spread; + + draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 5/2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(3/2, 5/2) * equal_spread#); "equal sim"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_sim(a, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness); + + if negated = 1: + stroke_through(centre, 5/2equal_spread); + fi; + endchar; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(5/2, 7/2, 6/2) * equal_spread#); "cong"; + s := equal_spread; + + draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness); + draw_line(left_ex, right_ex, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 7/2equal_spread); + elseif negated = 2: + if sign = 1: + stroke_through(centre - 5/8s * up, 7/4equal_spread); + else: + stroke_through(centre - 1/2s * up, 2equal_spread); + fi; + fi; + endchar; + endfor; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(5/2, 7/2) * equal_spread#); "approx equal"; + s := equal_spread; + + draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness); + draw_sim(b, left_ex, right_ex, 1/4equal_spread, line_thickness); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 7/2equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(1,2) * equal_spread# + 2/5order_width#); "bump equal"; + s := 1/2equal_spread; + + draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 2equal_spread + 2/5order_width); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(2,3) * equal_spread# + 2/5order_width#); "bump over equal"; + s := equal_spread; + + draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness); + draw_line(left_ex, right_ex, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 3equal_spread + 2/5order_width); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(1,2) * equal_spread# + 2/5order_width#); "double bump equal"; + s := 1/2equal_spread; + + draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness); + draw_bump(b, -1, left_ex - s * up, right_ex - s * up, order_width/5, line_thickness); + + if negated = 1: + stroke_through(centre, 2equal_spread + 2/5order_width); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(3,4) * equal_spread# + 3/4dot_size#); "dot equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + fill dot(centre + 3s * up, 3/4dot_size); + + if negated = 1: + stroke_through(centre, 4equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(3,4) * equal_spread# + 3/4dot_size#); "equal dot"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + fill dot(centre - 3s * up, 3/4dot_size); + + if negated = 1: + stroke_through(centre, 4equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(3,4) * equal_spread# + 3/4dot_size#); "dot equal dot"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + fill dot(centre + 3s * up, 3/4dot_size); + fill dot(centre - 3s * up, 3/4dot_size); + + if negated = 1: + stroke_through(centre, 4equal_spread); + fi; + endchar; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(3,4) * equal_spread# + 3/4dot_size#); "falling dot equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + fill dot(left_ex + sign * 3/4dot_size * right + 3s * up, 3/4dot_size); + fill dot(right_ex - sign * 3/4dot_size * right - 3s * up, 3/4dot_size); + + if negated = 1: + stroke_through(centre, 4equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(1, order_width#, ifneg(1/2, 2) * equal_spread#); "smile"; + draw_smile(a, sign, left_ex, right_ex, 1/2equal_spread, line_thickness, true); + + if negated = 1: + stroke_through(centre, 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(1, order_width#, ifneg(11/6, 17/6) * equal_spread#); "smile frown"; + s := 2/3equal_spread; + + draw_smile(a, sign, left_ex + s * up, right_ex + s * up, 1/2equal_spread, line_thickness, true); + draw_smile(b, -sign, left_ex - s * up, right_ex - s * up, 1/2equal_spread, line_thickness, true); + + if negated = 1: + stroke_through(centre, 17/6equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(1, order_width#, ifneg(5/2, 7/2) * equal_spread#); "smile over equal"; + s := 1equal_spread; + + draw_smile(a, sign, left_ex + s * up, right_ex + s * up, 1/2equal_spread, line_thickness, true); + draw_line(left_ex, right_ex, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + if negated = 1: + stroke_through(centre, 7/2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(1, 5/2) * equal_spread#); "equal circ"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + draw_circle(centre, 5/6s, 3/4line_thickness); + + if negated = 1: + stroke_through(centre, 5/2equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, ifneg(9/2, 5) * equal_spread#); "circ equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + draw_circle(centre + 7/2s * up, 5/6s, 3/4line_thickness); + + if negated = 1: + stroke_through(centre + s * up, 4equal_spread); + fi; + endchar; +fi; + +for sign = 1, -1: + if negated < 2: + beginorder(1, order_width#, 5equal_spread#); "wedge equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + + draw_less(a, centre + (7/2 + sign * 3/2) * s * up, centre + (7/2 - sign * 3/2) * s * up, 4s, line_thickness, false); + + if negated = 1: + stroke_through(centre + s * up, 4equal_spread); + fi; + endchar; + fi; +endfor; + +if negated < 2: + beginorder(1, order_width#, 5equal_spread#); "star equal"; + s := 1/2equal_spread; + r := 5/4s + 3/4line_thickness; + t := 1/11r; + + reg_poly_points(a)(5, centre + 7/2s * up, r, 90); + reg_poly_points(b)(5, centre + 7/2s * up, .4r, 126); + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + %draw_triangle(a, centre + 7/2s * up, 3/2s, 90, 3/4line_thickness); + + fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle; + + if negated = 1: + stroke_through(centre + s * up, 4equal_spread); + fi; + endchar; +fi; + +if negated < 2: + beginorder(1, order_width#, 5equal_spread#); "triangle equal"; + s := 1/2equal_spread; + + draw_line(left_ex + s * up, right_ex + s * up, false); + draw_line(left_ex - s * up, right_ex - s * up, false); + draw_triangle(a, centre + 7/2s * up, 3/2s, 90, 3/4line_thickness); + + if negated = 1: + stroke_through(centre + s * up, 4equal_spread); + fi; + endchar; +fi; + +% element signs + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "element"; + draw_subset(a, left_ex, right_ex, greater_spread, line_thickness); + draw_line(z4a, 1/2[z0a,z1a], false); + + if negated = 1: + stroke_through(centre, equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +% orderings + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1/2) * equal_spread# + greater_spread#); "less than"; + draw_less(a, left_ex, right_ex, greater_spread, line_thickness, false); + + if negated = 1: + stroke_through(centre, 1/2equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2/3,5/3,5/3) * equal_spread# + 3/4greater_spread#); "less than or equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/3equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, false); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 5/3equal_spread + 3/4greater_spread); + elseif negated = 2: + stroke_through(1/2[z2,z3], equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "less than or slanted equal"; + s := 3/4greater_spread; + t := 1/2equal_spread; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + + if sign = 1: + draw_line(z1a - 2t * up, z4a - 2t * up, false); + else: + draw_line(z0a - 2t * up, z3a - 2t * up, false); + fi; + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(5/3, 8/3, 8/3) * equal_spread# + 3/4greater_spread#); "less than or double equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 5/6equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, false); + draw_line(z2, z3, false); + draw_line(z4, z5, false); + + if negated = 1: + stroke_through(centre, 8/3equal_spread + 3/4greater_spread); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1, 3/2, 3/2) * equal_spread# + 3/4greater_spread#); "less sim"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/2equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, false); + if sign > 0: + draw_sim(b, z2, z3, 1/4equal_spread, line_thickness); + else: + draw_sim(b, z3, z2, 1/4equal_spread, line_thickness); + fi + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[z2,z3], equal_spread); + fi; + endchar; + endfor; +fi + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2, 5/2, 5/2) * equal_spread# + 3/4greater_spread#); "less approx"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, false); + + if sign > 0: + draw_sim(b, z2, z3, 1/4equal_spread, line_thickness); + draw_sim(c, z4, z5, 1/4equal_spread, line_thickness); + else: + draw_sim(b, z3, z2, 1/4equal_spread, line_thickness); + draw_sim(c, z5, z4, 1/4equal_spread, line_thickness); + fi + + if negated = 1: + stroke_through(centre, 5/2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1, 3/2 + 1/2sign) * equal_spread# + 9/8greater_spread#); "less greater"; + s := 3/4greater_spread; + t := 1/2equal_spread + 1/4s; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false); + + if negated = 1: + stroke_through(centre, (3/2 + 1/2sign) * equal_spread + 3/2s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(4/3, 11/6 + 1/2sign) * equal_spread# + 3/2greater_spread#); "less equal greater"; + s := 3/4greater_spread; + t := 2/3equal_spread + 1/2s; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false); + draw_line(left_ex, right_ex, false); + + if negated = 1: + stroke_through(centre, (11/6 + 1/2sign) * equal_spread + 2s); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(7/3, 17/6 + 1/2sign, 7/3) * equal_spread# + 3/2greater_spread#); "less double equal greater"; + s := 3/4greater_spread; + t := 7/6equal_spread + 1/2s; + u := 1/2equal_spread; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false); + draw_line(left_ex + u * up, right_ex + u * up, false); + draw_line(left_ex - u * up, right_ex - u * up, false); + + if negated = 1: + stroke_through(centre, (17/6 + 1/2sign) * equal_spread + 2s); + elseif negated = 2: + stroke_through(centre, 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2, 5/2 + 1/2sign) * equal_spread# + 9/8greater_spread#); "less slanted equal greater"; + s := 3/4greater_spread; + t := equal_spread + 1/4s; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false); + + if sign = 1: + draw_line(z1a - equal_spread * up, z4a - equal_spread * up, false); + else: + draw_line(z0a - equal_spread * up, z3a - equal_spread * up, false); + fi; + + if negated = 1: + stroke_through(centre, (5/2 + 1/2sign) * equal_spread + 3/2s); + fi; + endchar; + endfor; +fi; + + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width# + 2equal_spread# + line_thickness#, ifneg(0,1) * equal_spread# + greater_spread#); "less less"; + s := 2equal_spread; + + draw_less(a, left_ex, right_ex - sign * s * right, greater_spread, line_thickness, false); + draw_less(b, left_ex + sign * s * right, right_ex, greater_spread, line_thickness, false); + + if negated = 1: + stroke_through(centre, equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width# + 4equal_spread# + line_thickness#, ifneg(0,1) * equal_spread# + greater_spread#); "less less less"; + s := 2equal_spread; + + draw_less(a, left_ex, right_ex - sign * 2s * right, greater_spread, line_thickness, false); + draw_less(b, left_ex + sign * s * right, right_ex - sign * s * right, greater_spread, line_thickness, false); + draw_less(c, left_ex + sign * 2s * right, right_ex, greater_spread, line_thickness, false); + + if negated = 1: + stroke_through(centre, equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1/2) * equal_spread# + greater_spread#); "closed less than"; + draw_less(a, left_ex, right_ex, greater_spread, line_thickness, true); + + if negated = 1: + stroke_through(centre, 1/2equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2/3, 5/3) * equal_spread# + 3/4greater_spread#); "closed less than or equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/3equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, true); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 5/3equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width# * sqrt(5/4), ifneg(0,1/2) * equal_spread# + greater_spread#); "round less than"; + thick := line_thickness; + + z0 = left_ex; + z1 = z0 + order_width * dir angle(right_ex - left_ex); + + draw_less(a, z0, z1, greater_spread, thick, false); + + theta := angle(z0a - z2a); + + z0a - z4 = 1/2thick * dir theta; + z1a - z5 = 1/2thick * dir theta; + + penpos4(thick, theta); + penpos5(thick, -theta); + + fill stroke z4.e{dir (theta - 90)} .. {dir(-theta - 90)}z5.e; + + if negated = 1: + stroke_through(centre, 1/2equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width# * sqrt(7/6), ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "round less than or slanted equal"; + thick := line_thickness; + s := 3/4greater_spread; + t := 1/2equal_spread; + + z0 = left_ex + t * up; + z1 = z0 + order_width * dir angle(right_ex - left_ex); + + draw_less(a, z0, z1, s, thick, false); + + theta := angle(z0a - z2a); + + z0a - z4 = 1/2thick * dir theta; + z1a - z5 = 1/2thick * dir theta; + + penpos4(thick, theta); + penpos5(thick, -theta); + + fill stroke z4.e{dir (theta - 90)} .. {dir(-theta - 90)}z5.e; + + if sign = 1: + draw_line(z1a - 2t * up, z4a - 2t * up, false); + else: + draw_line(z0a - 2t * up, z3a - 2t * up, false); + fi; + + if negated = 1: + stroke_through(centre, 3/2equal_spread + 3/4greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "square subset"; + s := greater_spread; + + draw_line(left_ex + s/2 * up, right_ex + s/2 * up, false); + draw_line(left_ex - s/2 * up, right_ex - s/2 * up, false); + draw_line(left_point + s/2 * up, left_point - s/2 * up, false); + + if negated = 1: + stroke_through(centre, equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,2,2) * equal_spread# + 3/4greater_spread#); "square subset equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (equal_spread + s/2) * up; + z0 - left_ex = z0' - left_point = z1 - right_ex = 1/2equal_spread * up; + + draw_line(z0 + s/2 * up, z1 + s/2 * up, false); + draw_line(z0 - s/2 * up, z1 - s/2 * up, false); + draw_line(z0' + s/2 * up, z0' - s/2 * up, false); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[z2,z3] + 1/2equal_spread * up, 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2,3,3) * equal_spread# + 3/4greater_spread#); "square subset double equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (equal_spread + s/2) * up; + z0 - left_ex = z0' - left_point = z1 - right_ex = equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_line(z0 + s/2 * up, z1 + s/2 * up, false); + draw_line(z0 - s/2 * up, z1 - s/2 * up, false); + draw_line(z0' + s/2 * up, z0' - s/2 * up, false); + draw_line(z2, z3, false); + draw_line(z4, z5, false); + + if negated = 1: + stroke_through(centre, 3equal_spread + s); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0, 1) * equal_spread# + greater_spread#); "double square subset"; + s := greater_spread; + t := greater_spread - 3/2equal_spread; + + z0 - left_ex = z0' - left_point = 3/4equal_spread * dir (90 - sign * 90); + + draw_line(left_ex + s/2 * up, right_ex + s/2 * up, false); + draw_line(left_ex - s/2 * up, right_ex - s/2 * up, false); + draw_line(left_point + s/2 * up, left_point - s/2 * up, false); + + draw_line(z0 + t/2 * up, right_ex + t/2 * up, false); + draw_line(z0 - t/2 * up, right_ex - t/2 * up, false); + draw_line(z0' + t/2 * up, z0' - t/2 * up, false); + + if negated = 1: + stroke_through(centre, equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "subset"; + draw_subset(a, left_ex, right_ex, greater_spread, line_thickness); + + if negated = 1: + stroke_through(centre, equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,2,2) * equal_spread# + 3/4greater_spread#); "subset or equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (equal_spread + s/2) * up; + z0 - left_ex = z0' - left_point = z1 - right_ex = 1/2equal_spread * up; + + draw_subset(a, z0, z1, s, line_thickness); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[z2,z3] + 1/2equal_spread * up, 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2,3,3) * equal_spread# + 3/4greater_spread#); "subset or double equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (equal_spread + s/2) * up; + z0 - left_ex = z0' - left_point = z1 - right_ex = equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_subset(a, z0, z1, s, line_thickness); + draw_line(z2, z3, false); + draw_line(z4, z5, false); + + if negated = 1: + stroke_through(centre, 3equal_spread + s); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "double subset"; + s := greater_spread; + t := greater_spread - 3/2equal_spread; + + z0 - left_ex = 3/4equal_spread * dir (90 - sign * 90); + + draw_subset(a, left_ex, right_ex, s, line_thickness); + draw_subset(b, z0, right_ex, t, line_thickness); + + if negated = 1: + stroke_through(centre, equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1/2) * equal_spread# + greater_spread#); "curly less than"; + draw_prec(a, left_ex, right_ex, greater_spread, line_thickness, false); + + if negated = 1: + stroke_through(centre, 1/2equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2/3, 5/3, 5/3) * equal_spread# + 3/4greater_spread#); "curly less than or equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/3equal_spread * up; + + draw_prec(a, z0, z1, s, line_thickness, false); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 5/3equal_spread + s); + elseif negated = 2: + stroke_through(1/2[z2,z3], equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "curly less than or curly equal"; + s := 3/4greater_spread; + + z0 - z2 = equal_spread * up; + z1 - z3 = (7/5equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/2equal_spread * up; + z2' - z2 = line_thickness * dir (90 - sign * 90); + + draw_prec(a, z0, z1, s, line_thickness, false); + + if sign > 0: + theta := angle (z1a.l - z1a); + else: + theta := angle (z0a.r - z0a); + fi; + + penpos2(line_thickness, 90); + penpos2'(line_thickness, 90); + penpos3(line_thickness, theta); + penpos5(line_thickness, theta); + + path p, q; + + p = z2.l -- z2'.l{dir (90 - sign * 90)} .. {dir (theta - sign * 90)}z3.l; + q = z2.r -- z2'.r{dir (90 - sign * 90)} .. {dir (theta - sign * 90)}z3.r; + + z5.r = point 1.8 of q; + t := xpart (p intersectiontimes (z5.l -- z5.r)); + + fill (subpath (0,t) of p) -- (reverse (subpath (0,1.8) of q)) -- cycle; + + penlabels(2,5); + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(5/3, 8/3, 8/3) * equal_spread# + 3/4greater_spread#); "curly less than or double equal"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 5/6equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_prec(a, z0, z1, s, line_thickness, false); + draw_line(z2, z3, false); + draw_line(z4, z5, false); + + if negated = 1: + stroke_through(centre, 8/3equal_spread + 3/4greater_spread); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1, 3/2, 3/2) * equal_spread# + 3/4greater_spread#); "curly less sim"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/2equal_spread * up; + + draw_prec(a, z0, z1, s, line_thickness, false); + if sign > 0: + draw_sim(b, z2, z3, 1/4equal_spread, line_thickness); + else: + draw_sim(b, z3, z2, 1/4equal_spread, line_thickness); + fi + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[z2,z3], equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 3: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2, 5/2, 5/2) * equal_spread# + 3/4greater_spread#); "curly less approx"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = equal_spread * up; + z2 - z4 = z3 - z5 = equal_spread * up; + + draw_prec(a, z0, z1, s, line_thickness, false); + + if sign > 0: + draw_sim(b, z2, z3, 1/4equal_spread, line_thickness); + draw_sim(c, z4, z5, 1/4equal_spread, line_thickness); + else: + draw_sim(b, z3, z2, 1/4equal_spread, line_thickness); + draw_sim(c, z5, z4, 1/4equal_spread, line_thickness); + fi + + if negated = 1: + stroke_through(centre, 5/2equal_spread + s); + elseif negated = 2: + stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(0,1/2) * equal_spread# + greater_spread#); "less than dot"; + draw_less(a, left_ex, right_ex, greater_spread, line_thickness, false); + fill dot(right_ex - sign * 3/4dot_size * right, 3/4dot_size); + + if negated = 1: + stroke_through(centre, 1/2equal_spread + greater_spread); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(2/3, 5/3) * equal_spread# + 3/4greater_spread#); "less than or equal dot"; + s := 3/4greater_spread; + + z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = 1/3equal_spread * up; + + draw_less(a, z0, z1, s, line_thickness, false); + fill dot(z1 - sign * 3/4dot_size * right, 3/4dot_size); + draw_line(z2, z3, false); + + if negated = 1: + stroke_through(centre, 5/3equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "less than or slanted equal dot"; + s := 3/4greater_spread; + t := 1/2equal_spread; + + draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false); + fill dot(right_ex + t * up - sign * 3/4dot_size * right, 3/4dot_size); + + if sign = 1: + draw_line(z1a - 2t * up, z4a - 2t * up, false); + else: + draw_line(z0a - 2t * up, z3a - 2t * up, false); + fi; + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + fi; + endchar; + endfor; +fi; + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "slanted equal or less than"; + s := 3/4greater_spread; + t := 1/2equal_spread; + + draw_less(a, left_ex - t * up, right_ex - t * up, s, line_thickness, false); + + if sign = 1: + draw_line(z0a + 2t * up, z3a + 2t * up, false); + else: + draw_line(z1a + 2t * up, z4a + 2t * up, false); + fi; + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + fi; + endchar; + endfor; +fi + +if negated < 2: + for sign = 1, -1: + beginorder(sign, order_width#, ifneg(1,3/2) * equal_spread# + 3/4greater_spread#); "curly equal or curly less than"; + s := 3/4greater_spread; + + z0 - z2 = -equal_spread * up; + z1 - z3 = -(7/5equal_spread + s/2) * up; + z0 - left_ex = z1 - right_ex = -1/2equal_spread * up; + z2' - z2 = line_thickness * dir (90 - sign * 90); + + draw_prec(a, z0, z1, s, line_thickness, false); + + if sign > 0: + theta := angle (z1a.l - z1a); + else: + theta := angle (z0a.r - z0a); + fi; + + penpos2(line_thickness, -90); + penpos2'(line_thickness, -90); + penpos3(line_thickness, -theta); + penpos5(line_thickness, -theta); + + path p, q; + + p = z2.l -- z2'.l{dir (90 - sign * 90)} .. {dir (sign * 90 - theta)}z3.l; + q = z2.r -- z2'.r{dir (90 - sign * 90)} .. {dir (sign * 90 - theta)}z3.r; + + z5.r = point 1.8 of q; + t := xpart (p intersectiontimes (z5.l -- z5.r)); + + fill (subpath (0,t) of p) -- (reverse (subpath (0,1.8) of q)) -- cycle; + + penlabels(2,5); + + if negated = 1: + stroke_through(centre, 3/2equal_spread + s); + fi; + endchar; + endfor; +fi |