[comp.text.tex] ricoh engine fonts

tasayco@phoenix.Princeton.EDU (Maria Tasayco) (01/24/91)

A few days ago I posted an article asking for help with the generation
of TeX fonts for a write-white engine (Ricoh). I received some mail
from people who where also interested in the answers since they had
the same problem, so I am posting the messages I got thus far. 
After I tried changing some of the parameters in the mode_def for
Ricoh I finally went back to the original parameters, which seem to
give the best results (original means: the ones in the file U_Wash.mf
which you can get from labrea.stanford.edu; and don't forget to get
also the file white_setup.mf, which is needed for write-white
printers).

OK, here follow the messages:

From pjt@cpac.washington.edu  Wed Jan 16 00:34:04 1991
Posted-Date: Tue, 15 Jan 91 21:38:28 -0800
Received-Date: Wed, 16 Jan 91 00:34:04 EST
Received: from Princeton.EDU by lutece.rutgers.edu (5.52/5.51)
	id AA23559; Wed, 16 Jan 91 00:34:04 EST
Received: from phoenix.Princeton.EDU by Princeton.EDU (5.61++/2.62/princeton)
	id AA28360; Wed, 16 Jan 91 00:37:15 -0500
From: pjt@cpac.washington.edu
Received: from dharma.cpac.washington.edu by phoenix.princeton.edu (4.1/1.106)
	id AA21397; Wed, 16 Jan 91 00:37:13 EST
Received: by dharma.cpac.washington.edu
	(5.65/UW-NDC Revision: 2.4 ) id AA04068; Tue, 15 Jan 91 21:38:28 -0800
Date: Tue, 15 Jan 91 21:38:28 -0800
Message-Id: <9101160538.AA04068@dharma.cpac.washington.edu>
To: tasayco@phoenix.Princeton.EDU (Maria Tasayco)
In-Reply-To: tasayco@phoenix.Princeton.EDU's message of 15 Jan 91 15:31:55 GMT
Subject: METAFONT setup for Ricoh engine
Status: RO

If you aren't using a Ricoh (or at least some write-white
engine)-specific mode, you should.  You can also find write-white
fonts in a subdirectory of the fonts that come (came, anyway) with the
standard TeX distribution (the directory is called white, or wfonts,
or something like that).  Coincidentally, they left the mode_def used
to create those fonts as readable text at the tail end of the pk
files, so you can use it to generate more than the (somewhat small)
default write-white font set.

Larry Setlow

From @RutVM1.Rutgers.Edu:AUBORD@uni2a.unige.ch  Wed Jan 16 03:26:08 1991
Posted-Date: Wed, 16 Jan 91 09:16 N
Received-Date: Wed, 16 Jan 91 03:26:08 EST
Received: from rutvm1.rutgers.edu by lutece.rutgers.edu (5.52/5.51)
	id AA23664; Wed, 16 Jan 91 03:26:08 EST
Received: from RUTVM1.RUTGERS.EDU by RutVM1.Rutgers.Edu (IBM VM SMTP R1.2.1MX) with BSMTP id 2224; Wed, 16 Jan 91 03:31:32 EST
Received: from cgeuge53.bitnet by RUTVM1.RUTGERS.EDU (Mailer R2.07) with BSMTP
 id 2223; Wed, 16 Jan 91 03:31:31 EST
Received: from uni2a.unige.ch by cgeuge53.bitnet; Wed, 16 Jan 91 09:11 N
Date: Wed, 16 Jan 91 09:16 N
From: AUBORD%uni2a.unige.ch@RutVM1.Rutgers.Edu
Subject: Ricoh set-up
To: figuei@lutece.rutgers.edu
Message-Id: <D364BB88B03F00247B@cgeuge51.bitnet>
X-Envelope-To: figuei@lutece.rutgers.edu
X-Vms-To: IN%"figuei@lutece.rutgers.edu"
Status: RO

Here is the ricoh set up we use here at the university of Geneva.

I don't know if it's different from your set up

