unwanted (i.e. wrong) kern pairs introduced

Lars Hellström Lars.Hellstrom@math.umu.se
Tue, 15 May 2001 13:52:37 +0200


At 07.45 +0200 2001-05-15, Richard Walker wrote:
>I want a set of fonts with old-style digits, so I did this:
>
>tex xfntinst.sty
>\def\SlantAmount{212}
>\latinfamily{fpaj}{}\bye
>
>Well, that works a treat.  BUT I noticed that some of the kerning is
>just plain wrong.  On further investigation I found that the 9d fonts
>(i.e. what actually gets used when you ask for the font in LaTeX)
>contain many extra kerning pairs (e.g. T+h, t+period) that shouldn't
>be there.
>
>The log file says, for instance:
>INFO> run \installfont
><fpar9d><fpar8r,unsetnum,fparc8r,resetosf,>latin><T1j><T1><fpaj><m><n>
>
>So for this font, it is getting the kern pairs first from the correct
>base font, but it's adding the kern pairs from the small caps font!
>So in the case of T+h the kerning used is actually what would be
>between a T and a small caps h.

I think you've identified the problem.

>The small caps AFM files use names such as `A' and `a' (i.e. not `A'
>and `Asmall'), but the small caps fonts seem to turn out all right
>anyway.  I tried changing them to use the `Asmall'-type names
>(including changing the kerning tables), but this doesn't seem to work
>(fontinst isn't happy).

This happens for the sc shape fonts, I suspect. With the set of fonts that
are available, \latinfamily expects the glyphs to be "incorrectly" named in
the c-variant fonts.

>What can be done?

Lots of things, but I can't say what you would find most useful. Some
options include:

1. Circumvent \latinfamily altogether: Extract all the INFO> lines from the
log file and make a command file that uses the \installfont interface to
fontinst instead, then edit that to get rid of the kerns. In particular,
you might want to change the above \installfont to

\installfont{fpar9d}%
  {fpar8r,unsetnum,kernoff,fparc8r,kernon,resetosf,latin}{T1j}%
  {T1}{fpaj}{m}{n}{}

The kernoff and kernon will make \setkern a noop during the time fparc8r is
read.

2. Hack the above into \latinfamily directly. The relevant macro is
\latin_encoding (or so I think) and the thing you probably want to change
is the  defintion found there of \oldstyle_font.

3. Cheat. Use \reglyphfont (as has been described previously on this list)
to make fake 8x (expert encoding) fonts from the c8r fonts you've got, and
then use \latinfamily. This will probably not get rid of the extra kerns if
you use xfntinst.sty (this is most likely a bug in \latin_encoding), but it
might do the trick if you use fntinst.sty.

Lars Hellström