[Tex/LaTex] Why doesn’t TeX have hkern and vkern

tex-core

We have \hskip, \vskip, and \mskip, but only \kern and \mkern. Why doesn't TeX distinguish between horizontal and vertical kerns like it does for skips?

Best Answer

There is no annotation in errorlog.tex about the introduction of \kern, but a note of 1978-03-27 says

S227. Represent italic corrections as boxes, not glue, so that they won't be broken.
        [The |\kern| command doesn't exist yet.] @1113

So this is possibly where the idea of \kern started to arise and it also can explain why there is no distinction between vertical and horizontal kerns: they have the same properties of boxes (so they behave differently in horizontal and vertical mode) plus the ability to disappear at line/page breaks.

While users want to know or to specify what kind of glue (skip) is appended to what list, programmers should know why they're adding a kern and it makes little sense to say \vkern at some point: vertical kerns are things to be added as final touches. On the other hand, saying \vskip 1pc (or whatever) means “leave a vertical space” and must end a paragraph.

Note also that two primitives instead of one would increase the size of the program and there's at least another example of a primitive with a dual function, namely \span.

And as far as implementation is concerned, \kern appends a kern item to the current list, so it's not important to know what kind of list it's being built.

Related Question