% Ricoh 4080: for the TI Omnilaser (Stan Osborne's values TUGboat 8,2,134)
mode_def RicohFourZeroEightZero =
 let font_setup=white_setup;    % use the write-white font_setup
 proofing:=0;                   % no, we're not making proofs
 fontmaking:=1;                 % yes, we are making a font
 tracingtitles:=0;              % no, don't show titles at all
 pixels_per_inch:=300;          % Ricoh write-white engine.
 blacker:=.2;                   % Don't overblack the small fonts
 fillin:=-.2;                   % reverse compensation for diagonal fillin
 o_correction:=.5;              % but don't overshoot as much
 enddef;

A.Aubord

My address:
  Bitnet: AUBORD@CGEUGE51.bitnet UUCP:aubord@cui.UUCP
  X.400:aubord@cui.unige.ch Path:   mcsun!cui!aubord
  Surface Mail:
    A.Aubord
    University Of Geneva
    Services Informatiques
    24 rue General-Dufour
    1211 Geneva
    Switzerland.

From wjw%eb.ele.tue.nl@Princeton.EDU  Wed Jan 16 04:35:20 1991
Posted-Date: Wed, 16 Jan 91 10:36:10 +0100
Received-Date: Wed, 16 Jan 91 04:35:20 EST
Received: from Princeton.EDU by lutece.rutgers.edu (5.52/5.51)
	id AA23713; Wed, 16 Jan 91 04:35:20 EST
Received: from phoenix.Princeton.EDU by Princeton.EDU (5.61++/2.62/princeton)
	id AA03498; Wed, 16 Jan 91 04:37:33 -0500
Received: from eb.ele.tue.nl ([131.155.2.25]) by phoenix.princeton.edu (4.1/1.106)
	id AA28452; Wed, 16 Jan 91 04:36:27 EST
Received: by eb.ele.tue.nl; id AA00923; Wed, 16 Jan 91 10:36:10 +0100
Date: Wed, 16 Jan 91 10:36:10 +0100
From: wjw%eb.ele.tue.nl@Princeton.EDU (Willem Jan Withagen)
Message-Id: <9101160936.AA00923@eb.ele.tue.nl>
To: tasayco@phoenix.Princeton.EDU
Subject: Re: METAFONT setup for Ricoh engine
Newsgroups: comp.text.tex
In-Reply-To: <5377@idunno.Princeton.EDU>
Organization: Eindhoven University of Technology, The Netherlands
Cc: 
Status: RO

The Ricoh device is known to be a write white device. It gets you
horrible character is you print with the std-fonts.

The following will correct this. Don't get shocked, I do not understand 
it myself. But it works.

The other thing is that we have a complete collection of fonts on our
anonymous ftp 
	ftp.eb.ele.tue.nl (131.155.2.25 ) /pub/tex/fonts/300WWdpi.
Not all are really WW, but the once I did not/could not make are linked
to the normal 300dpi ones. I havent gotten any problems though.

Regards,
	Willem Jan Withagen

Eindhoven University of Technology   DomainName:  wjw@eb.ele.tue.nl    
Digital Systems Group, Room EH 10.10 BITNET: ELEBWJ@HEITUE5.BITNET
P.O. 513                             Tel: +31-40-473401
5600 MB Eindhoven                    The Netherlands

------- snipe snipe ---------
% The basic correction for write-white fonts occurs in the definition
%	font_setup.  This can be used to overwrite the write-black
% 	definition in cmbase.mf
%
def white_setup =
 if monospace: let adjust_fit=mono_adjust_fit;
  def mfudged=fudged enddef;
  mono_charic#:=body_height#*slant;
  if mono_charic#<0: mono_charic#:=0; fi
  mono_charwd#:=9u#; define_whole_pixels(mono_charwd);
 else: let adjust_fit=normal_adjust_fit;
  def mfudged= enddef; fi
 if math_fitting: let math_fit=do_math_fit
 else: let math_fit=ignore_math_fit fi;
 define_pixels(u,width_adj,serif_fit,cap_serif_fit,jut,cap_jut,beak,
  bar_height,dish,bracket,beak_jut,stem_corr,vair_corr,apex_corr);
 define_blacker_pixels(notch_cut,cap_notch_cut);
 forsuffixes $=notch_cut,cap_notch_cut: if $<3: $:=3; fi endfor
 define_whole_pixels(letter_fit,fine,crisp,tiny);
 define_whole_vertical_pixels(body_height,asc_height,
  cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop);
 define_whole_blacker_pixels(thin_join,hair,stem,curve,flare,
  dot_size,cap_hair,cap_stem,cap_curve);
 define_whole_vertical_blacker_pixels(vair,bar,slab,cap_bar,cap_band);
 define_corrected_pixels(o,apex_o);
 forsuffixes $=hair,stem,cap_stem:
  fudged$.#:=fudge*$.#; fudged$:=hround(fudged$.#*hppp+blacker);
  forever: exitif fudged$>.9fudge*$; fudged$:=fudged$+1; endfor endfor
 rule_thickness:=ceiling(rule_thickness#*hppp);
 heavy_rule_thickness:=ceiling(3rule_thickness#*hppp);
 oo:=vround(.5o#*hppp*o_correction)+eps;
 apex_oo:=vround(.5apex_o#*hppp*o_correction)+eps;
 lowres_fix(stem,curve,flare) 1.3;
 lowres_fix(stem,curve) 1.2;
 lowres_fix(cap_stem,cap_curve) 1.2;
 lowres_fix(hair,cap_hair) 1.2;
 lowres_fix(cap_band,cap_bar,bar,slab) 1.2;
 stem':=hround(stem-stem_corr); cap_stem':=hround(cap_stem-stem_corr);
 vair':=vround(vair+vair_corr);
 vstem:=vround .8[vair,stem]; cap_vstem:=vround .8[vair,cap_stem];
 ess:=(ess#/stem#)*stem; cap_ess:=(cap_ess#/cap_stem#)*cap_stem;
 dw:=(curve#-stem#)*hppp; bold:=curve#*hppp+blacker;
 dh#:=.6designsize;
 stem_shift#:=if serifs: 2stem_corr# else: 0 fi;
 more_super:=max(superness,sqrt .77superness);
 hein_super:=max(superness,sqrt .81225258superness); % that's $2^{-.3}$
 clear_pen_memory;
 if fine=0: fine:=1; fi
 forsuffixes $=fine,crisp,tiny:
%%% fine $ %%%% temporary formatting convention for MFT
  if $>fudged.hair: $:=fudged.hair; fi
  $.breadth:=$;
  pickup if $=0: nullpen else: pencircle scaled $; $:=$-eps fi;
  $.nib:=savepen; breadth_[$.nib]:=$;
  forsuffixes $$=lft,rt,top,bot: shiftdef($.$$,$$ 0); endfor endfor
%%% @ $ %%%% restore ordinary formatting for $
 min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth,2); % "WRITE WHITE" ONLY!
 if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
 if flare<vround flare: flare:=vround flare; fi
 forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
  if $<min_Vround: $:=min_Vround; fi endfor
 pickup pencircle scaled rule_thickness; rule.nib:=savepen;
 math_axis:=good.y(math_axis#*hppp);
 pickup pencircle scaled if hefty:(.6[vair,fudged.hair]) else:fudged.hair fi;
 light_rule.nib:=savepen;
 pickup pencircle xscaled cap_curve yscaled cap_hair rotated 30;
 cal.nib:=savepen;
 pair cal.extension; cal.extension:=(.75cap_curve,0) rotated 30;
 pickup pencircle xscaled cap_curve yscaled cap_hair rotated 70;
 tilted.nib:=savepen;
 pickup pencircle xscaled curve yscaled cap_hair rotated 70;
 med_tilted.nib:=savepen;
 pickup pencircle xscaled cap_stem yscaled cap_hair rotated 30;
 med_cal.nib:=savepen;
 pickup pencircle xscaled stem yscaled cap_hair rotated 30;
 light_cal.nib:=savepen;
 pickup pencircle xscaled(cap_curve+dw) yscaled cap_hair rotated 30;
 heavy_cal.nib:=savepen;
 bot_flourish_line:=-.5u-o;
 pair bend; bend=(.5u,0);
 pair flourish_change; flourish_change=(4u,.2asc_height);
 join_radius:=u;
 currenttransform:=identity slanted slant
  yscaled aspect_ratio scaled granularity;
 if currenttransform=identity: let t_=relax
 else: def t_ = transformed currenttransform enddef fi;
 numeric paren_depth#; .5[body_height#,-paren_depth#]=math_axis#;
 numeric asc_depth#; .5[asc_height#,-asc_depth#]=math_axis#;
 body_depth:=desc_depth+body_height-asc_height;
 shrink_fit:=1+hround(2letter_fit#*hppp)-2letter_fit;
 if not string mode: if mode<=smoke: shrink_fit:=0; fi fi
forsuffixes $=thin_join,hair,curve,flare,dot_size,cap_hair,cap_curve,
 vair,bar,slab,cap_bar,cap_band,stem',cap_stem',vair',fudged.hair,
 fudged.stem,fudged.cap_stem: $:=max($,2); endfor % "WRITE WHITE" ONLY!
 enddef;