Skip to content

Disable default kerning when letterspacing is active#330

Open
peaR-red wants to merge 1 commit into
latex3:mainfrom
peaR-red:peaR-harf
Open

Disable default kerning when letterspacing is active#330
peaR-red wants to merge 1 commit into
latex3:mainfrom
peaR-red:peaR-harf

Conversation

@peaR-red
Copy link
Copy Markdown

This PR adds a check to fonts.readers.harf to bypass GPOS kerning when tracking is active when using HarfBuzz.

@FrankMittelbach
Copy link
Copy Markdown
Member

What exactly is the rationale here? I don't quite see why you want to disable kerning just because you do some light tracking/letter spacing. For example, suppose you have "AV" then even with minimal letter spacing you suddenly get "A V".

@peaR-red
Copy link
Copy Markdown
Author

peaR-red commented May 26, 2026

Consider the MWE, compiled with lualatex:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{lmroman10-regular}

\begin{document}
\setlength{\fboxrule}{0pt}
\newcommand\test[1]{\noindent{\framebox[6em][l]{\ttfamily#1:}} {\addfontfeature{LetterSpace=50, Renderer=#1} DOCUMENTATION}\par}


\test{Base}
\test{Node}
\test{Harfbuzz}
\test{OpenType}
\end{document}

Note that with OpenType and HarfBuzz the "NT" does not comply with LetterSpace.

This effect is not limited to Latin Modern; it is also visible in other fonts.

@Udi-Fogiel
Copy link
Copy Markdown

The difference you see is because of discretionary nodes (harf and node insert different break points). You can get the same thing with mode=node if you manually insert them

\documentclass{article}
\usepackage{fontspec}
\setmainfont{lmroman10-regular}

\begin{document}
\setlength{\fboxrule}{0pt}
\newcommand\test[1]{\hbox{\addfontfeature{LetterSpace=50, Renderer=#1} DOCUMEN\discretionary{-}{-}{T}\discretionary{}{}{}ATION}}

\test{Node}
\end{document}

AFAICT your patch also affect kerning/spacing for harf, which I'm not sure is desirable.

I think the real problem is either discretionary nodes are not handled well in luaotfload-letterspace.lua, or maybe harf should not insert consecutive disc nodes (although I'm not sure if the latter is correct behavior or not).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants