[Fontinst] Latin Modern fonts: small caps and accents
Lars Hellström
Lars.Hellstrom at residenset.net
Mon May 24 17:41:48 CEST 2010
cfrees at imapmail.org skrev:
> On Mon 24th May, 2010 at 12:19, Lars Hellström seems to have written:
>
[snip]
>> Any idea about what tool produced the AFMs? I can imagine e.g.
>> Fontforge being "smart" enough to know about TeX fontdimens and trying
>> to compute proper values for them, whereas I think the lmodern fonts
>> were generated using a MetaPost-based tool that may well have a
>> separate TFM-generation capability. In that case, the TFMs may
>> actually be closer to the designers' intentions.
>>
> MetaType1 is used to generate the fonts, AFMs etc. Here are the
> relevant parts of the various files.
> --- lmr10.afm ---
> StartFontMetrics 2.0
> Comment Generated by MetaType1 (a MetaPost-based engine)
Curiouser and curiouser. Seems the designers are actively contradicting
themselves, then. This might well be reason for a bug report.
However... the reason the maxheight and acccapheight are different
between AFM and TFM _could_ be that these in the AFM are computed for
the full glyph compement but in the TFM only for the subset of glyphs
which occur in that encoding. Vietnamese letters with double accents
would probably be higher than all glyphs covered by the T1 encoding.
[snip]
> If the TFMs supplied with Latin Modern are a better guide than the
> AFMs - which surely seems correct given the placement of accents in
> typeset documents - what is the best way of (1) determining which
> elements of the AFMs to override;
That ultimately comes down to trial and error, I'm afraid.
> and (2) actually overriding them? I
> was experimenting by manually adjusting the value of xheight for the
> small caps font using an additional metrics file, but I'm not sure
> whether that's a good way to go about things.
> --- change-xheight-sc-shapes.mtx ---
> \relax
> \metrics
> \setint{xheight}{431}
> \endmetrics
> --- lines for fontinst ---
> ...
> \transformfont{lmcsc8ttl10}{\reencodefont{t1-clm}{\fromafm{lmcsc10}}}
> \transformfont{lmr8ttl10}{\reencodefont{t1-clm}{\fromafm{lmr10}}}
> ...
>
> \installfont{clmr8t10}{lmr8ttl10,newlatin}{t1-clm}{T1}{clm}{m}{n}{<9.5-11>}
>
> \installfont{clmcsc8t10}{change-xheight-sc-shapes,lmcsc8ttl10,newlatin}{t1-clm}{T1}{clm}{m}{sc}{}
An easier method to set just the one fontdimen is to use \metrics
inline the \installfont, like so:
\installfont{clmcsc8t10}{%
\metrics \setint{xheight}{431},lmcsc8ttl10,newlatin%
}{t1-clm}{T1}{clm}{m}{sc}{}
To take all fontdimens but nothing else from ec-lmcsc10, a classical
trick would be to go
\installfont{clmcsc8t10}{%
glyphoff,kernoff,ec-lmcsc10,kernon,glyphon,%
lmcsc8ttl10,newlatin%
}{t1-clm}{T1}{clm}{m}{sc}{}
but an alternative can be
\installfont{clmcsc8t10}{%
ec-lmcsc10 encoding txtfdmns,lmcsc8ttl10,newlatin%
}{t1-clm}{T1}{clm}{m}{sc}{}
The idea here is that txtfdmns.etx declares fontdimens but no slots, so
ec-lmcsc10-txtfdmns.mtx will not contain anything which requires glyph
names (which is the case with \setrawglyph and \setkern). All you get
is \setint commands.
> --- end ---
> Given that other dimensions also seem to differ between the AFM and TFM
> files supplied with the fonts - and not just in the case of the small
> caps shaps - I don't know what's important and what isn't (since I am
> long out of my depth here).
Actually, most of them seem to match between AFM comment and supplied
TFM. If the differences are only for max/min type fontdimens, then that
could indeed be use to these maxes and mins being computed over
different sets of glyphs.
Lars Hellström
More information about the fontinst
mailing list