Re: Stroke Font

Laurent Méhats <[email protected]>
Newsgroups gmane.comp.tex.metapost
Message-ID <[email protected]>
Le 18/05/2015 05:23, Troy Henderson a écrit :
>     Here is an attempt that goes the way you describe.
>
>     Regards,
>     Laurent Méhats
>
>
> I've attached a sample, and I'm having a little trouble applying your
> technique to math.  Attached is the source file(s) and resulting output
> PDF.  As you can see, the fraction line is the only part of the formula
> that is not "traced".  I would appreciate any help on fixing this.
>
> Troy

Here is how you may proceed. It works fine with fractions, not that much 
with square roots. However stroked lines are too long; but if we use 
'pencircle' rather than 'pensquare' with 'linecap' set to 'butt', outlines 
are not complete.

Laurent

--%<-- test.mp
verbatimtex%&latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{arev}
\begin{document}
etex;

vardef init (suffix glp_num, pth_num, glp_pth, stk_num, stk_pth, stk_thk) 
expr pct=
%  pct            btex .. etex material
%  glp_num        number of glyphs within pct
%  pth_num[i]     number of paths defining the rank i glyph
%                   (i ranges from 0 to glp_num-1)
%  glp_pth[i][j]  rank j path of the rank i glyph
%                   (j ranges from 0 pth_num[i]-1)
%  stk_num        number of stroked lines within pct
%  stk_pth[i]     rank i stroked line
%  stk_thk[i]     thickness of the rank i stroked line
%                   (i ranges from 0 to stk_num-1)
string fnt_str, txt_str, sub_str;
numeric txt_wd;
glp_num:=0;
stk_num:=0;
for tkn within pct:
   if textual tkn:
     fnt_str:=fontpart tkn;
     txt_str:=textpart tkn;
     txt_wd:=0;
     for glp_idx=0 upto (length txt_str-1):
       sub_str:=substring (glp_idx, glp_idx+1) of txt_str;
       pth_num[glp_num]:=0;
       for sub_tkn within glyph ASCII sub_str of fnt_str
           scaled (fontsize fnt_str/1000)
           xscaled xxpart tkn
           yscaled yypart tkn
           shifted (txt_wd+xpart tkn, ypart tkn):
         glp_pth[glp_num][pth_num[glp_num]]:=pathpart sub_tkn;
         pth_num[glp_num]:=pth_num[glp_num]+1;
       endfor
       glp_num:=glp_num+1;
       txt_wd:=txt_wd+
         (xxpart tkn)*xpart urcorner (sub_str infont fnt_str);
     endfor
   elseif stroked tkn:
     stk_pth[stk_num]:=pathpart tkn;
     picture pen_pct;
     pen_pct:=nullpicture;
     addto pen_pct doublepath makepath penpart tkn;
     stk_thk[stk_num]:=ypart(urcorner pen_pct-llcorner pen_pct);
     stk_num:=stk_num+1;
   fi
endfor
enddef;

picture pct;     % btex .. etex material
color fll_clr,   % fill color
       bkg_clr,   % background color
       oln_clr;   % outlines color
numeric oln_thk; % outlines thickness

pct:=btex $\displaystyle\int_a^b \!f(x)\,dx \approx 
\frac{b-a}{N}\sum_{n=1}^N 
f\left(a+n\cdot\frac{b-a}{N}\right)\times\frac{\sqrt{123}}{\sqrt{123}}$ 
etex scaled 3;
fll_clr:=green;
bkg_clr:=white;
oln_clr:=red;
oln_thk:=.5;

beginfig(0)
numeric glp_num, pth_num[], stk_num, stk_thk[];
path glp_pth[][], stk_pth[];
init (glp_num, pth_num, glp_pth, stk_num, stk_pth, stk_thk) pct;
% glyphs
for i=0 upto glp_num-1:
   for j=0 upto pth_num[i]-1:
     fill glp_pth[i][j] withcolor
       if turningnumber glp_pth[i][j]=1: fll_clr else: bkg_clr fi;
     draw glp_pth[i][j]
       withpen pencircle scaled oln_thk
       withcolor oln_clr;
   endfor
endfor
% stroked lines
for i=0 upto stk_num-1:
   draw stk_pth[i]
     withpen pensquare scaled (stk_thk[i]+oln_thk)
     withcolor oln_clr;
   draw stk_pth[i]
     withpen pensquare scaled (stk_thk[i]-oln_thk)
     withcolor fll_clr;
endfor
endfig;

end
--%<-- test.mp

--
http://tug.org/metapost/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.