[Fontinst] character depth; maths accents

Lars Hellström Lars.Hellstrom at residenset.net
Mon Aug 9 18:57:03 CEST 2010


Dr. Clea F. Rees skrev:
> I'm trying to generate support files for a new maths font using
> fontinst and I've run into the following problem. I can recreate the
> problem using cmex10 so I don't think it is a font issue but, rather,
> either a fontinst issue or a me issue.
> 
> Suppose I reencode cmex10:
>     ...
>     \transformfont{cmex10-omx}{\reencodefont{omx}{\fromafm{cmex10}}}

Taking cm metrics from AFM files is usually to be asking for trouble: 
glyph names may be off, bounding boxes need not yield the proper 
metrics, and so on. May I however assume that you know this and are 
using \fromafm{cmex10} only because it's what you'd have to do for the 
other font?

>     ...
> and then install as follows:
>     \installfont{cmex7v10}{cmex10-omx,mathex}{omx}{OMX}{cmex}{m}{n}{}
>     ...
> [Note: this will actually trigger many errors but simplifies what's
> happening.]
> Then for certain characters, I will get a very large negative depth

 From what you've written later, I conclude these characters are not 
the delimiter characters (for which it is traditional to have large 
depths)... And I should of course have understood that from the start, 
as the depths of those are normally /positive/ (corresponding to a 
negative y-coordinate of the bottom side of the bbox). Your situation 
is that the depths are /negative/, which corresponds to a positive 
y-coordinate of the bottom side of the bbox, as would indeed be 
expected for a straightforward accent.

> which causes TeX to position maths accents incorrectly. For example an
> excerpt from the vpl file:
> (CHARACTER D 98 (COMMENT hatwide)
>    (CHARWD R 0.555)
>    (CHARHT R 0.744)
>    (CHARDP R -0.562)
>    (MAP
>       (SETCHAR D 98) (COMMENT hatwide)
>       )
>    (NEXTLARGER D 99) (COMMENT hatwider)
>    )
> (CHARACTER D 99 (COMMENT hatwider)
>    (CHARWD R 1.0)
>    (CHARHT R 0.772)
>    (CHARDP R -0.575)
>    (MAP
>       (SETCHAR D 99) (COMMENT hatwider)
>       )
>    (NEXTLARGER D 100) (COMMENT hatwidest)
>    )
> (CHARACTER D 100 (COMMENT hatwidest)
>    (CHARWD R 1.444)
>    (CHARHT R 0.772)
>    (CHARDP R -0.575)
>    (MAP
>       (SETCHAR D 100) (COMMENT hatwidest)
>       )
>    )
> 
> The effect of this is to position the accents on the baseline. But
> unfortunately, TeX expects the accents to be positioned correctly for a
> letter of height x. The upshot is that accents end up in the middle of
> letters.

Well, that's actually a different matter; TeX uses a different method 
for accent placement in math (just stack things in a vbox, with kerns 
to adjust vertical position of accent to letter, but no \baselineskip 
or similar) than in text, and the math method is sensitive to the 
depths of accent characters.

> I see this for maths accents in oml.etx, omx.etx and msbm.etx, at
> least. It doesn't occur for accents in ot1.etx even though these have
> similar-looking bounding box statements in the afm files. For example,
> hatwide, hatwider, hatwidest, tildewide, tildewider, tildewidest and
> vector are definitely affected and probably tie, as well. But caron,
> hat etc. are fine.
> 
> I have been trying to figure this out for a while. Karl Berry pointed
> out the large negative depth I'm seeing in the tfm files for the new
> font as opposed to the absence of such a depth in the tfm for cmex10.
> That prompted me to experiment a little. I don't get the large negative
> depth if I use afm2pl rather than fontinst

This could be a matter of afm2pl not ever making the depth negative, 
but that's just a guess.

> but I'm not sure how to get
> varchar and nextlarger etc. using that method. But I do get the issue
> if I start with cmex10.afm and not just with the new font.
> 
> If anybody can cast any light on this, that would be great. Right now
> I'm working on a work-around but it is not terribly elegant.

Senare skrev Dr. Clea F. Rees:
> A couple of days ago, I noted that fontinst causes problems with the
> placement of maths-specific accents.
> 
> Is this because newlatin.mtx contains this:
> 
> \foreach(accent){grave,acute,circumflex,tilde,dieresis,hungarumlaut,%
>       ring,caron,breve,macron,dotaccent}
>    \ifisglyph{\str{accent}}\then
>       \resetglyph{\str{accent}}
>          \glyph{\str{accent}}{1000}
>          \resetdepth{0}
>       \endresetglyph
>    \Fi
> \endfor(accent)
> 
> but there is no similar code in mathit.mtx (for OML) or mathex.mtx (for
> OMX) and no metrics file at all for MSBM?

Precisely! latin.mtx/newlatin.mtx are used to generate OT1 fonts, which 
would traditionally be the source of "basic" accents in math, so they 
these files had to make them conform to this technical requirement. 
This dates back to fontinst 1.314, 27 January 1994.

 From the list of changes, Alan doesn't seem to have done anything to 
mathex.mtx after fontinst 1.305 (9 January 1994) however, and I've only 
done some bugfixes (back in 2000). Hence it merely seems noone has 
gotten around to fixing this yet! Code contributions are welcome.

A factor that might have been hiding it is that if you "copy" a glyph 
using the idiom

   \setglyph{new}
      \glyph{old}{1000}
   \endsetglyph

then \depth{new} will be \max{\depth{old}}{0}; the same happens if you 
similarly try to adjust the vertical position of the accent. It is only 
  for raw glyphs that you might get a negative depth.

> This isn't a big deal for me because the font I've got puts the accents
> (at least the wide ones) in the wrong place anyway (relative to TeX's
> expectations, at least) - so even if fontinst did the right thing, the
> metrics would still have to be corrected. But I thought it might be
> helpful to add similar code to the metrics files for maths, if anybody
> would be willing to do that.
> 
> Also, I would like to know whether I am aware of the list of maths
> accents. At the moment, I am correcting depth for:
> 
> vector
> tie [not sure whether I should be in this case or not]

I don't think that is used as a math accent, so no, but OTOH it hardly 
hurts.

> hatwide
> hatwider
> hatwidest
> tildewide
> tildewider
> tildewidest
> 
> If anybody could confirm this list is complete (w/ or w/o tie) or tell
> me if I've missed something, I would be very grateful.

I suppose this is the kind of information for which one would consult 
the relevant encoding specifications. Too bad several of those haven't 
been written yet. :-(

Lars Hellström





More information about the fontinst mailing list