Capitalised prefix in main text with lowercase prefix in bibliography

I'm looking to use the prefixes in a biblatex bibliography. Below are two entries, with my current use shown for [2]. It shows a lowercase prefix in both the bibliography and the text. How can I achieve a lowercase prefix in the bibliography (von Surname) yet have a capitalised prefix in the text (Von Surname)?

My attempts at changing the prefix capitalisation has been through using {V}on Surname (as in 1). However, it also capitalised the prefix in the bibliography and/or removes it in the main text.

\documentclass{article}

\begin{filecontents*}[overwrite]{ref.bib}
@article{abc,
author  = {A Lastname and B von Surname},
title   = {An article title 1},
journal = {Journal of First Articles},
year    = 1999,
pages   = {1-20}
}
@article{def,
author  = {A Lastname and B {V}on Surname},
title   = {An article title 2},
journal = {Journal of Second Articles},
year    = 1999,
pages   = {1-20}
}
\end{filecontents*}

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

\begin{document}

See \citeauthor{abc}\ \cite{abc}.

See \citeauthor{def}\ \cite{def}.

\printbibliography

\end{document}


If there is no native way to achieve this, I'd accept hacking the bibliography in such a way to use a macro prefix (hypothetically, \von{} Surname, that prints von Surname within \printbibliography by Von Surname within \citeauthor{<bibkey>}).

• Do you want a strict citation-bibliography separation here or do you want to use the "Dutch model" where the name prefix is capitalised if it is not preceded by the given name? (Both interpretations would be compatible with the MWE.) Jan 18 at 7:09

Here is a solution that capitalises the "von" when it is placed before the family name in the output if it is not preceded by a given name (initial).

The input should still be B. von Surname as usual. All this can be done by modifying the relevant bibmacros. Indeed, biblatex already has code to capitalise the "von" in case you use a capitalised cite command like \Cite: We only remove the test for capitalisation and capitalise always.

The original definitions of the macros can be found in biblatex.def, the change comes down to replacing

