Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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

share|improve this question

1 Answer 1

up vote 8 down vote accepted

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.

share|improve this answer
    
You could use \renewcommand*\bibnamedelimd{~}: I've chosen to stick with the biblatex 'official' approach. –  Joseph Wright Aug 13 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 at 15:16
    
Thanks for all these suggestions! –  Emit Taste Aug 13 at 16:25

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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