diff options
author | Karl Berry <karl@freefriends.org> | 2011-09-04 15:45:11 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-09-04 15:45:11 +0000 |
commit | 42e5f8462775ba16e02210c476ba8b144a08167b (patch) | |
tree | ab40d5f3add9971d605f68e2ae564d4a1c8c0855 /Master/texmf-dist/fonts/source | |
parent | 49e5184aecbe98809d674d9b2db29fc54cedfbc1 (diff) |
fdsymbol (30aug11)
git-svn-id: svn://tug.org/texlive/trunk@23797 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source')
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; |