\ifcapital
{\mkbibnameprefix{\MakeCapital{#3}}\isdot}
{\mkbibnameprefix{#3}\isdot}%


with

\mkbibnameprefix{\MakeCapital{#3}}\isdot


in the bibmacros name:family and name:family-given where the family name does not come after the given name. In both cases we only care about the true branch of \ifuseprefix, since otherwise the "von" is grouped with given names and either dropped or put after the family name.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=numeric, useprefix=true]{biblatex}

\renewbibmacro*{name:family}[4]{%
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\mkbibcompletenamefamily{%
\ifdefvoid{#3}
{}
{\mkbibnameprefix{\MakeCapital{#3}}\isdot%
\ifprefchar{}{\bibnamedelimc}}%
\mkbibnamefamily{#1}\isdot}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibcompletenamefamily{%
\mkbibnamefamily{#1}\isdot}}}%

\renewbibmacro*{name:family-given}[4]{%
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\mkbibcompletenamefamilygiven{%
\ifdefvoid{#3}
{}
{\mkbibnameprefix{\MakeCapital{#3}}\isdot
\ifprefchar{}{\bibnamedelimc}}%
\mkbibnamefamily{#1}\isdot
\ifdefvoid{#4}
{}
{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
\ifdefvoid{#2}
{}
{\revsdnamepunct\bibnamedelimd\mkbibnamegiven{#2}\isdot}}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibcompletenamefamilygiven{%
\mkbibnamefamily{#1}\isdot
\ifdefvoid{#4}
{}
{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
\ifboolexpe{%
test {\ifdefvoid{#2}}
and
test {\ifdefvoid{#3}}}
{}
{\revsdnamepunct}%
\ifdefvoid{#2}
{}
{\bibnamedelimd\mkbibnamegiven{#2}\isdot}%
\ifdefvoid{#3}
{}
{\bibnamedelimd\mkbibnameprefix{#3}\isdot}}}}

\begin{filecontents}{\jobname.bib}
@article{abc,
author  = {A. Lastname and B. von Surname},
title   = {An article title 1},
journal = {Journal of First Articles},
year    = 1999,
pages   = {1-20},
}
@incollection{brandt,
author       = {von Brandt, Ahasver and Erich Hoffmann},
editor       = {Ferdinand Seibt},
title        = {Die nordischen Länder von der Mitte des 11.~Jahrhunderts
bis 1448},
date         = 1987,
booktitle    = {Europa im Hoch- und Spätmittelalter},
series       = {Handbuch der europäischen Geschichte},
number       = 2,
publisher    = {Klett-Cotta},
location     = {Stuttgart},
pages        = {884-917},
}
\end{filecontents}

\begin{document}
Lorem \textcite{brandt,abc}

\printbibliography
\end{document}


If you really want to distinguish between citations and the bibliography here, you can use a similar approach but with \AtBeginBibliography.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=numeric, useprefix=true]{biblatex}

\letbibmacro{name:family:normal}{name:family}

\newbibmacro*{name:family:cap}[4]{%
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\mkbibcompletenamefamily{%
\ifdefvoid{#3}
{}
{\mkbibnameprefix{\MakeCapital{#3}}\isdot%
\ifprefchar{}{\bibnamedelimc}}%
\mkbibnamefamily{#1}\isdot}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibcompletenamefamily{%
\mkbibnamefamily{#1}\isdot}}}%

\letbibmacro{name:family-given:normal}{name:family-given}

\newbibmacro*{name:family-given:cap}[4]{%
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\mkbibcompletenamefamilygiven{%
\ifdefvoid{#3}
{}
{\mkbibnameprefix{\MakeCapital{#3}}\isdot
\ifprefchar{}{\bibnamedelimc}}%
\mkbibnamefamily{#1}\isdot
\ifdefvoid{#4}
{}
{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
\ifdefvoid{#2}
{}
{\revsdnamepunct\bibnamedelimd\mkbibnamegiven{#2}\isdot}}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibcompletenamefamilygiven{%
\mkbibnamefamily{#1}\isdot
\ifdefvoid{#4}
{}
{\bibnamedelimd\mkbibnamesuffix{#4}\isdot}%
\ifboolexpe{%
test {\ifdefvoid{#2}}
and
test {\ifdefvoid{#3}}}
{}
{\revsdnamepunct}%
\ifdefvoid{#2}
{}
{\bibnamedelimd\mkbibnamegiven{#2}\isdot}%
\ifdefvoid{#3}
{}
{\bibnamedelimd\mkbibnameprefix{#3}\isdot}}}}

\renewbibmacro{name:family}{\usebibmacro{name:family:cap}}
\renewbibmacro{name:family-given}{\usebibmacro{name:family-given:cap}}

\AtBeginBibliography{%
\renewbibmacro{name:family}{\usebibmacro{name:family:normal}}%
\renewbibmacro{name:family-given}{\usebibmacro{name:family-given:normal}}}

\begin{filecontents}{\jobname.bib}
@article{abc,
author  = {A. Lastname and B. von Surname},
title   = {An article title 1},
journal = {Journal of First Articles},
year    = 1999,
pages   = {1-20},
}
@incollection{brandt,
author       = {von Brandt, Ahasver and Erich Hoffmann},
editor       = {Ferdinand Seibt},
title        = {Die nordischen Länder von der Mitte des 11.~Jahrhunderts
bis 1448},
date         = 1987,
booktitle    = {Europa im Hoch- und Spätmittelalter},
series       = {Handbuch der europäischen Geschichte},
number       = 2,
publisher    = {Klett-Cotta},
location     = {Stuttgart},
pages        = {884-917},
}
\end{filecontents}

\begin{document}
Lorem \textcite{brandt,abc}

\printbibliography
\end{document}


The output is the same in the MWE, but with a different style the output might be different.

Here's an option using a macro for the prefix. It seems you have to use biber's extended name format to do this:

\documentclass{article}
\begin{filecontents}[overwrite]{ref.bib}
@article{def,
author  = {A Lastname and given=B, prefix=\von, prefixi=\vonprefix, family=Surname},
title   = {An article title 2},
journal = {Journal of Second Articles},
year    = 1999,
pages   = {1-20}
}
\end{filecontents}
\usepackage[useprefix = true]{biblatex}