13

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)?

11

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.

  • You could use \renewcommand*\bibnamedelimd{~}: I've chosen to stick with the biblatex 'official' approach. – Joseph Wright Aug 13 '14 at 15:12
  • 1
    You might consider \renewcommand*\bibnamedelimd{\addhighpenspace}, which makes it harder to break here but not impossible (depending on the real case, it can be tricky to avoid all breaks in names, especially in the bibliography). – Joseph Wright Aug 13 '14 at 15:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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