Kerning ignored on some macOS TTC fonts
Hello, I'm trying to set up typescripts for a few classic TTC font collections shipped with macOS (see script below). No problems with: /System/Library/Fonts/Avenir Next Condensed.ttc /System/Library/Fonts/Avenir Next.ttc /System/Library/Fonts/Avenir.ttc /System/Library/Fonts/Supplemental/Charter.ttc /System/Library/Fonts/Supplemental/Futura.ttc /System/Library/Fonts/Supplemental/Seravek.ttc However, the kerning and the standard ligatures aren't picked up by ConTeXt on those: /System/Library/Fonts/Helvetica.ttc /System/Library/Fonts/HelveticaNeue.ttc /System/Library/Fonts/Optima.ttc /System/Library/Fonts/Palatino.ttc /System/Library/Fonts/Times.ttc /System/Library/Fonts/Supplemental/Baskerville.ttc /System/Library/Fonts/Supplemental/Bodoni 72.ttc /System/Library/Fonts/Supplemental/Didot.ttc /System/Library/Fonts/Supplemental/GillSans.ttc /System/Library/Fonts/Supplemental/Hoefler Text.ttc As an example, running mtxrun --script fonts --list --info --file Optima.ttc gives: mtx-fonts | mtx-fonts | mapping : 1 mtx-fonts | fontname : optimaextrablack mtx-fonts | fullname : optimaextrablack mtx-fonts | filename : /System/Library/Fonts/Optima.ttc mtx-fonts | family : optima mtx-fonts | weight : black mtx-fonts | style : normal mtx-fonts | width : normal mtx-fonts | variant : normal mtx-fonts | subfont : 5 fonts | otf loading | loading '/System/Library/Fonts/Optima.ttc', hash 'optima' otf reader | ignoring empty kern table of feature 'kern' fonts | otf loading | loading done fonts | otf loading | saving '/System/Library/Fonts/Optima.ttc' in cache system | lua | compiling '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tma' into '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tmd' system | lua | dumping '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tma' into '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tmd' stripped fonts | otf loading | loading, optimizing, packing and caching time 0.004 mtx-fonts | It seems that ConTeXt cannot find the kern values ("ignoring empty kern table of feature 'kern'"). What I usually do when I encounter kerning issues with older TrueType fonts is to generate new ones with FontForge. It never fails. I wonder though if there is a clean, native ConTeXt solution to this. Testing environment: - LuaMetaTeX 2.11.06 20241230 + ConTeXt LMTX 2024.12.30 (the current version) - macOS Sequoia 15.3. I'm assuming that most TTC files on older Mac systems are identical, given their internal version date. /// \starttypescript [serif] [baskerville] % Baskerville.ttc; version 13.0d1e10; 2017-06-15 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Baskerville.ttc(Baskerville)] [features=default] \definefontsynonym [SerifBold] [file:Baskerville.ttc(Baskerville Bold)] [features=default] \definefontsynonym [SerifItalic] [file:Baskerville.ttc(Baskerville Italic)] [features=default] \definefontsynonym [SerifBoldItalic] [file:Baskerville.ttc(Baskerville Bold Italic)] [features=default] \stoptypescript \starttypescript [serif] [bodoni_72] % Bodoni 72.ttc; version 13.0d2e1; 2017-07-12 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Bodoni 72.ttc(Bodoni 72 Book)] [features=default] \definefontsynonym [SerifBold] [file:Bodoni 72.ttc(Bodoni 72 Bold)] [features=default] \definefontsynonym [SerifItalic] [file:Bodoni 72.ttc(Bodoni 72 Book Italic)] [features=default] % no bold italic \stoptypescript \starttypescript [serif] [charter] % Charter.ttc; version14.0d2e1; 2017-11-28 \usetypescript [serif][fallback] \definefontsynonym [Serif] [name:charterroman] [features=default] \definefontsynonym [SerifBold] [name:charterbold] [features=default] \definefontsynonym [SerifItalic] [name:charteritalic] [features=default] \definefontsynonym [SerifBoldItalic] [name:charterbolditalic] [features=default] \stoptypescript \starttypescript [serif] [didot] % Didot.ttc; version 13.0d1e3; 2017-06-30 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Didot.ttc(Didot)] [features=default] \definefontsynonym [SerifBold] [file:Didot.ttc(Didot Bold)] [features=default] \definefontsynonym [SerifItalic] [file:Didot.ttc(Didot Italic)] [features=default] % no bold italic \stoptypescript \starttypescript [serif] [hoefler_text] % Hoefler Text.ttc; version 14.0d1e2; 2018-01-19 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Hoefler Text.ttc(Hoefler Text)] [features=default] \definefontsynonym [SerifBold] [file:Hoefler Text.ttc(Hoefler Text Black)] [features=default] \definefontsynonym [SerifItalic] [file:Hoefler Text.ttc(Hoefler Text Italic)] [features=default] \definefontsynonym [SerifBoldItalic] [file:Hoefler Text.ttc(Hoefler Text Black Italic)] [features=default] \stoptypescript \starttypescript [serif] [palatino] % Palatino.ttc; version 18.0d1e19; 2021-11-10 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Palatino.ttc(Palatino)] [features=default] \definefontsynonym [SerifBold] [file:Palatino.ttc(Palatino Bold)] [features=default] \definefontsynonym [SerifItalic] [file:Palatino.ttc(Palatino Italic)] [features=default] \definefontsynonym [SerifBoldItalic] [file:Palatino.ttc(Palatino Bold Italic)] [features=default] \stoptypescript \starttypescript [serif] [times] % Times.ttc; version 17.0d1e1; 2021-01-16 \usetypescript [serif][fallback] \definefontsynonym [Serif] [file:Times.ttc(Times Roman)] [features=default] \definefontsynonym [SerifBold] [file:Times.ttc(Times Bold)] [features=default] \definefontsynonym [SerifItalic] [file:Times.ttc(Times Italic)] [features=default] \definefontsynonym [SerifBoldItalic] [file:Times.ttc(Times Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [avenir] % Avenir.ttc; version 13.0d3e1; 2017-06-26 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Avenir.ttc(Avenir Roman)] [features=default] \definefontsynonym [SansBold] [file:Avenir.ttc(Avenir Heavy)] [features=default] \definefontsynonym [SansItalic] [file:Avenir.ttc(Avenir Oblique)] [features=default] \definefontsynonym [SansBoldItalic] [file:Avenir.ttc(Avenir Heavy Oblique)] [features=default] \stoptypescript \starttypescript [sans] [avenir_next] % Avenir Next.ttc; version 13.0d1e10; 2017-06-30 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Avenir Next.ttc(Avenir Next Regular)] [features=default] \definefontsynonym [SansBold] [file:Avenir Next.ttc(Avenir Next Bold)] [features=default] \definefontsynonym [SansItalic] [file:Avenir Next.ttc(Avenir Next Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:Avenir Next.ttc(Avenir Next Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [avenir_next_condensed] % Avenir Next Condensed.ttc; version 13.0d1e10; 2017-06-30 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Avenir Next Condensed.ttc(Avenir Next Condensed Regular)] [features=default] \definefontsynonym [SansBold] [file:Avenir Next Condensed.ttc(Avenir Next Condensed Bold)] [features=default] \definefontsynonym [SansItalic] [file:Avenir Next Condensed.ttc(Avenir Next Condensed Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:Avenir Next Condensed.ttc(Avenir Next Condensed Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [futura] % Futura.ttc; version 16.0d2e1; 2020-07-06 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Futura.ttc(Futura Medium)] [features=default] \definefontsynonym [SansBold] [file:Futura.ttc(Futura Bold)] [features=default] \definefontsynonym [SansItalic] [file:Futura.ttc(Futura Medium Italic)] [features=default] % no bold italic \stoptypescript \starttypescript [sans] [gill_sans] % GillSans.ttc; version 16.0d1e1; 2020-07-06 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:GillSans.ttc(Gill Sans)] [features=default] % kerning only with regular \definefontsynonym [SansBold] [file:GillSans.ttc(Gill Sans Bold)] [features=default] \definefontsynonym [SansItalic] [file:GillSans.ttc(Gill Sans Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:GillSans.ttc(Gill Sans Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [helvetica] % Helvetica.ttc; version 17.0d1e1; 2020-09-21 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Helvetica.ttc(Helvetica)] [features=default] \definefontsynonym [SansBold] [file:Helvetica.ttc(Helvetica Bold)] [features=default] \definefontsynonym [SansItalic] [file:Helvetica.ttc(Helvetica Oblique)] [features=default] \definefontsynonym [SansBoldItalic] [file:Helvetica.ttc(Helvetica Bold Oblique)] [features=default] \stoptypescript \starttypescript [sans] [helvetica_neue] % Helvetica Neue.ttc; version 17.0d2e1; 2021-02-05 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Helvetica Neue.ttc(Helvetica Neue)] [features=default] \definefontsynonym [SansBold] [file:Helvetica Neue.ttc(Helvetica Neue Bold)] [features=default] \definefontsynonym [SansItalic] [file:Helvetica Neue.ttc(Helvetica Neue Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:Helvetica Neue.ttc(Helvetica Neue Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [optima] % Optima.ttc; version 13.0d1e2; 2017-06-15 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Optima.ttc(Optima Regular)] [features=default] \definefontsynonym [SansBold] [file:Optima.ttc(Optima Bold)] [features=default] \definefontsynonym [SansItalic] [file:Optima.ttc(Optima Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:Optima.ttc(Optima Bold Italic)] [features=default] \stoptypescript \starttypescript [sans] [seravek] % Seravek.ttc; version 13.0d3e2; 2017-06-30 \usetypescript [sans][fallback] \definefontsynonym [Sans] [file:Seravek.ttc(Seravek)] [features=default] \definefontsynonym [SansBold] [file:Seravek.ttc(Seravek Bold)] [features=default] \definefontsynonym [SansItalic] [file:Seravek.ttc(Seravek Italic)] [features=default] \definefontsynonym [SansBoldItalic] [file:Seravek.ttc(Seravek Bold Italic)] [features=default] \stoptypescript \definetypeface [baskv] [rm] [serif] [baskerville] [default] \definetypeface [bodon] [rm] [serif] [bodoni_72] [default] \definetypeface [chart] [rm] [serif] [charter] [default] \definetypeface [didot] [rm] [serif] [didot] [default] \definetypeface [hoefl] [rm] [serif] [hoefler_text] [default] \definetypeface [paltn] [rm] [serif] [palatino] [default] \definetypeface [times] [rm] [serif] [times] [default] \definetypeface [avenr] [ss] [sans] [avenir] [default] \definetypeface [avenx] [ss] [sans] [avenir_next] [default] \definetypeface [avnxc] [ss] [sans] [avenir_next_condensed] [default] \definetypeface [futur] [ss] [sans] [futura] [default] \definetypeface [gills] [ss] [sans] [gill_sans] [default] \definetypeface [helvt] [ss] [sans] [helvetica] [default] \definetypeface [helvn] [ss] [sans] [helvetica_neue] [default] \definetypeface [optim] [ss] [sans] [optima] [default] \definetypeface [servk] [ss] [sans] [seravek] [default] \setupbodyfont [10pt] \def\smpl{VO WA LT Vo Va Ty \bgroup\enabletrackers[visualizers.glyph]fi fl\egroup\crlf} \def\test{\tf\ctxlua{tex.print(fonts.hashes.properties[font.current()].fullname)}\crlf\smpl\bf\smpl\it\smpl\bi\smpl\blank} \starttext \enabletrackers[visualizers.fontkern] \startcolumns[n=3,balance=no] \switchtobodyfont[baskv]\test \switchtobodyfont[bodon]\test \switchtobodyfont[chart]\test \switchtobodyfont[didot]\test \switchtobodyfont[hoefl]\test \switchtobodyfont[paltn]\test\column \switchtobodyfont[times]\test \switchtobodyfont[avenr]\test \switchtobodyfont[avenx]\test \switchtobodyfont[avnxc]\test \switchtobodyfont[futur]\test\column \switchtobodyfont[gills]\test \switchtobodyfont[helvt]\test \switchtobodyfont[helvn]\test \switchtobodyfont[optim]\test \switchtobodyfont[servk]\test \stopcolumns \stoptext
Am 03.02.25 um 22:12 schrieb Paul Schalck via ntg-context:
Hello,
I'm trying to set up typescripts for a few classic TTC font collections shipped with macOS (see script below).
No problems with:
/System/Library/Fonts/Avenir Next Condensed.ttc /System/Library/Fonts/Avenir Next.ttc /System/Library/Fonts/Avenir.ttc /System/Library/Fonts/Supplemental/Charter.ttc /System/Library/Fonts/Supplemental/Futura.ttc /System/Library/Fonts/Supplemental/Seravek.ttc
However, the kerning and the standard ligatures aren't picked up by ConTeXt on those:
/System/Library/Fonts/Helvetica.ttc /System/Library/Fonts/HelveticaNeue.ttc /System/Library/Fonts/Optima.ttc /System/Library/Fonts/Palatino.ttc /System/Library/Fonts/Times.ttc /System/Library/Fonts/Supplemental/Baskerville.ttc /System/Library/Fonts/Supplemental/Bodoni 72.ttc /System/Library/Fonts/Supplemental/Didot.ttc /System/Library/Fonts/Supplemental/GillSans.ttc /System/Library/Fonts/Supplemental/Hoefler Text.ttc
As an example, running
mtxrun --script fonts --list --info --file Optima.ttc
gives:
mtx-fonts | mtx-fonts | mapping : 1 mtx-fonts | fontname : optimaextrablack mtx-fonts | fullname : optimaextrablack mtx-fonts | filename : /System/Library/Fonts/Optima.ttc mtx-fonts | family : optima mtx-fonts | weight : black mtx-fonts | style : normal mtx-fonts | width : normal mtx-fonts | variant : normal mtx-fonts | subfont : 5 fonts | otf loading | loading '/System/Library/Fonts/Optima.ttc', hash 'optima' otf reader | ignoring empty kern table of feature 'kern' fonts | otf loading | loading done fonts | otf loading | saving '/System/Library/Fonts/Optima.ttc' in cache system | lua | compiling '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tma' into '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tmd' system | lua | dumping '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tma' into '/Users/benutzer/.local/share/tex/texmf-cache/luametatex-cache/context/5fe67e0bfe781ce0dde776fb1556f32e/fonts/otl/optima.tmd' stripped fonts | otf loading | loading, optimizing, packing and caching time 0.004 mtx-fonts |
It seems that ConTeXt cannot find the kern values ("ignoring empty kern table of feature 'kern'"). What I usually do when I encounter kerning issues with older TrueType fonts is to generate new ones with FontForge. It never fails. I wonder though if there is a clean, native ConTeXt solution to this.
Testing environment: - LuaMetaTeX 2.11.06 20241230 + ConTeXt LMTX 2024.12.30 (the current version) - macOS Sequoia 15.3. I'm assuming that most TTC files on older Mac systems are identical, given their internal version date.
Why do you think these fonts have kern tables at all? I looked at Optima.ttc with Fontforge and can’t find one. Hraban
participants (2)
-
Henning Hraban Ramm
-
Paul Schalck