On 12/23/2019 18:45, Rik Kabel wrote: > > On 12/22/2019 21:34, Henri Menke wrote: >> >> >> On 12/23/19 3:33 PM, Henri Menke wrote: >>> On 12/23/19 2:30 PM, Rik Kabel wrote: >>>> >>>> On 12/22/2019 17:40, mf wrote: >>>>> Il 22/12/19 22:19, Rik Kabel ha scritto: >>>>>> List, >>>>>> >>>>>> Is there a way in ConTeXt to adjust the left-side kern for one >>>>>> character? The cap J in the font I am using is being set too >>>>>> close to >>>>>> the preceding characters and I would rather not insert a thinspace >>>>>> before each. (Inserting a thinspace is sufficient, but finer control >>>>>> is welcome.) >>>>>> >>>>> \definecharacterspacing[distantJ] >>>>> \setupcharacterspacing[distantJ]["004A][left=.15,alternative=1] % >>>>> 004A >>>>> is the unicode hex index of letter J >>>>> \starttext >>>>>     normal: AJB\par >>>>>     \setcharacterspacing[distantJ] more space on the left: AJB\par >>>>>     \resetcharacterspacing normal again: AJB\par >>>>> \stoptext >>>>> >>>> Thank you for that, Massi. >>>> >>>> Unfortunately, that is too blunt an instrument in this case -- in >>>> addition to the body font where the problem exists, it works on the >>>> heading and titling font, which does not share the problem. >>>> >>>> As Henri's answer hints, I was a bit unclear in my request. It is a >>>> kern >>>> between a word space and the cap J that is the issue. Perhaps a font >>>> feature file is the place to do such a thing. >>> >>> \startluacode >>> fonts.handlers.otf.addfeature { >>>       name = "kern", >>>       type = "kern", >>>       data = { >>>           [" "] = { >>>               ["J"] = 1000 % exaggerated value >> >> Should of course be a Lua comment >> >>             ["J"] = 1000 -- exaggerated value >> >>>           } >>>       } >>> } >>> \stopluacode >>> >>> \setupbodyfont[modern] % have to reload the font >>> >>> \starttext >>> >>> No Jokes! >>> >>> \stoptext >>> > Henri, > > This looks very promising. It works, mostly. That is, all fonts that > use default fontfeatures pick up the change. So, for example, the > companion sansserif for my body font also gets it even though that is > not what I want. > > I can remove kerning from the default fontfeatures and add it back > just for the problematic font, but that means no kerning for the sans > font. > > Is there a way to apply this to one font only (serif upright, bold, > italic, ...) or even a single face (upright), perhaps by giving it a > unique name? I have tried a few variations but had no success. The > fonts-mkiv manual has very little on this, and the cld manual nothing. > Okay, I have progressed further but have run into something (else) I cannot understand. Consider the following example: \definefontfeature [myserif] [mode=node,kern=yes,xkern=yes] \definefontfeature [mysans] [mode=node,kern=yes,xkern=no] \definefontfeature [none] [mode=node] \definefontfamily [mykerns] [serif] [Baskervaldx] [features=myserif] \definefontfamily [mykerns] [sans] [Dejavusans] [features=mysans] \definefontfamily [default] [serif] [Baskervaldx] [features=default] \definefontfamily [default] [sans] [Dejavusans] [features=default] \definefontfamily [nokerns] [serif] [Baskervaldx] [features=none] \definefontfamily [nokerns] [sans] [Dejavusans] [features=none] \definefontfamily [legends] [mono] [Dejavusansmono] [features=default] \startluacode fonts.handlers.otf.addfeature { name = "kern", type = "kern", data = { ["x"] = { ["x"] = -300 }, [" "] = { ["A"] = 1000 } } } fonts.handlers.otf.addfeature { name = "xkern", type = "kern", data = { ["x"] = { ["x"] = 500 }, [" "] = { ["J"] = 500 } } } \stopluacode \startbuffer[Sample] g, Jaxxb AJon \stopbuffer \define[2]\Test{ {\switchtobodyfont[#1]#2\getbuffer[Sample]}} \setupbodyfont[legends] \starttext \starttabulate[|l|l|l|] \NC test \NC Serif \NC Sans \NC \NR \NC nokerns \NC \Test{nokerns}{\tf} \NC \Test{nokerns}{\ss} \NC \NR \NC default \NC \Test{default}{\tf} \NC \Test{default}{\ss} \NC \NR \NC mykerns \NC \Test{mykerns}{\tf} \NC \Test{mykerns}{\ss} \NC \NR \stoptabulate \stoptext It shows, as far as I see, that the kern feature type supports " ", but only when it is named kern. When it is named xkern, as here, it does not support spaces, but does support other characters. If I can get support for a separate feature name, I can easily apply this corrective kern to the single problematic font. I also tried a goodie file, but it, too, did not support the " ". -- Rik