Date: Fri, 7 Aug 87 10:19:38 EST
From: crl@maxwell.physics.purdue.edu (Charles R. LaBrec)
To: TEXHAX@score.stanford.edu
Subject: Mode definitions for LN03 and LN03+
I have recently been playing with metafont for an LN03, and have come
up with something that seem to produce acceptable output, but is by no
means "completely" tested. The problem with the write-white LN03 is
that you cannot use a one-pixel wide line ever, since it becomes far,
far too light. This is why my previous version of the LN03 mode used
a "blacker" parameter that was very big. From metafont 1.3, I started
using the write-white cmbase, but even this didn't provide a wide
enough line in various places. It was really obvious for things that
used only the light_rule.nib pen. This fact made me notice that even
though all sorts of parameters were set to a minimum of two, the pens
that were saved could have widths of one. I thus decided to try to
modify cmbase further, setting minimum pencircle widths of two. I
enclose the decln mode I've used, along with a diff of the write-white
version of cmbase.mf. I am VERY interested in comments/suggestions as
to whether everyone thinks this solution is valid/produces good
output. If so, then perhaps metafont should get a new mode parameter
which is the minimum pen{circle/square} scaling, so that such things
could be more easily handled in base files.
Charles LaBrec
crl @ maxwell.physics.purdue.edu
% decln mode: for the DEC LN03 (Ricoh engine, a write-white device)
mode_def decln = % decln mode
proofing:=0; % no, we're not making proofs
fontmaking:=1; % yes, we are making a font
tracingtitles:=0; % no, don't show titles in the log
pixels_per_inch:=300;
blacker:=0.2; % make pens a bit blacker
fillin:=-0.2; % darken diagonals a bit
o_correction:=0.5; % don't overshoot as much
enddef;
*** /tmp/,RCSt1007354 Fri Aug 7 09:53:44 1987
--- cmbase.mf Fri Aug 7 09:52:44 1987
***************
*** 385,391
penlabels(1,2,3,4,5,6,7); enddef;
def left_angle(expr breadth) =
! pickup pencircle scaled breadth;
x1=x3=good.x(w-u)+eps; lft x2=hround u-eps;
top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
draw z1--z2--z3; % diagonals
--- 385,391 -----
penlabels(1,2,3,4,5,6,7); enddef;
def left_angle(expr breadth) =
! pickup pencircle scaled max(breadth,2); % WRITE WHITE
x1=x3=good.x(w-u)+eps; lft x2=hround u-eps;
top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
draw z1--z2--z3; % diagonals
***************
*** 392,398
labels(1,2,3); enddef;
def right_angle(expr breadth) =
! pickup pencircle scaled breadth;
x1=x3=good.x u-eps; rt x2=hround(w-u)+eps;
top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
draw z1--z2--z3; % diagonals
--- 392,398 -----
labels(1,2,3); enddef;
def right_angle(expr breadth) =
! pickup pencircle scaled max(breadth,2); % WRITE WHITE
x1=x3=good.x u-eps; rt x2=hround(w-u)+eps;
top y1=h+eps; .5[y1,y3]=y2=good.y .5[-d+eps,h];
draw z1--z2--z3; % diagonals
***************
*** 399,405
labels(1,2,3); enddef;
def big_slash(expr breadth) =
! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
rt x1=hround(w-u); lft x2=hround u; top y1=h+eps; bot y2=1-d-eps;
draw z1--z2; % diagonal
labels(1,2); enddef;
--- 399,405 -----
labels(1,2,3); enddef;
def big_slash(expr breadth) =
! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled max(breadth,2); % WRITE WHITE
rt x1=hround(w-u); lft x2=hround u; top y1=h+eps; bot y2=1-d-eps;
draw z1--z2; % diagonal
labels(1,2); enddef;
***************
*** 405,411
labels(1,2); enddef;
def big_blash(expr breadth) =
! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled breadth;
lft x1=hround u; rt x2=hround(w-u); top y1=h+eps; bot y2=1-d-eps;
draw z1--z2; % diagonal
labels(1,2); enddef;
--- 405,411 -----
labels(1,2); enddef;
def big_blash(expr breadth) =
! adjust_fit(-letter_fit#,-letter_fit#); pickup pencircle scaled max(breadth,2); % WRITE WHITE
lft x1=hround u; rt x2=hround(w-u); top y1=h+eps; bot y2=1-d-eps;
draw z1--z2; % diagonal
labels(1,2); enddef;
***************
*** 536,541
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]:=$;
--- 536,542 -----
forsuffixes $=fine,crisp,tiny:
%%% fine $ %%%% temporary formatting convention for MFT
if $>fudged.hair: $:=fudged.hair; fi
+ if $>0: $:=max($,2); fi % WRITE WHITE
$.breadth:=$;
pickup if $=0: nullpen else: pencircle scaled $; $:=$-eps fi;
$.nib:=savepen; breadth_[$.nib]:=$;
***************
*** 546,551
if flare