I have found that there is an ugly "collision" of the glyph for "j" right after an opening parenthesis glyph. This does not happen with "J" when typeset "regularly", but it does, and it is much worse than with "j", when typesetting proceeds through BibLaTeX. Please, compile the MWE below to see what I mean.

How can these flaws (they are so to me) be systematically, or "programmatically", corrected?

\documentclass{memoir}

\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\usepackage{Baskervaldx}


\begin{filecontents*}{biblio.bib}
  @Book{John,
    author = { John },
    title = {A Title},
  }
\end{filecontents*}

\addbibresource{biblio.bib}

\begin{document}
(j) (J) against \autocite{John}
\end{document}
  • 4
    The font defines ( and J as a kerning pair (with a kern of 1.62pt); but, between ( and J in the \autocite part, the two characters are separated by a whatsit (a \write command), so the implicit kern is not applied. In my opinion, the \write should be before the (. – egreg Jul 6 '17 at 22:50
  • 1
    Not related, but the package name is Baskervaldx.sty and on case sensitive systems your example will not run. – egreg Jul 6 '17 at 22:51
  • 3
    That seems a bug in biblatex. The other problem is that the font doesn't define ( and j as a kerning pair (it should). – egreg Jul 6 '17 at 22:59
  • 5
    github.com/plk/biblatex/issues/598 – egreg Jul 6 '17 at 23:07
  • 2
    @Marcos You can check the kerning table for the opentype or truetype font in FontForge or similar. The reason I say this is because sometimes some kerning pairs have to be discarded during the conversion process. This can't be avoided and the conversion tools generally do it automatically. In this case, the conversion tells you it has discarded them, but since you cannot keep all of them, you are stuck with the reduction. – cfr Jul 7 '17 at 2:08
up vote 3 down vote accepted

Unfortunately, the reasons for this are so deeply rooted in the ways biblatex works and TeX applies kerning that I don't see a way to solve this and similar problems properly.

As egreg points out in the comments the kerning between ( and J defined in the font is not applied here.

Kerning and ligatures are not only inhibited by \writes (which biblatex needs to make use of at times), but also by even very simple grouping and assignments, as demonstrated in

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{Baskervaldx}

\begin{document}
\makeatletter
f\immediate\write\@auxout{}i\ (\immediate\write\@auxout{}J\ 
\makeatother
%
f\def\foo{bar}i\ (\def\foo{bar}J\ 
%
f\begingroup i\endgroup\ (\begingroup J\endgroup\ 
%
f\bgroup i\egroup\ (\bgroup J\egroup\ 
%
fi\ (J
\end{document}

enter image description here

This was also discussed in egreg's bug report at https://github.com/plk/biblatex/issues/598

I see no way to get rid of all of these kerning-critical infrastructure in biblatex while preserving its functionality short of a complete rewrite.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.