

     Mkt1font and vpl2vpl: programs to generate accented fonts
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

           John D. Smith, University of Cambridge, 1997
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


These two programs address the same requirement using the same basic
algorithms: their aim is to make it easy to create versions of
existing fonts containing whatever accented characters the user may
need, arranged according to whatever encoding he/she may favour.
Mkt1font does this by reading in the two files that define a Type 1
PostScript font and writing out new versions of them; vpl2vpl does
it by reading in the file that defines a TeX virtual font and
writing out a new version of it. In each case information about what
accented characters are required and where they should be located is
supplied by means of a simple definition file, which has the same
format for both programs.

It is common to hear someone say, "I need a font containing
such-and-such special characters," when really they should be
saying, "I need a version of Times/Palatino/New Century Schoolbook
etc. containing the special characters for such-and-such a
language." If we are to take full advantage of computer typesetting
and desktop publishing, we need to be able to choose our fonts on
grounds of aesthetic merit rather than expediency, and to move
towards standardised encodings. These programs should go some way to
making this possible.

Note that most Type 1 PostScript fonts are commercial products
subject to both copyright and licensing restrictions. If the license
for such a font forbids reverse-engineering it, it is presumably
illegal to run mkt1font on it; in any case it would certainly be a
serious breach of copyright to make modified versions of the font
available to third parties. The author of mkt1font will not be held
responsible for any such misuses of the software. (No such legal
problems surround the use of TeX virtual fonts, which merely specify
new ways to use existing fonts.) However, would-be users may wish to
note the existence of a body of high-quality freeware lookalikes for
many of the standard Type 1 fonts: like mkt1font and vpl2vpl, the
Ghostscript fonts developed by URW++ Design and Development
Incorporated are made available under the GNU General Public License
(see the file COPYING), which permits them to be modified and
redistributed provided that certain simple decencies are observed.
These fonts are available from many ftp sites, including those
forming the Comprehensive TeX Archive Network (CTAN), for example
ftp.tex.ac.uk: look for the most recent font archive file in the
directory /tex-archive/support/ghostscript/gnu/fonts.

A detailed specification of the form of the definition file used by
mkt1font and vpl2vpl is given below in the instructions for using
the two programs, but it may be helpful to give a quick idea of its
contents here. Each line of the file contains something similar to
"128 x acute", which is an instruction to create a new character
formed from "x" with an acute accent and located at position 128 in
the character set. Once a new character has been defined in this
way, it "exists" in just the same way as any other character, under
the name "xacute" (or whatever); thus it can even receive further
accents. The two lines

   129   e macron
   130   emacron breve

will create a "long e" and a "long-or-short e" at the positions
specified. (If only the latter is desired, they can both be assigned
the same position in the encoding -- the second will overwrite the
first.) Subscript as well as superscript accents are available. Some
sample definition files are included to give an idea of the format:
note that two of these (CSX.def and Norman.def), used for Indian
language material in Roman script, contain the triple-accented
character "runderdotmacron acute"!

In addition to accented characters proper, both programs can produce
digraphs -- single characters composed of pairs of other characters.
In itself this may seem to be of limited use, since the digraph
should always be indistinguishable from its two constituent
characters printed consecutively. However, some Unicode-style
encodings require that certain character-pairs be treated as
digraphs. In addition, use of a digraph in subsequent definitions
allows an accent to be applied to two characters as a pair: so, for
example,

   131   k h
   131   kh underbar

will produce a character consisting of an underlined "kh" at
position 131.

The algorithms used in both programs take great care to secure the
most attractive results, placing accents centrally over/under their
characters at appropriate heights/depths, varying their position
according to the angle of slant in Italic and similar fonts,
providing new characters with kerning information (which will be
resolutely ignored by most word-processors), and -- in the case of
mkt1font -- giving hinting instructions to improve output on
low-resolution printers. However, users may feel that some
characters need "tweaking". This tends to happen when the part of
the character adjacent to the accent is highly asymmetrical:
subscript accents below "r" may need moving to the left, while
superscript accents above "d" may need moving to the right. It is
relatively easy to modify the output of vpl2vpl to make such
improvements by hand (vpl files are designed to be easy for humans
to read, and vpl2vpl identifies each character with a comment). Type
1 fonts are another matter; mkt1font generates a human-readable and
commented ".dis" file as well as the ".pfb" font file, and it is
possible to make changes to this and rebuild the pfb file with t1asm
(see below), but this is not quite as simple as modifying a TeX
virtual font.

