[Tex/LaTex] Use non-breaking space after name initials with biblatex macros

biblatexline-breakingspacing

I want to enforce biber/biblatex to place non-breaking spaces between initials and last names of authors. Example:

\documentclass{article}

\usepackage[backend=biber,natbib=true]{biblatex}

\newcommand*{\person}[2]{\citename{#1}[#2]{author}}

\DeclareNameFormat{firstinits-last}{%
  \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{sci}{firstinits-last}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{latour,
    AUTHOR      = {Latour, Bruno},
    OPTIONS     = {dataonly=true}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
Foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar. 
\person{latour}{sci} says about the ``new object'' that emerges\ldots
\end{document}

This produces a line break between B. and Latour:

enter image description here

I have looked at this question, but the suggested code doesn't have any effect here:

\renewcommand*{\mkbibnamefirst}[1]{{\let~\,#1}}
\renewcommand*{\mkbibnamefirst}[1]{{\iffirstinits{\let~\,}{}#1}}

How would I make B. Latour in this example be rendered as B.~Latour (normal non-breaking space)?

Best Answer

There are now a series of different flexible delimiters between the parts of a name (when using Biber). They are \bibnamedelima, to \bibnamedelimd plus \bibnamedelimi and the marker command \revsdnamepunct. Their full use cases are described in the manual: basically, \bibnamedelima/\bibnamedelimb go between first names or between surnames (i.e. for gaps within the same 'part' of the name) while \bibnamedelimc/\bibnamedelimd between the first name(s) and surnames (between 'parts'). \bibnamedelimi goes after initials in the first name part, replacing \bibnamedelima/\bibnamedelimb, when conversion to initials is active. Thus depending on the settings, either \bibnamedelimc or \bibnamedelimd applies in the current case (see the manual): it's just a question of altering the definitions

\documentclass{article}

\usepackage[backend=biber,natbib=true]{biblatex}

\newcommand*{\person}[2]{\citename{#1}[#2]{author}}

\DeclareNameFormat{firstinits-last}{%
  \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{sci}{firstinits-last}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{latour,
    AUTHOR      = {Latour, Bruno},
    OPTIONS     = {dataonly=true}
}
\end{filecontents}
\renewcommand*\bibnamedelimc{\addnbspace}
\renewcommand*\bibnamedelimd{\addnbspace}
\addbibresource{\jobname.bib}

\begin{document}
Foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar. 
\person{latour}{sci} says about the ``new object'' that emerges\ldots
\end{document}

I've altered both setting here, but it's d that applies in the current case.