1

I am trying to set the proper way of handling the Dutch prefixes and so far none of the solutions I have found on Tex.SE so far provide an answer that works in biblatex.

The general idea is that Dutch prefixes should be lower case when they are part of the total name and upper case when only the last name is given. In bibliographies, the names should be sorted with the prefixes removed.

This is my current MWE:

\documentclass{article}

\usepackage[style=verbose]{biblatex}

\makeatletter
    \AtBeginDocument{\toggletrue{blx@useprefix}} 
    \AtBeginBibliography{\togglefalse{blx@useprefix}}
\makeatother

\begin{filecontents}{biblio.bib}
    @article{BAN1,
        title = {Gas and Smoke in Interstellar Space},
        author = {Oort, Jan and van de Hulst, Henk},
        journaltitle = {Bulletin of the Astronomical Institutes of the Netherlands},
        volume = 10,
        number = 376,
        year = 1946
    }
\end{filecontents}
\bibliography{biblio}
\begin{document}
First citation.: \cites{BAN1}

Second citation: \cites{BAN1}
\printbibliography
\end{document}

This works correct for the first citation and for the bibliography, but not for the second citation where it gives "Oort and van der Hulst instead of "Oort and Van der Hulst"

I tried to fix that using

\makeatletter 
     \AtBeginDocument{
         \toggletrue{blx@useprefix} 
         \renewcommand*{\mkbibnameprefix}[1]{\MakeCapital{#1}}} 
     \AtBeginBibliography{ 
         \togglefalse{blx@useprefix} 
         \renewcommand*{\mkbibnameprefix}[1]{#1}}
\makeatother

But then it gives me "Henk Van de Hulst" instead of "Henk van de Hulst" at the first citation. Is there a solution that only capitalizes the prefix when only the last name is given (which is essentially only when the reference is already cited before).

2
  • 2
    Not that it matters for the question, but there is a superfluous comma in *author = {Oort, Jan, and van de Hulst, Henk},. There should be no comma before the and. The correct version would be author = {Oort, Jan and van de Hulst, Henk},.
    – moewe
    Commented Jun 2, 2020 at 13:17
  • Good catch, fixed it in the MWE.
    – cktai
    Commented Jun 2, 2020 at 13:23

1 Answer 1

1

If one wanted to get this completely right one would probably have to check if we are dealing with a Dutch name or with a, say, German name (in German you would only capitalise a "van" or "von" at the beginning of a sentence).

Unfortunately, the conceptually most sensible solution here requires a bit of code

\documentclass{article}

\usepackage[style=verbose]{biblatex}

\AtBeginDocument{\toggletrue{blx@useprefix}} 
\AtBeginBibliography{\togglefalse{blx@useprefix}}

\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{BAN1,
  title   = {Gas and Smoke in Interstellar Space},
  author  = {Oort, Jan and van de Hulst, Henk},
  journal = {Bulletin of the Astronomical Institutes of the Netherlands},
  volume  = 10,
  number  = 376,
  year    = 1946
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\null\vfill% just for the example
First citation: \autocite{BAN1}

Second citation: \autocite{BAN1}
\printbibliography
\end{document}

Jan Oort and Henk van de Hulst.//Oort and Van de Hulst


In case you prefer shorter code and like to live dangerously,

\renewcommand{\mkbibcompletenamefamilygiven}[1]{%
  \ifcapital
    {}
    {\def\mkbibnameprefix{\MakeCapital}}%
  #1}

\let\mkbibcompletenamefamily\mkbibcompletenamefamilygiven

would work.

Note that this assumes that \mkbibnameprefix does not apply any special formatting. The idea is to redefine \mkbibnameprefix to capitalise its argument (the "van") if it is not already automatically capitalised by the name format.

2
  • Thank you, both solutions seem to work. Also I was under the impression I needed the \makeatletter bit when changing the useprefix but it seems I don't?
    – cktai
    Commented Jun 2, 2020 at 13:55
  • @cktai In this case the \makeatletter...\makeatother is not needed basically because blx@useprefix is (at that point anyway) not a command sequence like \@firstofone, where you would need the \makeatletter...\makeatother. Basically it's the same reason \csname @firstofone\endcsname doesn't need \makeatletter. (The superfluous \makeatletter...\makeatother won't do any harm, but I prefer not using it if it can be avoided.)
    – moewe
    Commented Jun 2, 2020 at 14:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .