% mafigs.mf 1.2.0 1994/10/11 -- program file for figures % Copyright 1991, 1992, 1993 P. Damian Cugley. %%% @METAFONT-file { %%% filename = "mafigs.mf", %%% version = "1.2.0", %%% date = "1994/10/11", %%% package = "Malvern 1.2", %%% author = "P. Damian Cugley", %%% email = "damian.cugley@comlab.ox.ac.uk", %%% address = "Oxford University Computing Laboratory, %%% Parks Road, Oxford OX1 3QD, UK", %%% codetable = "USASCII", %%% keywords = "Malvern, METAFONT, font, typefont, TeX", %%% supported = "Maybe", %%% abstract = "Character programs for the Malvern %%% font family.", %%% dependencies = "other program files", %%% } % See the Malvern Handbook (maman.tex) for more info about Malvern. % This software is available freely but without warranty. % See the file COPYING for details. % This file is read in more than once in order to create several sets % of figures: old-style (`text'), ranging, and maybe superior (superscript) % and inferior (subscript). To do this several parameters set in % ma.mf must be set correctly. %{{{ mafigs.mf %{{{ macro to start each character with % So that each program can generate `superior' figures as well as % text and ranging figures, they refer to |fig_b| instead of |-d|. % For text figures this is set to |-d|. For others it must be set % before the |input mafigs| command. string type_of_figs; type_of_figs := if text_figs: "old style" elseif fig_b > 0: "superior" % footnotes etc. elseif fig_b < 0: "inferior" else: "ranging" % fixed width and height fi; if (fig_b > 0) or (fig_ht# < x_ht#) and unknown sfig_pn: small_figs := true; pickup pencircle xscaled sfig.pn.wd yscaled sfig.pn.ht; fig_pn := savepen; fi def ma_fig(expr num)(expr w_sh, h_sh, d_sh) = type_of_figs & " figure " & char(ASCII"0" + num); ma_char(fig_offset + num, if text_figs: w_sh, h_sh, d_sh else: fig_wd#, fig_ht#, fig_dp# fi) (1,1); if text_figs: fig_b := -d; fi if known fig_pn: pickup fig_pn; fi enddef; %}}} def hsuper(suffix f, t) = z.f ... (1/sqrt2)[(x.f, y.t), (x.t, y.f)]{z.t - z.f} ... z.t enddef; def vsuper(suffix f, t) = z.f ... (1/sqrt2)[(x.t, y.f), (x.f, y.t)]{z.t - z.f} ... z.t enddef; if testing: endinput; fi %{{{ 1 % - pdc Mon. 25 Feb. 1991 ma_fig(1, 4u#, x_ht#, 0v#); top z1 = (hround (1/2w + 1/2u), h + o); bot z2 = (x1, fig_b - o); z0 = z1 + whatever*ne; x0 = x1 - 2u; draw z0 -- z1 -- z2; labels(0,1,2); set_ic_tr; endchar; %}}} %{{{ 0 ma_fig(0, 8u#, x_ht#, 0v#); top z1 = (1/2[l,r], h + o); bot z4 = (x1, fig_b - o); lft x2 = lft x3 = l; rt x0 = rt x5 = r; if x0 - x2 < y1 - y4: y2 = y0 = 2/3[1/2[fig_b, h] + eps, y1 - 1/2(x0 - x2)]; y3 = y5 = 2/3[1/2[fig_b, h] - eps, y4 + 1/2(x0 - x2)]; draw vsuper(0,1) & hsuper(1,2) --- vsuper(3,4) & hsuper(4,5) --- cycle; else: y2 = y0 = 1/2[y4, y1]; draw superellipse(z0, z1, z2, z4)(1/sqrt2); fi labels(1, 2, 3, 4, 5, 0); set_ic_tr; endchar; %}}} %{{{ 3 & 5 def draw_fivthree = rt z4 = (r, 1/2[y3,y5]); bot z5 = (0.55[r,l], fig_b - o); bot lft z6 = (l, good.y (fig_b - o + 1/2v)); draw z1 -- z2 -- z3 ... hsuper(3',4){down} & vsuper(4,5){left} & hsuper(5,6); labels(1,2,3,3',4,5,6) enddef; ma_fig(5, 7.25u#, x_ht#, desc_dp#); top rt z1 = (good.x 0.8[l,r], h); top lft z2 = (good.x 0.1[l,r], h); top y3 + if r - l > 5u: 1/4v else: 1/8v fi = top y3' = if text_figs: 0.708[fig_b,h] else: 2/3[fig_b,h] fi; x3 = x2; x3' = x5; draw_fivthree; endchar; ma_fig(3, 7.25u#, x_ht#, desc_dp#); top lft z1 = (0.05[l,r], h); top rt z2 = (good.x 0.875[l,r], h); top y3 if r - l > 6u: + 1/6v fi = top y3' = if text_figs: 0.683[fig_b,h] else: 2/3[fig_b,h] fi; x3 = max(1/6[l,r] + 1/2pn.wd, min(0.35[l,r], x2 - (y2 - y3))); x3' = x5; draw_fivthree; endchar; %}}} %{{{ 7 ma_fig(7, 6.5u#, x_ht#, desc_dp#); draw bot rt (l,h) -- bot lft (r, h) -- top (good.x 1/3[l,r], fig_b - o); endchar; %}}} %{{{ 4 ma_fig(4, 7u#, x_ht#, 2/3desc_dp#) top y1 = h + o; x1 = good.x 1/3[l,r]; bot y2 = bot y3 = if text_figs: 0 else: 1/4[fig_b, h] fi; lft x2 = l; rt x3 = r; draw z1 -- z2 -- z3; x4 = x5 = good.x 1/3[r,l]; top y4 = 2/3[fig_b, h]; bot y5 = fig_b - o; draw z4 -- z5; labels(1,2,3,4,5); endchar; %}}} %{{{ 2 ma_fig(2, 6u#, x_ht#, 0v#); lft x1 = l; top y2 = top y1 + if text_figs: 1.25v else: 1.5v fi = h + o; rt x3 = rt x7 = r; lft x6 = l; bot y6 = bot y7 = fig_b; x2 = x4 = 0.55[r,l]; y3 = if text_figs: 2/3 else: 0.75 fi [y6, y2]; y4 = 0.55[y6, y3]; %% if text_figs: 3/8 else: 2/5 fi [y6, y2]; z5 = z6 + 1/2pn.ht * up; draw z1 ... hsuper(2,3) ... z4 ... z5 ... {(z6 - z4) yscaled 8} z6 -- z7; labels(1,2,3,4,5,6,7); endchar; %}}} %{{{ 8 ma_fig(8, 8u#, fig_ht#, 0v#); bot z3bot = (1/2[l,r], fig_b - o); lft x2bot = l - ho; rt x0bot = r + ho; x1bot = x3bot = x1top = x3top = 1/2[x2top, x0top]; y2top = y0top = 1/2[y3top, y1top]; y2bot = y0bot = 1/2[y3bot, y1bot]; top y1top = h + o; y1bot = y3top = max(0.55[y3bot, y1top], min(2/3[y3bot, y1top], y3bot + (x0bot - x2bot))); x2top = max(rt 1/16[l,r], 1/2[l,r] - 1/2(y1top - y3top) * max(1, (x0bot - x2bot)/(y1bot - y3bot))); draw superellipse(z0bot, z1bot, z2bot, z3bot)(1/sqrt2); draw superellipse(z0top, z1top, z2top, z3top)(1/sqrt2); endchar; %}}} %{{{ 69 % pdc Wed. 27 Feb. 1991 % tails fixed pdc Tue. 23 Apr. 1991 ma_fig(6, 8u#, fig_ht#, 0v#); lft x2 = l; rt x0 = r + ho; bot y3 = fig_b - o; y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2]; top z2tail = (1/2[l,r], h + o); y1 = max(0.55[y3, y2tail], min(3/4[y3, y2tail], y3 + (x0 - x2))); draw superellipse(z0, z1, z2, z3)(1/sqrt2); % try to guess the point on bowl where tail connects: numeric theta; theta = angle(y1 - y0, (y2tail - y0) +-+ (y1 - y0)); z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 90) xscaled ((x0 - x2)/(y1 - y3))); draw z1tail -- z2tail; labels(0, 1, 2, 3, 1tail, 2tail); endchar; ma_fig(9, 8u#, x_ht#, desc_dp#); lft x2 = l; rt x0 = r + ho; top y1 = h + o; y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2]; bot z2tail = (1/2[l,r], fig_b - o); y3 = min(0.55[y1, y2tail], max(3/4[y1, y2tail], y1 - (x0 - x2))); draw superellipse(z0, z1, z2, z3)(1/sqrt2); % try to guess the point on bowl where tail connects: numeric theta; theta = angle(y1 - y0, (y0 - y2tail) +-+ (y1 - y0)); z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 270) xscaled ((x0 - x2)/(y1 - y3))); draw z1tail -- z2tail; labels(0, 1, 2, 3, 1tail, 2tail); endchar; %}}} %}}} % Local variables: % fold-folded-p: t % End: