[tex-live] How to use MFTOEPS? (noob)

Reinhard Kotucha reinhard.kotucha at web.de
Thu Mar 15 02:28:30 CET 2012


On 2012-03-14 at 23:24:09 +0100, Zdenek Wagner wrote:

 > 2012/3/14 Reinhard Kotucha <reinhard.kotucha at web.de>:
 > > On 2012-03-14 at 16:47:59 +0200, Khaled Hosny wrote:
 > >
 > > > On Wed, Mar 14, 2012 at 05:01:05PM +0530, Shriramana Sharma wrote:
 > > > > 2012/3/14 Zdenek Wagner <zdenek.wagner at gmail.com>:

 > > > > > First, although I appreciate Anshu's work, I do not think
 > > > > > that this is the right tool for producing fonts.
 > > > >
 > > > > Meta*Font* is not the right tool to produce fonts?!
 > > >
 > > > Yes. MataFont produces bitmaps (and IIAC, often optimised to the target
 > > > output device), in this time and age you need scalable outlines that
 > > > would be rasterised on the target device. MataFont as a language might
 > > > still superior for meta design, and then a MetaPost-based solution would
 > > > be the logical choice (e.g. the Latin Modern fonts).
 > >
 > > The Latin Modern fonts were created with MetaType1.  I suppose that they
 > > were created from the Metafont sources but I don't know anything about
 > > the Metafont => MetaPost conversion.  Maybe there are a few things you
 > > have to be aware of before you begin drawing the glyphs.
 > >
 > What is needed nowadays is an outline font, not arbitrary
 > postscript description of glyphs. You can create vector fonts with
 > strokes but they are allowed only in Type3 fonts that have certain
 > limitation, for instance they cannot be hinted. That's why outline
 > fonts are required.

But MetaType1 does *not* create arbitrary Type3 fonts.  It creates
outlines suitable for Type1 fonts.  It actually *creates* high quality
hinted Type1 fonts.

 > Metafont takes the vector description but works with bitmaps. If
 > you want to convert an old font, it is a (not very good) choice. It
 > is definitely not a good tool for designing outline fonts from
 > scratch.  The bitmap can be converted to an outline by several
 > tools, eg by mftrace which is a python script that calls metafont
 > in order to obtain a bitmap at very high resolution, vectorizes it
 > by potrace and finally has the font autohinted by fontforge. Since
 > the outline is obtained by vectorizin a bitmap, the straight lines
 > are not straight but curved and thence difficult to be properly
 > autohinted. Experts as Karel Piska can look at all these artifacts
 > created by vectorizing the bitmap and can tell you what tools were
 > used in the vectorization process. (Many years ago Velthuis
 > Devanagari fonts were converted to PFB this way and the result was
 > really ugly.) The right way is to use a proper tool capable of the
 > creation of the outlines directly from the mathematical description
 > without the bitmap step. 

Yes, tracing bitmaps is problematic, especially because potrace isn't
designed for tracing glyphs.  A dedicated program could determine
extremas first and make sure that these coordinates are always end
points of bezier curves.  On the other hand, Tigran Aivazian once
converted a Hebrew font written by Yannis Haralambous in Metafont to
Type1.  He used Peter Szabo's textrace program and the result was
incredibly good.  I'm still quite amazed.

But I'm not talking about deriving outlines from bitmaps.  Here is the
example I mentioned in my previous mail.  The MataPost code for the
'+'-sign is:

  encode ("cross") (1); introduce "cross" (store+utilize) (0) ();
  beginglyph("cross");
    save pa, pb, r;
    path pa, pb;
    pa=unitsquare xscaled band yscaled size shifted -1/2(band,size);;
    pb=unitsquare yscaled band xscaled size shifted -1/2(size,band);;
    find_outlines(pa,pb) (r);
    Fill r1;
    fix_hstem(band,r1); fix_vstem(band,r1);
    fix_hsbw(size,0,0);
    fix_hsbw(0,0,0);
  endglyph;


