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