% Blackboard bold parameters, Alan Jeffrey 14--18 Dec 1989. % % These parameters are deduced from those set in bboldNN.mf. % % The only horizontal parameter we take in is the unit u#, % from which we calculate all the horizontal distances. % % The distance between the two strokes in a fat line is fatness. fatness# := 2.3u#; % The size of a pen is rule_thickness. pen_size# := rule_thickness#; % Characters with space inside them (for example the % gap between the bar and the dot in a ! have either smallspace, % space# or bigspace# worth of space. smallspace# := u#; space# := 2u#; bigspace# := 3u#; % Characters with bits jutting out of them (for example the feet in % ] or the bar in f) have jut# worth of stick-outiness. jut# := 1.5u#; bigjut# := 2.5u#; % Some characters are exactly fatness# + pen_size# wide, as they are % drawn with just one vertical line. % % tiny --- I, i, l, |, ,, :, ;, ., `, ', !. % % Others have a small amount jutting out from the side, like the % top and bottom of a ]. % % tiny+jut --- [, ], (, ). tiny# := fatness# + pen_size#; % Upper case characters come in three sizes: % % small --- B, E, F, J, K, L, P, R, S, Gamma, Pi, ?, \$, /, \, % % medium --- A, C, D, G, H, M, N, O, Q, T, U, V, X, Y, Z, % Delta, Theta, Lamba, Xi, Sigma, Upsilon, Phi, Psi, Omega, % % big --- W. smallcap# := 9u#; medcap# := 10u#; bigcap# := 14u#; % Lower case characters come in three sizes: % % small --- f, j, s, t, % % small + fatness --- h, k, n, r, % % medium --- a, c, d, e, g, o, q, u, v, x, y, z, % % medium + fatness --- b, p, % % big --- m, w. % % The letters with verticals at the left have fatness added on % so that the curves are the same size as the other letters. smalllower# := 6u#; medlower# := 7.5u#; biglower# := 11u#; % Numerals are all the same size. numeral# := 8u#; % Arithmetic operators (in this case just +) are all the same size. arithmetic# := 12u#; % Characters have three kinds of space at the side: % % small --- for example around a T, % % medium --- for example around an O, % % large --- for example around an I. smallgap# := 1/2u#; medgap# := 1u#; biggap# := 1.5u#; % Whereas we've only got one horizontal measurement stolen from cmr, % there are lots of vertical ones. We can use these to work out % our measurements. % % Characters can have various top positions: % % ATop --- the top of all capitals, Greek, and some punctuation, % % aTop --- the top of lower case without ascenders, % % bTop --- the top of lower case with ascenders, % % iTop --- the top of i and j, % % oneTop --- the top of numerals, % % bracketTop --- the top of a bracket (also the top of the body size). ATop# := cap_height#; aTop# := x_height#; bTop# := asc_height#; oneTop# := fig_height#; bracketTop# := body_height#; iTop# := min(x_height# + space# + fatness#, asc_height#); % The bottoms of characters can be: % % aBottom --- the base line, % % gBottom --- the bottom of a descender, % % bracketBottom --- the bottom of a bracket (also the bottom of the body). aBottom# := 0pt#; gBottom# := -desc_depth#; .5 [bracketBottom#, bracketTop#] = math_axis#; % Brackets are centered. % Various characters such as A, B, G, e, and 3 have bars in them. ABar# := .25 [aBottom#, ATop#]; BBar# := .52 [aBottom#, ATop#]; % number nicked from cmr. GBar# := .50 [aBottom#, ATop#]; eBar# := bar_height#; threeBar# := .54[aBottom#, oneTop#]; % number nicked from cmr. % The top of a Q's tail is at QTailTop, and the bottom is at QTailBottom. QTailTop# := .28 [aBottom#, ATop#]; % number nicked from cmr. QTailBottom# := aBottom# - comma_depth#; % number nicked from cmr. % Various sorts of letters have various amounts of curl in them. % % CCurl --- the amount the end of a C curls, % cCurl --- the amount the end of a c curls, % gCurl --- the amount the tail of a g curls, % hCurl --- the distance from the bottom of an h to the point where % the right of the curve becomes vertical. CCurl# := .2 (ATop# - aBottom#); cCurl# := .2 (aTop# - aBottom#); gCurl# := .2 (aBottom# - gBottom#); hCurl# := .4 (aTop# - aBottom#); % The numbers five, six and eight have bowls, which are sixBowl# tall. sixBowl# := aTop# - aBottom#; % These bowls are as tall as an a. % A less than (and a greater than) is lessthan# tall. lessthan# := math_spread [5/4x_height#, 3/2x_height#]; % Numbers from cmr. % Right, I'll now turn these nice sharp measurements into grotty % approximate pixelly ones. define_corrected_pixels (o); define_whole_blacker_pixels (pen_size); define_whole_pixels (fatness, jut, bigjut, smallspace, space, bigspace); define_whole_vertical_pixels (CCurl, cCurl, gCurl, hCurl, sixBowl); define_whole_top_pixels (ATop, aTop, bTop, oneTop, bracketTop, QTailTop); define_whole_bottom_pixels (QTailBottom, aBottom, gBottom, bracketBottom); pickup pencircle scaled pen_size; define_good_y_pixels (ABar, BBar, GBar, eBar, threeBar); % And now some handy numbers, which I don't need sharp versions of. aMiddle := .5[aBottom, aTop]; dashMiddle := .61803 [aBottom, aTop]; % Number stolen from cmr. % I can now set the font parameters for the TFM files, stolen from cmr. font_normal_space := 6u#; font_normal_stretch := 3u#; font_normal_shrink := 2u#; font_quad := 18u#; font_extra_space := 2u#; font_x_height := x_height#; % And that's that.