summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source')
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolC.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolD.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdarrows.mf678
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf58
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fddelims.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf129
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdoperators.mf65
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf57
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdturnstile.mf102
9 files changed, 657 insertions, 442 deletions
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolC.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolC.mf
index 3170fe0aeca..2bdfcbda231 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolC.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolC.mf
@@ -13,4 +13,8 @@ negated := false;
input fdarrows;
+current_char := 223;
+
+input fdturnstile;
+
bye;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolD.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolD.mf
index 55d1c26cf64..29123a33f0c 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolD.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/FdSymbolD.mf
@@ -13,4 +13,8 @@ negated := true;
input fdarrows;
+current_char := 223;
+
+input fdturnstile;
+
bye;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdarrows.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdarrows.mf
index 01b36a12f9b..720c9c8a16e 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdarrows.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdarrows.mf
@@ -13,26 +13,26 @@ enddef;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "single arrow (" & decimal alpha & ")";
draw_line(foot_ex, head, false);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 6/5, ifneg(19/10, 13/10) * arrow_spread#); "double arrow (" & decimal alpha & ")";
- z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
1/2[z0,z1] = foot_ex;
1/2[z2,z3] = head;
- draw_line(z0, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z0 -- z2), false);
- draw_line(z1, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z1 -- z3), false);
- draw_arrowhead(head, arrow_dir, 13/10arrow_spread, line_thickness);
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - arrow_spread * dir arrow_dir], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -40,8 +40,8 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#); "bidirectional arrow (" & decimal alpha & ")";
draw_line(foot, head, false);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(foot, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
@@ -51,14 +51,14 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 7/5, ifneg(19/10, 13/10) * arrow_spread#); "double bidirectional arrow (" & decimal alpha & ")";
- z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
1/2[z0,z1] = foot;
1/2[z2,z3] = head;
- draw_line(arrowhead_intersection(foot, arrow_dir+180, 13/10arrow_spread, z0 -- z2), arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z0 -- z2), false);
- draw_line(arrowhead_intersection(foot, arrow_dir+180, 13/10arrow_spread, z1 -- z3), arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z1 -- z3), false);
- draw_arrowhead(head, arrow_dir, 13/10arrow_spread, line_thickness);
- draw_arrowhead(foot, arrow_dir+180, 13/10arrow_spread, line_thickness);
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z0 -- z2), arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z1 -- z3), arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, 13/10arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
@@ -69,22 +69,22 @@ endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 5/4, ifneg(3/2, 1) * arrow_spread#); "double-head arrow (" & decimal alpha & ")";
draw_line(foot_ex, head, false);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(head - 1/4arrow_len * dir arrow_dir, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(head - 1/4arrow_len * dir alpha, alpha, arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - (1/2arrow_spread + 1/4arrow_len) * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - (1/2arrow_spread + 1/4arrow_len) * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "tailed arrow (" & decimal alpha & ")";
- z0 = foot + 1/2arrow_spread * dir arrow_dir;
+ z0 = foot + 1/2arrow_spread * dir alpha;
draw_line(z0, head, false);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(z0, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z0, alpha, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
@@ -92,14 +92,31 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
endchar;
endfor;
-for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+for alpha = 0, 90, 180, 270:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "arrow with foot (" & decimal alpha & ")";
draw_line(foot, head, false);
draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 6/5, ifneg(19/10, 13/10) * arrow_spread#); "double arrow with foot (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_line(foot - 13/20arrow_spread * dir (alpha + 90), foot + 13/20arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -108,24 +125,24 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left embedding (" & decimal alpha & ")";
thick := line_thickness;
- z0 = foot + 1/4arrow_spread * dir(arrow_dir + 90);
- 1/2[z1,z2] = z0 + 1/4arrow_spread * dir arrow_dir;
- z2 = z1 + 1/2arrow_spread * dir (arrow_dir + 90);
+ z0 = foot + 1/4arrow_spread * dir(alpha + 90);
+ 1/2[z1,z2] = z0 + 1/4arrow_spread * dir alpha;
+ z2 = z1 + 1/2arrow_spread * dir (alpha + 90);
z3 = head;
- z4 = z2 + 1/2thick * dir arrow_dir;
+ z4 = z2 + 1/2thick * dir alpha;
- penpos0(thick, arrow_dir);
- penpos1(thick, arrow_dir + 90);
- penpos2(thick, arrow_dir - 90);
- penpos3(thick, arrow_dir + 90);
- penpos4(thick, arrow_dir - 90);
+ penpos0(thick, alpha);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha - 90);
- draw_arrowhead(head, arrow_dir, arrow_spread, thick);
- fill stroke z4.e -- z2.e{dir (arrow_dir + 180)} ..
- z0.e{dir (arrow_dir - 90)} .. z1.e{dir arrow_dir} -- z3.e;
+ draw_arrowhead(head, alpha, arrow_spread, thick);
+ fill stroke z4.e -- z2.e{dir (alpha + 180)} ..
+ z0.e{dir (alpha - 90)} .. z1.e{dir alpha} -- z3.e;
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -134,24 +151,24 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right embedding (" & decimal alpha & ")";
thick := line_thickness;
- z0 = foot - 1/4arrow_spread * dir(arrow_dir + 90);
- 1/2[z1,z2] = z0 + 1/4arrow_spread * dir arrow_dir;
- z2 = z1 - 1/2arrow_spread * dir (arrow_dir + 90);
+ z0 = foot - 1/4arrow_spread * dir(alpha + 90);
+ 1/2[z1,z2] = z0 + 1/4arrow_spread * dir alpha;
+ z2 = z1 - 1/2arrow_spread * dir (alpha + 90);
z3 = head;
- z4 = z2 + 1/2thick * dir arrow_dir;
+ z4 = z2 + 1/2thick * dir alpha;
- penpos0(thick, arrow_dir + 180);
- penpos1(thick, arrow_dir + 90);
- penpos2(thick, arrow_dir - 90);
- penpos3(thick, arrow_dir + 90);
- penpos4(thick, arrow_dir - 90);
+ penpos0(thick, alpha + 180);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha - 90);
- draw_arrowhead(head, arrow_dir, arrow_spread, thick);
- fill stroke z4.e -- z2.e{dir (arrow_dir + 180)} ..
- z0.e{dir (arrow_dir + 90)} .. z1.e{dir arrow_dir} -- z3.e;
+ draw_arrowhead(head, alpha, arrow_spread, thick);
+ fill stroke z4.e -- z2.e{dir (alpha + 180)} ..
+ z0.e{dir (alpha + 90)} .. z1.e{dir alpha} -- z3.e;
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -159,10 +176,10 @@ endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left harpoon (" & decimal alpha & ")";
draw_line(foot_ex, head, false);
- draw_arrowhead_left(head, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead_left(head, alpha, arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -170,10 +187,10 @@ endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right harpoon (" & decimal alpha & ")";
draw_line(foot_ex, head, false);
- draw_arrowhead_right(head, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead_right(head, alpha, arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -181,8 +198,8 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left left harpoon (" & decimal alpha & ")";
draw_line(foot, head, false);
- draw_arrowhead_left(head, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead_left(foot, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead_left(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_left(foot, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(80, 80, 110, 110);
@@ -193,8 +210,8 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right right harpoon (" & decimal alpha & ")";
draw_line(foot, head, false);
- draw_arrowhead_right(head, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead_right(foot, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead_right(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_right(foot, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 100, 100);
@@ -204,7 +221,7 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread# + equal_spread#); "double left left harpoon (" & decimal alpha & ")";
- z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (arrow_dir + 90);
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (alpha + 90);
1/2[z0,z1] = foot;
1/2[z0',z1'] = foot_ex;
1/2[z2,z3] = head;
@@ -212,8 +229,8 @@ for alpha = 0, 90, 45, 135:
draw_line(z2', z0, false);
draw_line(z1', z3, false);
- draw_arrowhead_left(z3, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead_left(z0, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead_left(z3, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_left(z0, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread + equal_spread)(80, 80, 110, 110);
@@ -223,7 +240,7 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread# + equal_spread#); "double right right harpoon (" & decimal alpha & ")";
- z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (arrow_dir + 90);
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (alpha + 90);
1/2[z0,z1] = foot;
1/2[z0',z1'] = foot_ex;
1/2[z2,z3] = head;
@@ -231,8 +248,8 @@ for alpha = 0, 90, 45, 135:
draw_line(z0', z2, false);
draw_line(z3', z1, false);
- draw_arrowhead_right(z2, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead_right(z1, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead_right(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_right(z1, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread + equal_spread)(70, 70, 100, 100);
@@ -247,7 +264,7 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
draw_line(foot_ex, z0, false);
draw_line(z1, head, false);
- draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[z0, z1], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
@@ -256,23 +273,55 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
endfor;
for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#); "multi map (" & decimal alpha & ")";
- draw_line(foot_ex, head - (4/5arrow_spread + 1/4line_thickness) * dir arrow_dir, false);
- draw_circle(head - 2/5arrow_spread * dir arrow_dir, 2/5arrow_spread, line_thickness);
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "multi map (" & decimal alpha & ")";
+ draw_line(foot_ex, head - (4/5arrow_spread + 1/4line_thickness) * dir alpha, false);
+ draw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#); "filled multi map (" & decimal alpha & ")";
- draw_line(foot_ex, head_ex - 2/5arrow_spread * dir arrow_dir, false);
- filldraw_circle(head - 2/5arrow_spread * dir arrow_dir, 2/5arrow_spread, line_thickness);
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "filled multi map (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex - 2/5arrow_spread * dir alpha, false);
+ filldraw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+beginarrow(0, 7/5, ifneg(3/2, 1) * arrow_spread#); "double multi map";
+ draw_line(foot + (4/5arrow_spread + 1/4line_thickness) * right, head - (4/5arrow_spread + 1/4line_thickness) * right, false);
+ draw_circle(head - 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+ draw_circle(foot + 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], 0, 3/2arrow_spread)(70);
+ fi
+endchar;
+
+beginarrow(0, 7/5, ifneg(3/2, 1) * arrow_spread#); "filled double multi map";
+ draw_line(foot_ex + 2/5arrow_spread * right, head - 2/5arrow_spread * right, false);
+ filldraw_circle(head - 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+ filldraw_circle(foot + 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], 0, 3/2arrow_spread)(70);
+ fi
+endchar;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 7/5, ifneg(3/2, 1) * arrow_spread#); "image of (" & decimal alpha & ")";
+ draw_line(foot_ex + 2/5arrow_spread * dir alpha, head - (4/5arrow_spread + 1/4line_thickness) * dir alpha, false);
+ filldraw_circle(foot + 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+ draw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
@@ -280,7 +329,7 @@ endfor;
for alpha = 0, 90, 180, 270:
beginarrow(alpha, 1, 3/4plus_size# + ifneg(1,0) * arrow_spread#); "pitchfork (" & decimal alpha & ")";
draw_line(foot_ex, head_ex, false);
- draw_subset(a, foot + 1/2arrow_len * dir arrow_dir, foot_ex, 3/4plus_size, line_thickness);
+ draw_subset(a, foot + 1/2arrow_len * dir alpha, foot_ex, 3/4plus_size, line_thickness);
if negated:
stroke_through_arrow(1/4[foot, head], alpha, 3/4plus_size + arrow_spread)(80, 80, 100, 100, 80, 80, 100, 100);
@@ -290,24 +339,24 @@ endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, 2arrow_spread#); "parallel arrows (" & decimal alpha & ")";
- z1 - z0 = z3 - z2 = arrow_spread * dir (arrow_dir + 90);
+ z1 - z0 = z3 - z2 = arrow_spread * dir (alpha + 90);
1/2[z0,z1] = foot_ex;
1/2[z2,z3] = head;
draw_line(z0, z2, false);
draw_line(z1, z3, false);
- draw_arrowhead(z2, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(z3, arrow_dir, arrow_spread, line_thickness);
+ draw_arrowhead(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z3, alpha, arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, 2arrow_spread#); "anti-parallel arrows right left (" & decimal alpha & ")";
- z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (arrow_dir + 90);
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (alpha + 90);
1/2[z0,z1] = foot;
1/2[z0',z1'] = foot_ex;
1/2[z2,z3] = head;
@@ -315,8 +364,8 @@ for alpha = 0, 90, 45, 135:
draw_line(z2', z0, false);
draw_line(z1', z3, false);
- draw_arrowhead(z3, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(z0, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead(z3, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z0, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 2arrow_spread)(80, 80, 110, 110);
@@ -326,7 +375,7 @@ endfor;
for alpha = 0, 90, 45, 135:
beginarrow(alpha, 1, 2arrow_spread#); "anti-parallel arrows left right (" & decimal alpha & ")";
- z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (arrow_dir + 90);
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (alpha + 90);
1/2[z0,z1] = foot;
1/2[z0',z1'] = foot_ex;
1/2[z2,z3] = head;
@@ -334,8 +383,8 @@ for alpha = 0, 90, 45, 135:
draw_line(z0', z2, false);
draw_line(z3', z1, false);
- draw_arrowhead(z2, arrow_dir, arrow_spread, line_thickness);
- draw_arrowhead(z1, arrow_dir+180, arrow_spread, line_thickness);
+ draw_arrowhead(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z1, alpha+180, arrow_spread, line_thickness);
if negated:
stroke_through_arrow(1/2[foot, head], alpha, 2arrow_spread)(70, 70, 100, 100);
@@ -343,145 +392,96 @@ for alpha = 0, 90, 45, 135:
endchar;
endfor;
+for sign = 1, -1:
for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left right wave arrow (" & decimal alpha & ")";
- thick := line_thickness;
-
- z0 = foot - 1/10arrow_spread * dir (arrow_dir + 90);
- z1 = 15/80[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z2 = 30/80[foot,head];
- z3 = 45/80[foot,head] - 1/4arrow_spread * dir (arrow_dir + 90);
- z4 = 60/80[foot,head];
- z5 = head + 1/10arrow_spread * dir (arrow_dir + 90);
-
- penpos0(thick, arrow_dir - 45);
- penpos1(thick, arrow_dir - 90);
- penpos2(thick, arrow_dir - 135);
- penpos3(thick, arrow_dir - 90);
- penpos4(thick, arrow_dir - 45);
- penpos5(thick, arrow_dir - 75);
-
- penlabels(0,1,2,3,4,5);
-
- fill stroke z0.e{dir (arrow_dir + 45)} .. z1.e .. z2.e{dir (arrow_dir - 45)} .. z3.e .. z4.e ... {dir (arrow_dir+15)}z5.e;
- draw_arrowhead(z5, arrow_dir+15, arrow_spread, thick);
-
- if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(70, 70, 70, 70, 70, 70, 70, 70);
- fi
- endchar;
-endfor;
-
-for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right left wave arrow (" & decimal alpha & ")";
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#);
+ if sign > 0: "left right" else: "right left" fi & " wave arrow (" & decimal alpha & ")";
thick := line_thickness;
- z0 = foot + 1/10arrow_spread * dir (arrow_dir + 90);
- z1 = 15/80[foot,head] - 1/4arrow_spread * dir (arrow_dir + 90);
- z2 = 30/80[foot,head];
- z3 = 45/80[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z4 = 60/80[foot,head];
- z5 = head - 1/10arrow_spread * dir (arrow_dir + 90);
-
- penpos0(thick, arrow_dir - 135);
- penpos1(thick, arrow_dir - 90);
- penpos2(thick, arrow_dir - 45);
- penpos3(thick, arrow_dir - 90);
- penpos4(thick, arrow_dir - 135);
- penpos5(thick, arrow_dir - 105);
-
- penlabels(0,1,2,3,4,5);
-
- fill stroke z0.e{dir (arrow_dir - 45)} .. z1.e .. z2.e{dir (arrow_dir + 45)} .. z3.e .. z4.e ... {dir (arrow_dir-15)}z5.e;
- draw_arrowhead(z5, arrow_dir-15, arrow_spread, thick);
-
- if negated:
- stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir arrow_dir], alpha, 3/2arrow_spread)(110, 110, 110, 110, 110, 110, 110, 110);
- fi
- endchar;
-endfor;
-
-for alpha = 0, 90:
- beginarrow(alpha, 19/16, ifneg(3/2, 1) * arrow_spread#); "left right bidirectional wave arrow (" & decimal alpha & ")";
- thick := line_thickness;
-
- z0 = foot - 1/10arrow_spread * dir (arrow_dir + 90);
- z1 = 4/20[foot,head];
- z2 = 7/20[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z3 = 10/20[foot,head];
- z4 = 13/20[foot,head] - 1/4arrow_spread * dir (arrow_dir + 90);
- z5 = 16/20[foot,head];
- z6 = head + 1/10arrow_spread * dir (arrow_dir + 90);
-
- penpos0(thick, arrow_dir - 75);
- penpos1(thick, arrow_dir - 45);
- penpos2(thick, arrow_dir - 90);
- penpos3(thick, arrow_dir - 135);
- penpos4(thick, arrow_dir - 90);
- penpos5(thick, arrow_dir - 45);
- penpos6(thick, arrow_dir - 75);
+ z0 = foot - sign * 1/8arrow_spread * dir (alpha + 90);
+ z1 = 4/18[foot,head] + sign * 1/4arrow_spread * dir (alpha + 90);
+ z2 = 7/18[foot,head];
+ z3 = 10/18[foot,head] - sign * 1/4arrow_spread * dir (alpha + 90);
+ z4 = 12/18[foot,head] - sign * 1/8arrow_spread * dir (alpha + 90);
+ z5 = 14/18[foot,head];
+ z6 = head;
+
+ penpos0(thick, alpha - 90 + sign * 55);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 90 - sign * 55);
+ penpos3(thick, alpha - 90);
+ penpos4(thick, alpha - 90 + sign * 35);
+ penpos5(thick, alpha - 90);
+ penpos6(thick, alpha - 90);
penlabels(0,1,2,3,4,5,6);
- fill stroke z0.e{dir (arrow_dir + 15)} .. z1.e .. z2.e .. z3.e{dir (arrow_dir - 45)} .. z4.e .. z5.e ... {dir (arrow_dir+15)}z6.e;
- draw_arrowhead(z0, arrow_dir + 195, arrow_spread, thick);
- draw_arrowhead(z6, arrow_dir + 15, arrow_spread, thick);
+ fill stroke z0.e{dir (alpha + sign * 55)} .. z1.e{dir alpha} .. z2.e{dir (alpha - sign * 55)} .. z3.e{dir alpha} .. z4.e{dir (alpha + sign * 35)} ... {dir alpha}z5.e -- z6.e;
+ draw_arrowhead(z6, alpha, arrow_spread, thick);
if negated:
- stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 70, 70);
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 70, 70, 70, 70, 70, 70);
fi
endchar;
endfor;
+endfor;
-for alpha = 0, 90:
- beginarrow(alpha, 19/16, ifneg(3/2, 1) * arrow_spread#); "right left bidirectional wave arrow (" & decimal alpha & ")";
- thick := line_thickness;
-
- z0 = foot + 1/10arrow_spread * dir (arrow_dir + 90);
- z1 = 4/20[foot,head];
- z2 = 7/20[foot,head] - 1/4arrow_spread * dir (arrow_dir + 90);
- z3 = 10/20[foot,head];
- z4 = 13/20[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z5 = 16/20[foot,head];
- z6 = head - 1/10arrow_spread * dir (arrow_dir + 90);
-
- penpos0(thick, arrow_dir - 105);
- penpos1(thick, arrow_dir - 135);
- penpos2(thick, arrow_dir - 90);
- penpos3(thick, arrow_dir - 45);
- penpos4(thick, arrow_dir - 90);
- penpos5(thick, arrow_dir - 135);
- penpos6(thick, arrow_dir - 105);
-
- penlabels(0,1,2,3,4,5,6);
+for sign = 1, -1:
+ for alpha = 0, 90:
+ beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#);
+ if sign > 0: "left right" else: "right left" fi & " bidirectional wave arrow (" & decimal alpha & ")";
+ thick := line_thickness;
- fill stroke z0.e{dir (arrow_dir - 15)} .. z1.e .. z2.e .. z3.e{dir (arrow_dir + 45)} .. z4.e .. z5.e ... {dir (arrow_dir-15)}z6.e;
- draw_arrowhead(z0, arrow_dir - 195, arrow_spread, thick);
- draw_arrowhead(z6, arrow_dir - 15, arrow_spread, thick);
+ z0 = foot;
+ z1 = 4/22[foot,head];
+ z2 = 6/22[foot,head] + sign * 1/8arrow_spread * dir (alpha + 90);
+ z3 = 8/22[foot,head] + sign * 1/4arrow_spread * dir (alpha + 90);
+ z4 = 11/22[foot,head];
+ z5 = 14/22[foot,head] - sign * 1/4arrow_spread * dir (alpha + 90);
+ z6 = 16/22[foot,head] - sign * 1/8arrow_spread * dir (alpha + 90);
+ z7 = 18/22[foot,head];
+ z8 = head;
+
+ penpos0(thick, alpha - 90);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 90 + sign * 35);
+ penpos3(thick, alpha - 90);
+ penpos4(thick, alpha - 90 - sign * 55);
+ penpos5(thick, alpha - 90);
+ penpos6(thick, alpha - 90 + sign * 35);
+ penpos7(thick, alpha - 90);
+ penpos8(thick, alpha - 90);
+
+ penlabels(0,1,2,3,4,5,6,7,8);
+
+ fill stroke z0e. -- z1.e{dir alpha} .. z2.e{dir (alpha + sign * 35)} .. z3.e{dir alpha} .. z4.e{dir (alpha - sign * 55)} .. z5.e{dir alpha} ... z6.e{dir (alpha + sign * 35)} .. {dir alpha}z7.e -- z8.e;
+ draw_arrowhead(z0, alpha + 180, arrow_spread, thick);
+ draw_arrowhead(z8, alpha, arrow_spread, thick);
- if negated:
- stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(110, 110, 110, 110);
- fi
- endchar;
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 70, 70);
+ fi
+ endchar;
+ endfor;
endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2,1) * arrow_spread#); "right bend arrow (" & decimal alpha & ")";
thick := line_thickness;
- z0 = foot - 1/4arrow_spread * dir (arrow_dir + 90);
- z1 = 9/20[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z2 = 19/20[foot,head] - 1/2arrow_spread * dir (arrow_dir + 90);
+ z0 = foot - 1/4arrow_spread * dir (alpha + 90);
+ z1 = 9/20[foot,head] + 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
- penpos0(thick, arrow_dir - 35);
- penpos1(thick, arrow_dir - 90);
- penpos2(thick, arrow_dir - 150);
+ penpos0(thick, alpha - 35);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 150);
- fill stroke z0.e{dir (arrow_dir + 55)} .. z1.e .. {dir (arrow_dir - 60)}z2.e;
- draw_arrowhead(z2, arrow_dir - 50, arrow_spread, thick);
+ fill stroke z0.e{dir (alpha + 55)} .. z1.e .. {dir (alpha - 60)}z2.e;
+ draw_arrowhead(z2, alpha - 50, arrow_spread, thick);
if negated:
- stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (arrow_dir - 90), alpha, 3/2arrow_spread)(80, 80, 80, 80, 80, 80, 80, 80);
+ stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (alpha - 90), alpha, 3/2arrow_spread)(80, 80, 80, 80, 80, 80, 80, 80);
fi
endchar;
endfor;
@@ -490,41 +490,41 @@ for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
beginarrow(alpha, 1, ifneg(3/2,1) * arrow_spread#); "left bend arrow (" & decimal alpha & ")";
thick := line_thickness;
- z0 = foot + 1/4arrow_spread * dir (arrow_dir + 90);
- z1 = 9/20[foot,head] - 1/4arrow_spread * dir (arrow_dir + 90);
- z2 = 19/20[foot,head] + 1/2arrow_spread * dir (arrow_dir + 90);
+ z0 = foot + 1/4arrow_spread * dir (alpha + 90);
+ z1 = 9/20[foot,head] - 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] + 1/2arrow_spread * dir (alpha + 90);
- penpos0(thick, arrow_dir + 35);
- penpos1(thick, arrow_dir + 90);
- penpos2(thick, arrow_dir + 150);
+ penpos0(thick, alpha + 35);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha + 150);
- fill stroke z0.e{dir (arrow_dir - 55)} .. z1.e .. {dir (arrow_dir + 60)}z2.e;
- draw_arrowhead(z2, arrow_dir + 50, arrow_spread, thick);
+ fill stroke z0.e{dir (alpha - 55)} .. z1.e .. {dir (alpha + 60)}z2.e;
+ draw_arrowhead(z2, alpha + 50, arrow_spread, thick);
if negated:
- stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (arrow_dir + 90), alpha, 3/2arrow_spread)(110, 110, 110, 110, 110, 110, 110, 110);
+ stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (alpha + 90), alpha, 3/2arrow_spread)(110, 110, 110, 110, 110, 110, 110, 110);
fi
endchar;
endfor;
for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
- beginarrow(alpha, 6/5, ifneg(3/2,1) * arrow_spread#); "bend arrow (" & decimal alpha & ")";
+ beginarrow(alpha, 6/5, ifneg(3/2,1) * arrow_spread#); "bidirectional bend arrow (" & decimal alpha & ")";
thick := line_thickness;
- z0 = 1/20[foot,head] - 1/2arrow_spread * dir (arrow_dir + 90);
- z1 = 1/2[foot,head] + 1/4arrow_spread * dir (arrow_dir + 90);
- z2 = 19/20[foot,head] - 1/2arrow_spread * dir (arrow_dir + 90);
+ z0 = 1/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
+ z1 = 1/2[foot,head] + 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
- penpos0(thick, arrow_dir - 30);
- penpos1(thick, arrow_dir - 90);
- penpos2(thick, arrow_dir - 150);
+ penpos0(thick, alpha - 30);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 150);
- fill stroke z0.e{dir (arrow_dir + 60)} .. z1.e .. {dir (arrow_dir - 60)}z2.e;
- draw_arrowhead(z0, arrow_dir + 230, arrow_spread, thick);
- draw_arrowhead(z2, arrow_dir - 50, arrow_spread, thick);
+ fill stroke z0.e{dir (alpha + 60)} .. z1.e .. {dir (alpha - 60)}z2.e;
+ draw_arrowhead(z0, alpha + 230, arrow_spread, thick);
+ draw_arrowhead(z2, alpha - 50, arrow_spread, thick);
if negated:
- stroke_through_arrow(z1 + 1/8arrow_spread * dir (arrow_dir - 90), alpha, 3/2arrow_spread)(80, 80, 100, 100, 80, 80, 100, 100);
+ stroke_through_arrow(z1 + 1/8arrow_spread * dir (alpha - 90), alpha, 3/2arrow_spread)(80, 80, 100, 100, 80, 80, 100, 100);
fi
endchar;
endfor;
@@ -549,9 +549,9 @@ for sign = 1, -1:
r := (w - 2side_bearing)/2 - arrow_spread/3;
for i = 0 upto 7:
- z[i] = centre + r * dir (alpha + i/8 * 360);
- penpos[i](thick, alpha + i/8 * 360);
- endfor;
+ z[i] = centre + r * dir (alpha + i/8 * 360);
+ penpos[i](thick, alpha + i/8 * 360);
+ endfor;
z0' = centre + r * dir (alpha + 10);
penpos0'(thick, alpha + 10);
@@ -586,22 +586,165 @@ endfor;
for alpha = 0, 90, 180, 270:
beginarrow(alpha, 6/5, ifneg(21/10, 14/10) * arrow_spread#); "triple arrow (" & decimal alpha & ")";
- z1 - z0 = z2 - z1 = 2/3equal_spread * dir (arrow_dir + 90);
+ z1 - z0 = z2 - z1 = 2/3equal_spread * dir (alpha + 90);
z1 = foot_ex;
- z4 - z3 = z5 - z4 = 2/3equal_spread * dir (arrow_dir + 90);
+ z4 - z3 = z5 - z4 = 2/3equal_spread * dir (alpha + 90);
z4 = head_ex;
- draw_straight(z0, arrowhead_intersection(head, arrow_dir, 3/2arrow_spread, z0 -- z3), 4/5line_thickness, false);
- draw_straight(z1, arrowhead_intersection(head, arrow_dir, 3/2arrow_spread, z1 -- z4), 4/5line_thickness, false);
- draw_straight(z2, arrowhead_intersection(head, arrow_dir, 3/2arrow_spread, z2 -- z5), 4/5line_thickness, false);
- draw_arrowhead(head, arrow_dir, 3/2arrow_spread, line_thickness);
+ draw_straight(z0, arrowhead_intersection(head, alpha, 3/2arrow_spread, z0 -- z3), 4/5line_thickness, false);
+ draw_straight(z1, arrowhead_intersection(head, alpha, 3/2arrow_spread, z1 -- z4), 4/5line_thickness, false);
+ draw_straight(z2, arrowhead_intersection(head, alpha, 3/2arrow_spread, z2 -- z5), 4/5line_thickness, false);
+ draw_arrowhead(head, alpha, 3/2arrow_spread, line_thickness);
if negated:
- stroke_through_arrow(1/2[foot, head - arrow_spread * dir arrow_dir], alpha, 21/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 21/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
fi
endchar;
endfor;
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long single arrow (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long bidirectional arrow (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double bidirectional arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z2,z3] = head;
+
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z0 -- z2), arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z1 -- z3), arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long arrow with foot (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double arrow with foot (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_line(foot - 13/20arrow_spread * dir (alpha + 90), foot + 13/20arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long wave arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+ sign := if alpha > 0: 1 else: -1 fi;
+
+ z0 = foot - 1/8arrow_spread * up;
+ z1 = 4/43[foot,head] + 1/4arrow_spread * up;
+ z2 = 7/43[foot,head];
+ z3 = 10/43[foot,head] - 1/4arrow_spread * up;
+ z4 = 13/43[foot,head];
+ z5 = 16/43[foot,head] + 1/4arrow_spread * up;
+ z6 = 19/43[foot,head];
+ z7 = 22/43[foot,head] - 1/4arrow_spread * up;
+ z8 = 25/43[foot,head];
+ z9 = 28/43[foot,head] + 1/4arrow_spread * up;
+ z10 = 31/43[foot,head];
+ z11 = 34/43[foot,head] - 1/4arrow_spread * up;
+ z12 = 36/43[foot,head] - 1/8arrow_spread * up;
+ z13 = 38/43[foot,head];
+ z14 = head;
+
+ penpos0(thick, sign * 35);
+ penpos1(thick, sign * 90);
+ penpos2(thick, sign * 145);
+ penpos3(thick, sign * 90);
+ penpos4(thick, sign * 35);
+ penpos5(thick, sign * 90);
+ penpos6(thick, sign * 145);
+ penpos7(thick, sign * 90);
+ penpos8(thick, sign * 35);
+ penpos9(thick, sign * 90);
+ penpos10(thick, sign * 145);
+ penpos11(thick, sign * 90);
+ penpos12(thick, sign * 45);
+ penpos13(thick, sign * 90);
+ penpos14(thick, sign * 90);
+
+ penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+
+ fill stroke z0e{dir (sign * 35 + 90)} .. z1.e{dir (sign * 90 + 90)} .. z2.e{dir (sign * 145 + 90)} .. z3.e{dir (sign * 90 + 90)} .. z4.e{dir (sign * 35 + 90)} .. z5.e{dir (sign * 90 + 90)} .. z6.e{dir (sign * 145 + 90)} .. z7.e{dir (sign * 90 + 90)} .. z8.e{dir (sign * 35 + 90)} .. z9.e{dir (sign * 90 + 90)} .. z10.e{dir (sign * 145 + 90)} .. z11.e{dir (sign * 90 + 90)} .. z12.e{dir (sign * 45 + 90)} .. {dir (sign * 90 + 90)}z13.e -- z14.e;
+ draw_arrowhead(z14, alpha, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 70, 70, 70, 70, 70, 70);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2,1) * arrow_spread#); "long headless arrow with foot (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
if not negated:
for sign = 1, -1:
@@ -633,8 +776,11 @@ if not negated:
endfor;
for sign = -1, 1:
- beginoperator(arrow_len#, 1); "loop arrow";
+ beginsymbol(arrow_diag_len# + 2side_bearing#, vcentre(arrow_diag_len#)); "loop arrow";
thick := line_thickness;
+ arrow_len := arrow_diag_len;
+ pair centre;
+ centre := (w/2, (h-d)/2);
z0 = centre + sign * (arrow_len - line_thickness)/2 * left;
z1 = centre + arrow_len/2 * down;
@@ -657,77 +803,3 @@ if not negated:
endchar;
endfor;
fi
-
-current_char := 223;
-
-for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 2/3, ifneg(2, 3/2) * arrow_spread#); "derives (" & decimal alpha & ")";
- draw_line(foot, head_ex, false);
- draw_line(foot - 3/4arrow_spread * dir (arrow_dir + 90), foot + 3/4arrow_spread * dir (arrow_dir + 90), true);
-
- if negated:
- stroke_through_arrow(2/3[foot, head], alpha, 2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
- fi
- endchar;
-endfor;
-
-for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 2/3, ifneg(9/4, 7/4) * arrow_spread#); "models (" & decimal alpha & ")";
- z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
- 0.5[z0,z1] = foot;
- 0.5[z2,z3] = head_ex;
-
- draw_line(z0, z2, false);
- draw_line(z1, z3, false);
- draw_line(foot - 7/8arrow_spread * dir (arrow_dir + 90), foot + 7/8arrow_spread * dir (arrow_dir + 90), true);
-
- if negated:
- stroke_through_arrow(2/3[foot, head], alpha, 9/4arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
- fi
- endchar;
-endfor;
-
-for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 1, ifneg(9/4, 7/4) * arrow_spread#); "forces (" & decimal alpha & ")";
- z0 = foot + equal_spread * dir arrow_dir;
-
- draw_line(z0, head_ex, false);
- draw_line(foot - 7/8arrow_spread * dir (arrow_dir + 90), foot + 7/8arrow_spread * dir (arrow_dir + 90), true);
- draw_line(z0 - 7/8arrow_spread * dir (arrow_dir + 90), z0 + 7/8arrow_spread * dir (arrow_dir + 90), true);
-
- if negated:
- stroke_through_arrow(5/8[z0, head], alpha, 9/4arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
- fi
- endchar;
-endfor;
-
-for alpha = 0, 90, 180, 270:
- beginarrow(alpha, 1, ifneg(5/2, 2) * arrow_spread#); "double models (" & decimal alpha & ")";
- z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
- z4 = foot + equal_spread * dir arrow_dir;
- 1/2[z0,z1] = z4;
- 1/2[z2,z3] = head_ex;
-
- draw_line(z0, z2, false);
- draw_line(z1, z3, false);
- draw_line(foot - arrow_spread * dir (arrow_dir + 90), foot + arrow_spread * dir (arrow_dir + 90), true);
- draw_line(z4 - arrow_spread * dir (arrow_dir + 90), z4 + arrow_spread * dir (arrow_dir + 90), true);
-
- if negated:
- stroke_through_arrow(5/8[z4, head], alpha, 5/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
- fi
- endchar;
-endfor;
-
-if not negated:
- beginarrow(0, 1, 7/4arrow_spread#); "Vvdash";
- s := 7/8arrow_spread;
- z0 = foot + 4/5equal_spread * dir arrow_dir;
- z1 = foot + 8/5equal_spread * dir arrow_dir;
-
- draw_line(z1, head_ex, false);
- draw_line(foot - s * dir (arrow_dir + 90), foot + s * dir (arrow_dir + 90), true);
- draw_line(z0 - s * dir (arrow_dir + 90), z0 + s * dir (arrow_dir + 90), true);
- draw_line(z1 - s * dir (arrow_dir + 90), z1 + s * dir (arrow_dir + 90), true);
- endchar;
-fi
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
index 7c5b193d3d0..31cc8f69870 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
@@ -10,7 +10,7 @@ design_size := 10;
font_size design_size * pt#;
if known ps_output:
- font_version := "1.003";
+ font_version := "1.004";
font_comment := "Copyright (c) 2011, Michael Ummels. This Font Software is licensed under the SIL Open Font License, Version 1.1.";
fi
@@ -44,11 +44,12 @@ med_op_size# := 12.5u#; % radius of medium operators
plus_size# := 9u#;
large_op_size# := 18u#; % radius of large operators
order_width# := 8u#; % width of equal sign
+turnstile_width# := 11u#; % width of turnstile symbols
equal_spread# := .7math_axis#; % distance between the lines of the equal sign
greater_spread# := 10/4equal_spread#; % distance between the ends of the greater sign
-arrow_horiz_len# := 12u#; % length of horizontal arrows
-arrow_vert_len# := 3math_axis#; % length of vertical arrows
-arrow_diag_len# := 0.5(arrow_horiz_len# + arrow_vert_len#);
+arrow_horiz_len# := 12.5u#; % length of horizontal arrows
+arrow_vert_len# := 12.5u#; % length of vertical arrows
+arrow_diag_len# := 1/2(arrow_horiz_len# + arrow_vert_len#);
arrow_spread# := 1.6equal_spread#;
delim_height# := 4.9pt#; % half the height of normal delimiters
bigop_height# := 10.7pt#; % height of big operators
@@ -57,7 +58,7 @@ mode_setup;
define_pixels(u, asc_height, cap_height, desc_depth, delim_height, bigop_height, x_height);
define_whole_pixels(dot_size, small_op_size, med_op_size, large_op_size, plus_size,
- order_width, equal_spread, greater_spread,
+ order_width, turnstile_width, equal_spread, greater_spread,
arrow_horiz_len, arrow_vert_len, arrow_diag_len, arrow_spread);
if known ps_output:
@@ -73,6 +74,18 @@ stroke_through_thickness := 9/10line_thickness;
% Macros
+% Redefine clockwise and counterclockwise (turningnumber seems more stable)
+if known ps_output:
+ vardef counterclockwise primary p =
+ (if turningnumber p>0: p else: (reverse p) fi)
+ enddef;
+
+ vardef clockwise primary p =
+ (if turningnumber p<0: p else: (reverse p) fi)
+ enddef;
+fi
+
+% Selects the n-th element of a list
def select(expr n)(text values) =
begingroup;
i := 0;
@@ -85,14 +98,11 @@ def select(expr n)(text values) =
endgroup
enddef;
+% Splits a length at the math axis
def vcentre(expr size) =
size/2 + math_axis#, size/2 - math_axis#
enddef;
-def ocentre(expr size) =
- size/2 + math_axis# + 1/2equal_spread#, size/2 - math_axis# - 1/2equal_spread#
-enddef;
-
current_char := -1;
def beginsymbol(expr width, height, depth) =
@@ -108,11 +118,11 @@ def beginoperator(expr size, ratio) =
beginsymbol(size + 2side_bearing#, vcentre(ratio * size));
pair centre;
centre := (w/2, (h-d)/2);
- radius := w/2 - side_bearing - 1/2line_thickness;
+ radius := w/2 - side_bearing - 1/2line_thickness;
enddef;
def beginbigop(expr xscale, yscale) =
- beginsymbol(xscale * 3/2order_width# + 2side_bearing#, ocentre(yscale * bigop_height#));
+ beginsymbol(xscale * 3/2order_width# + 2side_bearing#, vcentre(yscale * bigop_height#));
pair centre;
centre := (w/2, (h-d)/2);
op_width := xscale * 3/2order_width;
@@ -120,7 +130,7 @@ def beginbigop(expr xscale, yscale) =
enddef;
def beginsquarebigop(expr xscale, yscale) =
- beginsymbol(xscale * bigop_height# + 2side_bearing#, ocentre(yscale * bigop_height#));
+ beginsymbol(xscale * bigop_height# + 2side_bearing#, vcentre(yscale * bigop_height#));
pair centre;
centre := (w/2, (h-d)/2);
op_width := xscale * bigop_height;
@@ -139,8 +149,7 @@ def beginarrow(expr angle, scale, spread) =
else: arrow_diag_len
fi;
- beginsymbol(arrow_len# * abs (cosd (angle)) + (spread + line_thickness#) * abs (sind (angle)) + 2side_bearing#,
- vcentre(arrow_len# * abs (sind (angle)) + (spread + line_thickness#) * abs (cosd (angle))));
+ beginsymbol(arrow_len# * abs(cosd(angle)) + (spread + line_thickness#) * abs(sind(angle)) + 2side_bearing#, vcentre(arrow_len# * abs(sind(angle)) + (spread + line_thickness#) * abs(cosd(angle))));
pair centre, head, head_ex, foot, foot_ex;
centre := (w/2, (h-d)/2);
@@ -148,7 +157,6 @@ def beginarrow(expr angle, scale, spread) =
head_ex := centre + arrow_len/2 * dir angle;
foot := centre - (arrow_len - line_thickness)/2 * dir angle;
foot_ex := centre - arrow_len/2 * dir angle;
- arrow_dir := angle;
enddef;
def beginorder(expr sign, width, spread) =
@@ -161,7 +169,21 @@ def beginorder(expr sign, width, spread) =
right_point := centre + sign * (w/2 - side_bearing - line_thickness/2) * right;
enddef;
-% Make strokes run anti-clockwise
+def beginturnstile(expr angle, scale) =
+ beginsymbol(abs(sind(angle) + scale * cosd(angle)) * turnstile_width# + 2side_bearing#, abs(min(scale, 1 + (scale - 1)/2) * sind(angle) + cosd(angle)) * cap_height#, abs(max(0, (scale - 1)/2) * sind(angle)) * cap_height#);
+ pair foot;
+
+ if angle mod 180 = 0:
+ len := scale * turnstile_width;
+ spread := cap_height - line_thickness;
+ else:
+ len := scale * cap_height;
+ spread := turnstile_width - line_thickness;;
+ fi
+ foot = (w/2, (h - d)/2) - (len - line_thickness)/2 * dir angle;
+enddef;
+
+% Strokes a pen path
vardef stroke text t =
forsuffixes e = l, r:
path_.e := t;
@@ -438,8 +460,8 @@ enddef;
def stroke_through_arrow(expr pos, alpha, spread)(text angles) =
begingroup;
- stroke_dir := arrow_dir + select(alpha/45)(angles);
- stroke_len := 1/2spread / sind (stroke_dir - arrow_dir);
+ stroke_dir := alpha + select(alpha / 45)(angles);
+ stroke_len := 1/2spread / sind (stroke_dir - alpha);
draw_straight(pos + stroke_len * dir stroke_dir, pos - stroke_len * dir stroke_dir, stroke_through_thickness, true);
endgroup;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fddelims.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fddelims.mf
index 36c24dfcf75..8c33b047404 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fddelims.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fddelims.mf
@@ -398,7 +398,7 @@ for negated = false, true:
draw_line(z0, z1, false);
draw_line(z2, z3, false);
- if negated:
+ if negated:
if scale < 1: theta := 30; else: theta := 45; fi
len := 1/2(7u + floor scale * u + line_thickness) / cosd theta;
pair centre;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf
index c05479436f5..32ac2f122db 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdgeometric.mf
@@ -88,26 +88,6 @@ beginoperator(plus_size#, 1); "times";
draw_line(centre + r * dir 135, centre + r * dir 315, true);
endchar;
-beginoperator(plus_size#, 1.25); "plus minus";
- centre := centre + 0.125plus_size * up;
- pair bt;
- bt := centre + (radius + 0.25plus_size) * down;
-
- draw_line(centre + radius * right, centre + radius * left, true);
- draw_line(centre + radius * up, centre + radius * down, true);
- draw_line(bt + radius * right, bt + radius * left, true);
-endchar;
-
-beginoperator(plus_size#, 1.25); "minus plus";
- centre := centre + 0.125plus_size * down;
- pair tp;
- tp := centre + (radius + 0.25plus_size) * up;
-
- draw_line(centre + radius * right, centre + radius * left, true);
- draw_line(centre + radius * up, centre + radius * down, true);
- draw_line(tp + radius * right, tp + radius * left, true);
-endchar;
-
for angle = 0, 180:
beginoperator(plus_size#, 1); "dot minus (" & decimal angle & ")";
draw_line(centre - radius * dir angle, centre + radius * dir angle, true);
@@ -115,6 +95,12 @@ for angle = 0, 180:
endchar;
endfor;
+beginoperator(plus_size#, 1); "divide";
+ draw_line(centre + radius * right, centre + radius * left, true);
+ fill dot(centre + equal_spread * up, 3/4dot_size);
+ fill dot(centre + equal_spread * down, 3/4dot_size);
+endchar;
+
for sign = 1, -1:
beginoperator(plus_size#, 1); "minus with two dots";
draw_line(centre + radius * right, centre + radius * left, true);
@@ -131,8 +117,58 @@ beginoperator(plus_size#, 1); "minus with four dots";
fill dot(centre + (radius - 3/4dot_size) * right + equal_spread * down, 3/4dot_size);
endchar;
-beginoperator(plus_size#, 1); "divide";
+for angle = 0, 180:
+ beginoperator(plus_size#, 1.25); "plus minus (" & decimal angle & ")";
+ centre := centre + 0.125plus_size * dir (angle + 90);
+ pair bt;
+ bt := centre + (radius + 0.25plus_size) * dir (angle - 90);
+
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + radius * up, centre + radius * down, true);
+ draw_line(bt + radius * right, bt + radius * left, true);
+ endchar;
+endfor;
+
+for angle = 0, 180:
+ beginoperator(plus_size#, 1.25); "dot plus (" & decimal angle & ")";
+ centre := centre + 0.125plus_size * dir (angle - 90);
+ pair tp;
+ tp := centre + (radius + 0.25plus_size) * dir (angle + 90);
+
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + radius * up, centre + radius * down, true);
+ fill dot(tp, 3/4dot_size);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1.25); "dot times";
+ centre := centre + 0.125plus_size * down;
+ pair tp;
+ tp := centre + (radius + 0.2plus_size) * up;
+ r := 4/3radius;
+
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+ fill dot(tp, 3/4dot_size);
+endchar;
+
+beginoperator(plus_size#, 1.25); "times bar";
+ centre := centre + 0.125plus_size * up;
+ pair bt;
+ bt := centre + (radius + 0.25plus_size) * down;
+ r := 4/3radius;
+
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+ draw_line(bt + radius * right, bt + radius * left, true);
+endchar;
+
+beginoperator(plus_size#, 1); "divide on times";
+ r := 4/3radius;
+
draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
fill dot(centre + equal_spread * up, 3/4dot_size);
fill dot(centre + equal_spread * down, 3/4dot_size);
endchar;
@@ -268,19 +304,26 @@ for sign = 1, -1:
endfor;
for sign = 1, -1:
- beginoperator(plus_size#, 1); "curly wedge dot";
- draw_prec(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false);
- fill dot(1/2[z1a.l,z0a.r] + sign * 3/4dot_size * up, 3/4dot_size);
+ beginoperator(plus_size#, 1.25); "bar wedge";
+ centre := centre - sign * 0.125plus_size * up;
+ pair tp;
+ tp := centre + sign * (radius + 0.25plus_size) * up;
+
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false);
+ draw_line(tp + radius * left, tp + radius * right, true);
endchar;
endfor;
for sign = 1, -1:
- beginsymbol(13/9plus_size# + 2side_bearing#, vcentre(plus_size#)); "double curly wedge";
- 1/2[z0,z1] = (w/2, (h-d)/2);
- z1 - z0 = 4/9plus_size * right;
+ beginoperator(plus_size#, 1.5); "double bar wedge";
+ centre := centre - sign * 0.25plus_size * up;
+ pair tpa, tpb;
+ tpa := centre + sign * (radius + 0.25plus_size) * up;
+ tpb := centre + sign * (radius + 0.5plus_size) * up;
- draw_prec(a, z0 + sign * plus_size/2 * up, z0 - sign * plus_size/2 * up, 2radius, line_thickness, false);
- draw_prec(b, z1 + sign * plus_size/2 * up, z1 - sign * plus_size/2 * up, 2radius, line_thickness, false);
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false);
+ draw_line(tpa + radius * left, tpa + radius * right, true);
+ draw_line(tpb + radius * left, tpb + radius * right, true);
endchar;
endfor;
@@ -1018,30 +1061,16 @@ beginsymbol(equal_spread# + line_thickness# + 2side_bearing#, vcentre(med_op_siz
draw_smile(b, -1, z1 - r * up, z1 + r * up, equal_spread, line_thickness, true);
endchar;
-beginsymbol(11/5equal_spread# + line_thickness# + 2side_bearing#, vcentre(med_op_size#)); "reversed between";
- pair centre;
- centre := (w/2, (h-d)/2);
- r := med_op_size/2;
+beginsymbol(2equal_spread# + 2side_bearing#, x_height#, desc_depth#); "intercalate";
+ z1 - z0 = z3 - z2 = (2equal_spread - line_thickness) * right;
+ z2 - z0 = (h + d - line_thickness) * up;
- z0 = centre + 3/4equal_spread * right;
- z1 = centre - 3/4equal_spread * right;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = (w/2, (h-d)/2);
- draw_smile(a, -1, z0 - r * up, z0 + r * up, 2/3equal_spread, line_thickness, true);
- draw_smile(b, 1, z1 - r * up, z1 + r * up, 2/3equal_spread, line_thickness, true);
+ draw_line(z2, z3, true);
+ draw_line(1/2[z0,z1], 1/2[z2,z3], true);
endchar;
-for sign = 1, -1:
- beginsymbol(order_width# + 2side_bearing#, cap_height#, 0); "top";
- z1 - z0 = z3 - z2 = (order_width - line_thickness) * right;
- z2 - z0 = sign * (cap_height - line_thickness) * up;
-
- 1/2[1/2[z0,z1], 1/2[z2,z3]] = (w/2, (h-d)/2);
-
- draw_line(z2, z3, true);
- draw_line(1/2[z0,z1], 1/2[z2,z3], true);
- endchar;
-endfor;
-
beginsymbol(2/3equal_spread# + line_thickness# + 2side_bearing#, vcentre(plus_size#)); "wreath";
pair centre;
centre := (w/2, (h-d)/2);
@@ -1330,7 +1359,7 @@ for filled = false, true:
z6 = z1'r + whatever * dir (270-45);
z7 = z0 + thick * dir 20;
z8 = z0 + thick * dir (180-20);
- p1 = z7{dir (90+35)} .. {dir 90}z2r;
+ p1 = z7{dir (90+35)} .. {dir 90}z2r;
p2 = z3r{dir 270} .. {dir (270-35)}z8;
(t1,t2) = p1 intersectiontimes p2;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdoperators.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdoperators.mf
index 3ea67622d4a..9e7b8da4b07 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdoperators.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdoperators.mf
@@ -69,33 +69,8 @@ endfor;
for sign = 1, -1:
for scale = 1, 1.4:
- beginbigop(scale, scale); "big curly wedge dot";
- draw_prec(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - line_thickness, line_thickness, false);
- fill dot(centre - sign * 3/8op_height * up, dot_size);
- endchar;
- endfor;
- charlist current_char - 1: current_char;
-endfor;
-
-for sign = 1, -1:
- for scale = 1, 1.4:
- beginbigop(4/3scale, scale); "double big curly wedge";
- z0 = centre - 1/8op_width * right;
- z1 = centre + 1/8op_width * right;
-
- draw_prec(a, z0 + sign * op_height/2 * up, z0 - sign * op_height/2 * up, 3/4op_width - line_thickness, line_thickness, false);
- draw_prec(b, z1 + sign * op_height/2 * up, z1 - sign * op_height/2 * up, 3/4op_width - line_thickness, line_thickness, false);
- endchar;
- endfor;
- charlist current_char - 1: current_char;
-endfor;
-
-for sign = 1, -1:
- for scale = 1, 1.4:
beginbigop(scale, scale); "big union";
- draw_subset(a, centre + sign * op_height/2 * up,
- centre - sign * op_height/2 * up,
- op_width - line_thickness, line_thickness);
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - line_thickness, line_thickness);
endchar;
endfor;
charlist current_char - 1: current_char;
@@ -104,9 +79,7 @@ endfor;
for sign = 1, -1:
for scale = 1, 1.4:
beginbigop(scale, scale); "big union dot";
- draw_subset(a, centre + sign * op_height/2 * up,
- centre - sign * op_height/2 * up,
- op_width - line_thickness, line_thickness);
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - line_thickness, line_thickness);
fill dot(centre - sign * 1/8op_height * up, dot_size);
endchar;
endfor;
@@ -116,9 +89,7 @@ endfor;
for sign = 1, -1:
for scale = 1, 1.4:
beginbigop(scale, scale); "big union plus";
- draw_subset(a, centre + sign * op_height/2 * up,
- centre - sign * op_height/2 * up,
- op_width - line_thickness, line_thickness);
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - line_thickness, line_thickness);
r := 1/4op_width;
@@ -167,7 +138,7 @@ for sign = 1, -1:
z1 - z0 = sign * (op_height - line_thickness) * up;
1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
- draw_line(z0, z1, true);
+ draw_line(z0, z1, true);
draw_line(z1, z2, true);
draw_line(z2, z3, true);
@@ -262,14 +233,13 @@ charlist current_char - 1: current_char;
for number = 0, 1, 2, 3:
for scale = 1, 1.8:
- beginsymbol(scale * (5number + 4) * u# + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "integral";
+ beginsymbol(scale * (5number + 4) * u# + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral";
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
pair centre;
for i = 0 upto number:
centre := (side_bearing + scale * (5i + 7/2) * u, (h - d)/2);
-
draw_integral([i])(scale, centre, 3/2line_thickness * sqrt sqrt scale);
endfor;
endchar;
@@ -278,7 +248,7 @@ for number = 0, 1, 2, 3:
endfor;
for scale = 1, 1.8:
- beginsymbol(scale * 9u# + 4(equal_spread# + dot_size#) + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "integral dots";
+ beginsymbol(scale * 9u# + 4(equal_spread# + dot_size#) + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral dots";
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
pair centre;
@@ -303,8 +273,8 @@ charlist current_char - 1: current_char;
for sign = 1, -1:
for scale = 1, 1.8:
- beginsymbol(scale * 6u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "oriented integral";
- if scale > 1:
+ beginsymbol(scale * 6u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "oriented integral";
+ if scale > 1:
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
fi
@@ -339,7 +309,7 @@ for sign = 1, -1:
endfor;
for scale = 1, 1.8:
- beginsymbol(scale * 4u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "integral with horizontal bar";
+ beginsymbol(scale * 4u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral with horizontal bar";
if scale > 1:
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
fi
@@ -358,7 +328,7 @@ endfor;
charlist current_char - 1: current_char;
for scale = 1, 1.8:
- beginsymbol(scale * 4u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "integral with double horizontal bar";
+ beginsymbol(scale * 4u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral with double horizontal bar";
if scale > 1:
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
fi
@@ -381,7 +351,7 @@ endfor;
charlist current_char - 1: current_char;
for scale = 1, 1.8:
- beginsymbol(scale * 4u# + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "stroked integral";
+ beginsymbol(scale * 4u# + (sqrt scale) * 3/4line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "stroked integral";
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
pair centre;
@@ -399,7 +369,7 @@ charlist current_char - 1: current_char;
for number = 0, 1, 2:
for scale = 1, 1.8:
- beginsymbol(scale * (5number + 5) * u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "contour integral";
+ beginsymbol(scale * (5number + 5) * u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "contour integral";
if scale > 1:
italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
fi
@@ -420,9 +390,8 @@ for number = 0, 1, 2:
fi
% Integral must come after unfill when processed with MetaPost!
- for i = 0 upto number:
+ for i = 0 upto number:
centre := (side_bearing + scale * (5i + 4) * u, (h - d)/2);
-
draw_integral([i])(scale, centre, 3/2line_thickness * sqrt sqrt scale);
endfor;
endchar;
@@ -433,10 +402,10 @@ endfor;
for alpha = 0, 180:
for sign = 1, -1:
for scale = 1, 1.8:
- beginsymbol(scale * 6u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "oriented contour integral";
+ beginsymbol(scale * 6u# + if scale > 1: (sqrt scale) * 3/4line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "oriented contour integral";
if scale > 1:
- italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
- fi
+ italcorr scale * 3u# - (sqrt scale) * 3/4line_thickness#; % kerning between upper limit and lower limit
+ fi
pair centre;
centre := (side_bearing + scale * (4u + if alpha > 90: u else: 0 fi), (h - d)/2);
@@ -465,7 +434,7 @@ for alpha = 0, 180:
endfor;
for scale = 1, 1.8:
- beginsymbol(scale * 13/2u# + if scale > 1: 0 else: scale * u# fi + 2side_bearing#, ((scale - 1)/2 + 1) * 1.6asc_height#, (scale - 1)/2 * 1.6asc_height#); "sum integral";
+ beginsymbol(scale * 13/2u# + if scale > 1: 0 else: scale * u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "sum integral";
if scale > 1:
italcorr scale * u#; % kerning between upper limit and lower limit
fi
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf
index 5a8bc3b418b..01940430e0f 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdrelations.mf
@@ -66,7 +66,7 @@ fi;
if negated < 2:
beginorder(1, order_width#, ifneg(5/2,7/2) * equal_spread#); "triple sim";
- s := equal_spread;
+ 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);
@@ -159,8 +159,8 @@ if negated < 2:
beginorder(1, order_width#, ifneg(4/2,7/2) * equal_spread# + ifneg(1,0) * 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_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:
@@ -242,6 +242,21 @@ if negated < 2:
endfor;
fi;
+if negated < 1:
+ for sign = 1, -1:
+ beginorder(sign, 4/3order_width# + 3/4dot_size#, equal_spread# + dot_size#); "colon equal";
+ s := 1/2equal_spread;
+ pair left_sep;
+ left_sep := left_ex + sign * (3/4dot_size + 1/3order_width) * right;
+
+ fill dot(left_ex + s * up + sign * 3/4dot_size * right, 3/4dot_size);
+ fill dot(left_ex - s * up + sign * 3/4dot_size * right, 3/4dot_size);
+ draw_line(left_sep + s * up, right_ex + s * up, false);
+ draw_line(left_sep - s * up, right_ex - s * up, false);
+ endchar;
+ endfor;
+fi;
+
if negated < 2:
for sign = 1, -1:
beginorder(1, order_width#, ifneg(1/2,5/2) * equal_spread#); "smile";
@@ -335,7 +350,7 @@ if negated < 2:
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);
@@ -408,7 +423,7 @@ if negated < 3:
if negated = 1:
stroke_through(centre, 6/3equal_spread + 3/4greater_spread);
elseif negated = 2:
- stroke_through(1/2[z2,z3], equal_spread);
+ stroke_through(1/2[z2,z3], equal_spread);
fi;
endchar;
endfor;
@@ -542,7 +557,7 @@ if negated < 2:
endfor;
fi;
-if negated < 3:
+if negated < 2:
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;
@@ -556,8 +571,6 @@ if negated < 3:
if negated = 1:
stroke_through(centre, (17/6 + 1/2sign) * equal_spread + 2s);
- elseif negated = 2:
- stroke_through(centre, 2equal_spread);
fi;
endchar;
endfor;
@@ -667,7 +680,7 @@ if negated < 2:
fill stroke z4.e{dir (theta - 90)} .. {dir(-theta - 90)}z5.e;
- if negated = 1:
+ if negated = 1:
stroke_through(centre, equal_spread + greater_spread);
fi;
endchar;
@@ -678,8 +691,8 @@ if negated < 2:
for sign = 1, -1:
beginorder(sign, order_width# * sqrt(7/6), ifneg(1,2) * equal_spread# + 3/4greater_spread#); "round less than or slanted equal";
thick := line_thickness;
- s := 3/4greater_spread;
- t := 1/2equal_spread;
+ s := 3/4greater_spread;
+ t := 1/2equal_spread;
z0 = left_ex + t * up;
z1 = z0 + order_width * dir angle(right_ex - left_ex);
@@ -696,13 +709,13 @@ if negated < 2:
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 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:
+ if negated = 1:
stroke_through(centre, 2equal_spread + 3/4greater_spread);
fi;
endchar;
@@ -738,7 +751,7 @@ if negated < 3:
draw_line(z0' + s/2 * up, z0' - s/2 * up, false);
draw_line(z2, z3, false);
- if negated = 1:
+ if negated = 1:
stroke_through(centre, 5/2equal_spread + s);
elseif negated = 2:
stroke_through(1/2[z2,z3] + 1/2equal_spread * up, 2equal_spread);
@@ -945,7 +958,7 @@ if negated < 3:
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 - 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;
@@ -953,7 +966,7 @@ if negated < 3:
draw_line(z2, z3, false);
draw_line(z4, z5, false);
- if negated = 1:
+ 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);
@@ -1072,7 +1085,7 @@ if negated < 2:
for sign = 1, -1:
beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "slanted equal or less than";
s := 3/4greater_spread;
- t := 1/2equal_spread;
+ t := 1/2equal_spread;
draw_less(a, left_ex - t * up, right_ex - t * up, s, line_thickness, false);
@@ -1092,7 +1105,7 @@ fi
if negated < 2:
for sign = 1, -1:
beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "curly equal or curly less than";
- s := 3/4greater_spread;
+ s := 3/4greater_spread;
z0 - z2 = -equal_spread * up;
z1 - z3 = -(7/5equal_spread + s/2) * up;
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdturnstile.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdturnstile.mf
new file mode 100644
index 00000000000..5e0031ffa7d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdturnstile.mf
@@ -0,0 +1,102 @@
+%
+% 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
+%
+
+for factor = 1, 7/10:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "turnstile (" & decimal alpha & ")";
+ draw_line(foot, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for factor = 1, 7/10:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "double turnstile (" & decimal alpha & ")";
+ z1 - z0 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+
+ draw_line(z0, z0 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z1, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for factor = 13/10, 1:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "bar with turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+
+ draw_line(z0, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z0 + 1/2(len - 3/10turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, 13/10); "bar with double turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+ z2 - z1 = z4 - z3 = equal_spread * dir (alpha + 90);
+ 1/2[z1,z2] = foot;
+ 1/2[z3,z4] = z0;
+
+ draw_line(z3, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z4, z2 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z0 + 1/2(len - 3/10turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginturnstile(alpha, 13/10); "double bar with turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+ z1 = z0 + 3/10turnstile_width * dir alpha;
+
+ draw_line(z1, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+ draw_line(z1 - spread/2 * dir (alpha + 90), z1 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z1 + 1/2(len - 3/5turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginturnstile(alpha, 1); "triple turnstile (" & decimal alpha & ")";
+ z0 - foot = foot - z1 = equal_spread * dir (alpha + 90);
+
+ draw_line(z0, z0 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z1, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;