The programs are written in Perl, and have not been tested on
systems other than Unix. (Apart from the #! line at the top, the
only Unix specificities the author is aware of are two references to
"/dev/null" in mkt1font and the general assumption that filenames
can be of any length.) At run time, mkt1font invokes two further
font utilities, t1asm and t1disasm, written by I. Lee Hetherington
and available from CTAN ftp sites: look in the directory
/tex-archive/fonts/utilities/t1utils. If it is intended to use the
fonts output by mkt1font with Adobe Type Manager, it will probably
be necessary to create ".inf" and/or ".pfm" files for them: for this
there is a useful shareware program for MS-DOS called REFONT, which
can be found at http://www.asy.com/sharewr.htm.

Detailed instructions for using the two programs follow. In each
case these instructions can also be seen by typing the name of the
program with a "-h" option.


Mkt1font
~~~~~~~~
Syntax: mkt1font -n fontname -d definition-file -a afm-file -f font-file
           [-s shrink-factor] [-c candrabindu-adjustment] [-b]

Mkt1font creates new Type 1 PostScript fonts based on existing fonts
("input fonts"). In order to do this it makes use of I. Lee
Hetherington's programs t1asm and t1disasm, which must be present on
the system. A successful run will generate an AFM file and a PFB
file, as well as a DIS file containing a disassembled version of the
PFB file (including useful comments). Four options must be specified
on the command line, as follows:

  -n should name the font it is intended to generate. Avoid names
     such as "myfont", as both mkt1font and other programs attempt
     to draw conclusions from the name; better would be something
     like "Utopia_French-BoldItalic". The generated font files will
     also use this for their basename.

  -d should refer to a font definition file. This file (which could
     usefully be named, e.g., "French.def") should consist of lines
     of character definitions, in the form
               "number"   "character"
     or
               "number"   "character"   "accent"
     Here "number" represents the character's position in the new
     encoding and may be expressed in decimal, octal or hex;
     "character" names the character (e.g. "comma", "eight", "A")
     or consists of the word ".notdef" (indicating that the
     specified number's "slot" in the new encoding is to be empty);
     and "accent" optionally names an accent to be placed on the
     character. In addition to the standard accents available in
     PostScript fonts, "underbar" and "underdot" are also available,
     as are "under" versions of all the normal superscript accents
     ("underdieresis", "underring", etc.). The Indian accent
     "candrabindu" may also be specified: it is formed by
     overprinting a breve with a dotaccent. Finally, "overdot" may
     be used as a synonym for "dotaccent".

     If the character named in the "accent" position is not in fact
     a valid accent character, the program interprets the definition
     as a request for a digraph formed from the "character" and the
     "accent". A digraph consisting of, say, "k" and "h" will be
     indistinguishable from the letters "k" and "h" printed
     consecutively, but the digraph "kh" can itself receive accents
     like any other character: see next paragraph.

     A new character (such as "amacron" or "kh") may be freely
     used in the "character" position of a further definition (such
     as "amacron breve" or "kh underbar"). There is no constraint
     on the ordering of definitions within a definition file. The
     definition of "a macron" does not have to precede that of
     "amacron breve": requests for "impossible" characters are
     deferred until their constituents have had a chance to come into
     being.

     "Slots" for which no new definition is given retain the
     definition they have in the input font.

     The definition file may also contain blank lines and comments
     (introduced by "#").

  -a should refer to the AFM (Adobe Font Metrics) file for the input
     font.

  -f should refer to the binary font file (PFB) for the input font.
     (In fact the equivalent ASCII file (PFA) is also acceptable for
     input, but the output font is always in PFB format.)

  -s may optionally give the factor, expressed as a per-thousand
     value, by which normally superscript accents (such as dieresis,
     ring) should be shrunk when they are used as subscript accents
     (such as underdieresis, underring). Values of around 800 may be
     found useful.

  -c may optionally give two comma-separated numerical values to
     adjust the x and y coordinates of the dotaccent placed within a
     breve to form the candrabindu accent.

  -b may optionally be specified to block the use of predefined
     accented characters, forcing mkt1font to define its own
     versions. This may be useful to secure a consistent appearance
     in cases where a font designer does not share mkt1font's views
     on where accents should be placed.

The -h option prints this help.


Vpl2vpl
~~~~~~~
Syntax: vpl2vpl -d definition-file [-s shrink-factor]
           [-c candrabindu-adjustment] [-b] vpl-file

Vpl2vpl creates new TeX virtual fonts based on existing virtual
fonts ("input fonts"). A successful run will read a vpl (Virtual
Property List) file and a definition file, and will generate a new
vpl file on standard output. The input font is assumed to adhere to
the standard TeX encoding for text fonts unless it was created with
the program afm2tfm, in which case it is assumed to conform to the
encoding specified in the file dvips.enc. In either case, the name
of the input font is assumed to be the name of the input file
without its .vpl extension: it must conform to normal TeX
conventions for naming fonts, as vpl2vpl attempts to draw
conclusions from it about the kind of font it is dealing with.

In the case of a non-virtual font (such as the Computer Modern
fonts), use a pl (Property List) file, created with the standard
utility tftopl, as the input file in place of a vpl file; vpl2vpl
will make the necessary changes on the fly.

A typical complete sequence of commands to create a new virtual
font might therefore be
     afm2tfm Times-Roman.afm -t dvips.enc -v ptmr rptmr
     vpl2vpl -d ISO-Latin1.def ptmr.vpl >ptmr_isol1.vpl
     vptovf ptmr_isol1.vpl ptmr_isol1.vf ptmr_isol1.tfm
for a PostScript font, or
     tftopl cmr10.tfm cmr10.pl
     vpl2vpl -d ISO-Latin1.def cmr10.pl >cmr10_isol1.vpl
     vptovf cmr10_isol1.vpl cmr10_isol1.vf cmr10_isol1.tfm
for a Computer Modern font.

In order to keep the whole upper half of the character set free for
the requirements of the encoding specified in the definition file,
certain modifications are made to input fonts following the
dvips.enc encoding to bring them into greater conformity with the
TeX norm. In particular, the characters dotaccent and hungarumlaut
are placed in the positions assigned by TeX ("5F, "7D), not those
enforced by dvips.enc ("C7, "CD). The f-ligatures, double quotes and
dashes are also moved from the upper half of the character set to
their normal TeX positions. As a result, the following characters
are not found in the lower half of the character set: quotesingle,
quotedbl, backslash, underscore, braceleft, bar, braceright. These
characters can, however, be assigned positions in the output font if
they are needed. (Indeed, they could all be explicitly restored to
their dvips.enc positions if this were desired.)

Options:

  -d should refer to a font definition file. This file (which could
     usefully be named, e.g., "French.def") should consist of lines
     of character definitions, in the form
               "number"   "character"
     or
               "number"   "character"   "accent"

     Here "number" represents the character's position in the new
     encoding and may be expressed in decimal, octal or hex;
     "character" names the character (e.g. "comma", "eight", "A") or
     consists of the word ".notdef" (indicating that the specified
     number's "slot" in the new encoding is to be empty); and
     "accent" optionally names an accent to be placed on the
     character. In addition to the standard accents available in
     PostScript fonts, "underbar" and "underdot" are also available,
     as are "under" versions of all the normal superscript accents
     ("underdieresis", "underring", etc.). The Indian accent
     "candrabindu" may also be specified: it is formed by
     overprinting a breve with a dotaccent. Finally, "overdot" may
     be used as a synonym for "dotaccent".

     If the character named in the "accent" position is not in fact
     a valid accent character, the program interprets the definition
     as a request for a digraph formed from the "character" and the
     "accent". A digraph consisting of, say, "k" and "h" will be
     indistinguishable from the letters "k" and "h" printed
     consecutively, but the digraph "kh" can itself receive accents
     like any other character: see next paragraph.

     A new character (such as "amacron" or "kh") may be freely
     used in the "character" position of a further definition (such
     as "amacron breve" or "kh underbar"). There is no constraint
     on the ordering of definitions within a definition file. The
     definition of "a macron" does not have to precede that of
     "amacron breve": requests for "impossible" characters are
     deferred until their constituents have had a chance to come into
     being.

     "Slots" for which no new definition is given retain the
     definition they have in the input font.

     The definition file may also contain blank lines and comments
     (introduced by "#").

  -s may optionally give the factor, expressed as a per-thousand
     value, by which normally superscript accents (such as dieresis,
     ring) should be shrunk when they are used as subscript accents
     (such as underdieresis, underring). Values of around 800 may be
     found useful.

  -c may optionally give two comma-separated numerical values to
     adjust the x and y coordinates of the dotaccent placed within a
     breve to form the candrabindu accent. A coordinate scheme using
     "DESIGNUNITS R 1000" is assumed.

  -b may optionally be specified to block the use of predefined
     accented characters, forcing vpl2vpl to define its own
     versions. This may be useful to secure a consistent appearance
     in cases where a font designer does not share vpl2vpl's views
     on where accents should be placed.

  -h prints this help.


John D. Smith                        jds10@cam.ac.uk
University of Cambridge              http://bombay.oriental.cam.ac.uk
