# how to modify the biblatex 'useprefix' option

In supplying an answer to this question: Preserve lowercase in bibtex I discovered that the way biblatex handles name prefixes is a bit odd, since it appears to be "all or nothing".

Update This question has been modified from the original to further clarify the problem.

From the biblatex manual:

useprefix=true, false default: false

Whether the name prefix (von, van, of, da, de, della, etc.) is considered when printing the last name in citations. This also affects the sorting and formatting of the bibliography as well as the generation of certain types of labels. If this option is enabled, biblatex always precedes the last name with the prefix. For example, Ludwig van Beethoven would be cited as “Beethoven” and alphabetized as “Beethoven, Ludwig van” by default. If this option is enabled, he is cited as “van Beethoven” and alphabetized as “Van Beethoven, Ludwig” instead. With Biber, this option is also settable on a per-type basis.

In a very similar question: How can I have the prefix to a name in the citations but NOT the bibliography, lockstep proposes a solution whereby the use of the prefix is turned on at the beginning of the document (and thereby used with in text citations) but turned off at the beginning of the bibliography (and thereby not used in the sorting of the bibliography.)

Here's an example:

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
% Use useprefix=false to ignore name prefixes
\usepackage[style=authoryear,backend=biber,useprefix=false]{biblatex}
\usepackage{ifpdf}
\makeatletter
\AtBeginDocument{\toggletrue{blx@useprefix}}
\AtBeginBibliography{\togglefalse{blx@useprefix}}
\makeatother
\begin{filecontents}{\jobname.bib}
@book{Saussure1995,
Author = {Ferdinand de Saussure},
Origyear = {1916},
Publisher = {Payot},
Title = {Cours de Linguistique G{\'e}n{\'e}rale},
Year = {1995}}

@book{Labov1972,
Author = {William Labov},
Publisher = {University of Pennsylvania Press},
Title = {Sociolinguistic Patterns},
Year = {1972}}

\end{filecontents}
\begin{document}
The relation between the the sign and the signified is arbitrary \autocite{Saussure1995,Labov1972}.

Language change is driven by language variation. \autocite{Labov1972}.

\printbibliography

\end{document}


This correctly yields "de Saussure" in the in text citations and "Saussure, Ferdinand de" in the bibliography, but it still has one side effect. In a list of citations, because useprefix is set to true, the in text citation yields "(de Saussure 1995; Labov 1972)" instead of "(Labov 1972; de Saussure 1995)".

So here's the question:

How can we make biblatex use the prefix in citations, not use the prefix in the bibliography, and sort lists of in text citations correctly so that we get "de Saussure" in the citation lists to sort with S rather than D?

This is a generic problem for any authoryear or author style, so I've created a new question to reflect that, and added both the and the tags.

-
@lockstep: It isn't the same -- the output of the prefix is in front of the first name. –  Marco Daniel Oct 2 '11 at 19:16
Is "Saussure, de F." the desired bibiliography formatting? –  lockstep Oct 2 '11 at 19:22
@lockstep No, it should be Saussure, Ferdinand de. –  Alan Munn Oct 2 '11 at 19:25
I've updated the question so it's no longer an exact duplicate. –  Alan Munn Oct 2 '11 at 20:00

Now the correct one ;-)

The option sortcites should work:

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}

\usepackage[style=authoryear,backend=biber,useprefix=false,sortcites=true]{biblatex}
\usepackage{ifpdf}
\makeatletter
\AtBeginDocument{\toggletrue{blx@useprefix}}
\AtBeginBibliography{\togglefalse{blx@useprefix}}
\makeatother
\begin{filecontents}{\jobname.bib}
@book{Saussure1995,
Author = {Ferdinand de Saussure},
Origyear = {1916},
Publisher = {Payot},
Title = {Cours de Linguistique G{\'e}n{\'e}rale},
Year = {1995}}

@book{Labov1972,
Author = {William Labov},
Publisher = {University of Pennsylvania Press},
Title = {Sociolinguistic Patterns},
Year = {1972}}

\end{filecontents}
\begin{document}
The relation between the the sign and the signified is arbitrary \autocite{Saussure1995,Labov1972}.

Language change is driven by language variation. \autocite{Labov1972}.

\printbibliography

\end{document}


-

I actually have an option for this implemented in my personal style. Taking Marco's example I add a toggle citeprefix and also define a BibliographyOption citeprefix:

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear,backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Saussure1995,
Author = {Ferdinand de Saussure},
Origyear = {1916},
Publisher = {Payot},
Title = {Cours de Linguistique G{\'e}n{\'e}rale},
Year = {1995}}

@book{Labov1972,
Author = {William Labov},
Publisher = {University of Pennsylvania Press},
Title = {Sociolinguistic Patterns},
Year = {1972}}
\end{filecontents}

\providetoggle{citeprefix}
\toggletrue{citeprefix}
\DeclareBibliographyOption{citeprefix}[true]{\settoggle{citeprefix}{#1}}
\ExecuteBibliographyOptions{citeprefix=true}
\renewbibmacro*{name:last}[4]{%
\iftoggle{citeprefix}
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\ifblank{#3}
{}
{\ifcapital
{\mkbibnameprefix{\MakeCapital{#3\isdot}}}
{\mkbibnameprefix{#3\isdot}}%
\ifpunctmark{'}{}{\bibnamedelimc}}}
{\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\ifblank{#3}
{}
{\ifcapital
{\mkbibnameprefix{\MakeCapital{#3\isdot}}}
{\mkbibnameprefix{#3\isdot}}%
\ifpunctmark{'}{}{\bibnamedelimc}}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}}}%
\mkbibnamelast{#1}}%
\begin{document}
The relation between the the sign and the signified is arbitrary \autocite{Saussure1995}.

Language change is driven by language variation. \autocite{Labov1972}.

\printbibliography

\end{document}


-
Thanks for your answer Simon. I've updated the question a bit, unfortunately. With your solution, the sorting of multiple in text citations still uses the prefix. (so de Saussure sorts with D not S). (BTW, your image doesn't match the code, I don't think.) –  Alan Munn Oct 2 '11 at 20:19
@Alan: Simifilm has updated his answer, too. –  lockstep Oct 2 '11 at 20:25
@Marco: I've updated the code and the image, are you sure it's not what you want? The Sorting is under S. –  Simifilm Oct 2 '11 at 20:26
As @Marco has pointed out in chat, adding sortcites=true to your solution will solve the list of in text citations problem. So your solution works well. –  Alan Munn Oct 2 '11 at 20:27