Please note that pa and pb are two overlapping rectangles, and
MetaPost usually creates two overlapping rectangles in its PostScript
output, not suitable for creating Type1 fonts.

MetaType1, however, provides the function find_outlines(), which
creates exactly what's needed, namely a single path:

  %!PS
  %%BoundingBox: -500 -500 500 500 
  %%HiResBoundingBox: -500 -500 500 500 
  %%Creator: MetaPost 0.993
  %%CreationDate: 2007.02.12:2129
  %%Pages: 1
  %%BeginProlog
  %%EndProlog
  %%Page: 1 1
  %GLYNFO: NAME cross 1
  %GLYNFO: HSBW * 0
  %GLYNFO: HINT-TRIPLE 1 1
  %GLYNFO: HINT-FLEX 0 0
  %GLYNFO: VHINT -50 100
  %GLYNFO: HHINT -50 100
  %GLYNFO: BEGINCHAR
   0 0 0 setrgbcolor
  newpath 500 -50 moveto
  500 50 lineto
  50 50 lineto
  50 500 lineto
  -50 500 lineto
  -50 50 lineto
  -500 50 lineto
  -500 -50 lineto
  -50 -50 lineto
  -50 -500 lineto
  50 -500 lineto
  50 -50 lineto
   closepath fill
  showpage
  %%EOF
  
And finally it creates a valid Type1 font:

/cross {
	-500 0 hsbw
	-50 100 hstem
	450 100 vstem
	1000 -50 rmoveto
	100 vlineto
	-450 hlineto
	450 vlineto
	-100 hlineto
	-450 vlineto
	-450 hlineto
	-100 vlineto
	450 hlineto
	-450 vlineto
	100 hlineto
	450 vlineto
	closepath
	endchar
	} ND


As you can see, though MetaType1 is based on MetaPost, it does much
more than MetaPost itself.  There is only one instance of closepath.
And please note the hstem and vstem operators.  No need to use
FontForge in order to add hints.

If MetaType1 can create outlines from more or less arbitrary MetaPost
code, I'm sure that it understands Metafont code as well.

 > As I wrote in my previous mail, you cannot use the cull operator,
 > it works with bitmaps and therefore is not available in metapost.

This is why I said that there are probably things you should better be
aware of in advance.  But I'm convinced that Jacko provided reasonable
solutions for most problems.

BTW, don't worry about negative coordinates and zero width glyphs in
the example above.  This was done deliberately and is not a fault of
MetaType1.  The glyphs were supposed to be used as plot markers.
Therefore they are centered at the origin and claim that their size is
zero.  MetaType1 creates fonts with correct metrics by default.

I'm sure that MetaType1 is exactly what Shriramana is looking for.

Regards,
  Reinhard


 > > I only created a very simple symbol font a few years ago.  In order to
 > > create a '+'-sign, for instance, I had to draw two lines with a
 > > particular width and MetaType1/MetaPost determined all intersection
 > > points and finally created a single contour in Postscript.  MetaType1
 > > also converts the intermediate EPS files to a valid Type1 font.
 > >
 > > IMO MetaType1 is the best choice if you don't want to draw the
 > > outlines directly.  You can download MetaType1 from CTAN.  Though the
 > > author is using Windows, it works on Linux almost out of the box.
 > > Only one or two minor adaptions were necessary.  I don't remember the
 > > details but I vaguely remember it was related to different filename
 > > conventions on Unix/Windows or something similar.  Just start the
 > > script and see where it complains.
 > >
 > > Shriramana, you first asked on the MetaPost mailing list.  This is the
 > > most appropriate place and the author of MetaType1, Bogusław Jackowski,
 > > is also listening there, although he isn't reading mails every day.
 > > [...]

-- 
----------------------------------------------------------------------------
Reinhard Kotucha                                      Phone: +49-511-3373112
Marschnerstr. 25
D-30167 Hannover                              mailto:reinhard.kotucha at web.de
----------------------------------------------------------------------------
Microsoft isn't the answer. Microsoft is the question, and the answer is NO.
----------------------------------------------------------------------------



More information about the tex-live mailing list