7
@MISC{john_big_1991,
  author = {John, Oliver P. and Donahue, E. M. and Kentle, R. L.},
  title = {The Big Five Inventory--Versions 4a and 54},
  date = {1991},
  langid = {american},
  publisher = {Berkeley, {CA:} University of California, Berkeley, Institute of
    Personality and Social Research}
}

@INCOLLECTION{john_paradigm_2008,
  author = {John, Oliver P. and Naumann, Laura P. and Soto, Christopher J.},
  editor = {John, Oliver P. and Robins, Richard W. and Pervin, Lawrence A.},
  title = {Paradigm Shift to the Integrative Big Five Trait Taxonomy: History,
    Measurement, and Conceptual Issues},
  booktitle = {Handbook of personality: theory and research},
  date = {2008},
  edition = {3},
  publisher = {Guilford Press},
  location = {New York},
  isbn = {9781593858360},
  pages = {114-158},
  langid = {american}
}

These two BibLaTeX entries cited within the same parentheses with...

\parencite{john_big_1991, john_paradigm_2008}

...lead to the following citation output:

(John, Donahue & Kentle, 1991, 2008)

As the co-authors clearly aren't the same although the first author is, I guess this shouldn't happen.

My Babel and BibLaTeX settings are as follows:

\usepackage[american,ngerman]{babel}
\usepackage[
    style=apa,
    sortcites=true,
    sorting=nyt,
    backend=biber,
    autolang=other
    ]{biblatex}
\DeclareLanguageMapping{ngerman}{ngerman-apa} % for language switching
\DeclareLanguageMapping{american}{american-apa} % for language switching

I also suppress some fields like url and redefine some bibliography strings, but I assume that this shouldn't be the root of the reported problem.

Also, if I inverse the citation...

\parencite{john_paradigm_2008, john_big_1991}

...and deactivate sorting, my output will be:

(John, Naumann & Soto, 2008, 1991)

Is there any BibLaTeX setting I've missed that fixes this problem or is this the expected behavior?


EDIT: I'd expect the first multiple citation to look like this:

(John, Donahue & Kentle, 1991; John, Naumann & Soto, 2008)

I really got no idea of how potential subsequent multiple citations with the same references should look like. The following would at least seem odd, as stated by moewe in his answer below:

(John et al., 1991; John et al., 2008)

  • This does seem to be specific to the APA style implementation for biblatex. – moewe Dec 27 '13 at 17:06
  • The problem is that in order to implement the APA "name format in first citation vs subsequent citations" rule, labelname and the name displayed when citing diverge. Both citations above should (at least when the other one is not present) be "John et al." after the first cite - that is the value of labelname and therefore of namehash. But then biblatex checks if namehashess coincide when deciding whether to compress the citation. – moewe Dec 27 '13 at 17:34
  • Maybe @plk can shed some more light on this and offer a proper APA-compliant fix. – moewe Dec 27 '13 at 17:45
  • An official, APA compliant fix for this would be highly appreciated. Else I'll happily use the one delivered by moewe. – s0larix Dec 27 '13 at 19:47
6

As explained in my comments above, this has to do with the way biblatex-apa has to handle subsequent citations.

In APA style, the first citation has to contain a full list of authors while subsequent citations have only a very short truncated label of usually the first author plus "et al.". This is implemented in apa.cbx by a very special labelname format, that labelname is however not printed at the first occurrence. This behaviour causes the displayed name and the namehash (which is based on labelname) to diverge in certain situations.

A fix is to change all the namehashes in apa.cbx to fullhash like so.

\makeatletter
\def\cbx@apa@ifnamesaved{%
  \xifinlist{\thefield{fullhash}}{\cbx@apa@names}
    {\@firstoftwo}
    {\@secondoftwo}}

\newbibmacro*{cite:author}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Multiple cites in one command
   {\setunit{\compcitedelim}%
    \usebibmacro{cite:plabelyear+extrayear}}%
% Single cite
   {\ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
% No author/editor
     {\usebibmacro{cite:noname}%
       \savefield{fullhash}{\cbx@lasthash}}
% Normal cite
     {\ifnameundef{shortauthor}
        {\printnames[labelname][-\value{listtotal}]{labelname}}%
        {\cbx@apa@ifnamesaved
          {\printnames{shortauthor}}
          {\printnames[labelname][-\value{listtotal}]{author}\addspace\printnames[sabrackets]{shortauthor}}}%
      \savefield{fullhash}{\cbx@lasthash}}}%
   \setunit{\multicitedelim}}

\newbibmacro*{cite}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Multiple cites in one command
   {\setunit{\compcitedelim}%
    \usebibmacro{cite:plabelyear+extrayear}}%
% Single cite
   {\ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
% No author/editor
     {\usebibmacro{cite:noname}%
       \setunit{\nameyeardelim}%
       \usebibmacro{cite:plabelyear+extrayear}%
       \savefield{fullhash}{\cbx@lasthash}}
% Normal cite
     {\ifnameundef{shortauthor}
        {\printnames[labelname][-\value{listtotal}]{labelname}}%
        {\cbx@apa@ifnamesaved
          {\printnames{shortauthor}}
          {\printnames[labelname][-\value{listtotal}]{author}\addspace\printnames[sabrackets]{shortauthor}}}%
      \setunit{\nameyeardelim}%
      \usebibmacro{cite:plabelyear+extrayear}%
      \savefield{fullhash}{\cbx@lasthash}}}%
   \setunit{\multicitedelim}}

\newbibmacro*{textcite}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Compact cite - more than one thing for same author
    {\setunit{\compcitedelim}%
     \usebibmacro{cite:plabelyear+extrayear}}
% New cite
    {%
    \ifbool{cbx:parens}
      {\bibcloseparen\global\boolfalse{cbx:parens}}
      {}%
      \setunit{\compcitedelim}%
      \ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
  % No author/editor or patent
       {\iffieldundef{shorthand}%
    % Cite using title
         {\usebibmacro{cite:noname}%
          \setunit{\ifbool{cbx:np}%
                   {\nameyeardelim}%
                   {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
          \usebibmacro{cite:plabelyear+extrayear}}
    % Cite using shorthand
         {\usebibmacro{cite:shorthand}}}
  % Normal cite with author/editor
  % Normal full cite
       {\ifnameundef{shortauthor}%
    % Normal full cite
         {\printnames[labelname][-\value{listtotal}]{labelname}}
    % Cite using short author
         {\cbx@apa@ifnamesaved
           {\printnames{shortauthor}}
           {\printnames[labelname][-\value{listtotal}]{author}}}%
  % Year
        \setunit{\ifbool{cbx:np}
                  {\nameyeardelim}
                  {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
  % Put the shortauthor inside the year brackets if necessary
        \ifnameundef{shortauthor}
         {}
         {\cbx@apa@ifnamesaved
           {}
           {\printnames{shortauthor}\setunit{\nameyeardelim}}}%
  % Actual year printing
        \usebibmacro{cite:plabelyear+extrayear}%
  % Save name hash for checks later
        \savefield{fullhash}{\cbx@lasthash}}}}

\newbibmacro*{citeyear}{%
  \iffieldundef{labelyear}
    {\usebibmacro{cite:init}}
    {\iffieldequals{fullhash}{\cbx@lasthash}
       {\setunit{\compcitedelim}%
        \usebibmacro{cite:plabelyear+extrayear}}
       {\usebibmacro{cite:plabelyear+extrayear}%
        \savefield{fullhash}{\cbx@lasthash}}}%
  \setunit{\multicitedelim}}

\newbibmacro*{cite:post}{%
  \xifinlist{\thefield{fullhash}}{\cbx@apa@names}
    {}
    {\listxadd{\cbx@apa@names}{\thefield{fullhash}}}}
\makeatother

The MWE

\documentclass{scrartcl}
\usepackage{csquotes}
\usepackage[ngerman]{babel} 
\usepackage[style=apa, backend=biber]{biblatex}
\DeclareLanguageMapping{ngerman}{ngerman-apa} % for language switching
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@MISC{john_big_1991,
  author = {John, Oliver P. and Donahue, E. M. and Kentle, R. L.},
  title = {The Big Five Inventory--Versions 4a and 54},
  date = {1991},
  langid = {american},
  publisher = {Berkeley, {CA:} University of California, Berkeley, Institute of
    Personality and Social Research}
}
@MISC{john_big_1992,
  author = {John, Oliver P. and Donahue, E. M. and Kentle, R. L.},
  title = {The Big Five Inventory--Versions 4b and 5},
  date = {1992},
  langid = {american},
  publisher = {Berkeley, {CA:} University of California, Berkeley, Institute of
    Personality and Social Research}
}

@INCOLLECTION{john_paradigm_2008,
  author = {John, Oliver P. and Naumann, Laura P. and Soto, Christopher J.},
  editor = {John, Oliver P. and Robins, Richard W. and Pervin, Lawrence A.},
  title = {Paradigm Shift to the Integrative Big Five Trait Taxonomy: History,
    Measurement, and Conceptual Issues},
  booktitle = {Handbook of personality: theory and research},
  date = {2008},
  edition = {3},
  publisher = {Guilford Press},
  location = {New York},
  isbn = {9781593858360},
  pages = {114-158},
  langid = {american}
}
\end{filecontents*}

\bibliography{\jobname.bib}

\makeatletter
\def\cbx@apa@ifnamesaved{%
  \xifinlist{\thefield{fullhash}}{\cbx@apa@names}
    {\@firstoftwo}
    {\@secondoftwo}}

\newbibmacro*{cite:author}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Multiple cites in one command
   {\setunit{\compcitedelim}%
    \usebibmacro{cite:plabelyear+extrayear}}%
% Single cite
   {\ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
% No author/editor
     {\usebibmacro{cite:noname}%
       \savefield{fullhash}{\cbx@lasthash}}
% Normal cite
     {\ifnameundef{shortauthor}
        {\printnames[labelname][-\value{listtotal}]{labelname}}%
        {\cbx@apa@ifnamesaved
          {\printnames{shortauthor}}
          {\printnames[labelname][-\value{listtotal}]{author}\addspace\printnames[sabrackets]{shortauthor}}}%
      \savefield{fullhash}{\cbx@lasthash}}}%
   \setunit{\multicitedelim}}

\newbibmacro*{cite}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Multiple cites in one command
   {\setunit{\compcitedelim}%
    \usebibmacro{cite:plabelyear+extrayear}}%
% Single cite
   {\ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
% No author/editor
     {\usebibmacro{cite:noname}%
       \setunit{\nameyeardelim}%
       \usebibmacro{cite:plabelyear+extrayear}%
       \savefield{fullhash}{\cbx@lasthash}}
% Normal cite
     {\ifnameundef{shortauthor}
        {\printnames[labelname][-\value{listtotal}]{labelname}}%
        {\cbx@apa@ifnamesaved
          {\printnames{shortauthor}}
          {\printnames[labelname][-\value{listtotal}]{author}\addspace\printnames[sabrackets]{shortauthor}}}%
      \setunit{\nameyeardelim}%
      \usebibmacro{cite:plabelyear+extrayear}%
      \savefield{fullhash}{\cbx@lasthash}}}%
   \setunit{\multicitedelim}}

\newbibmacro*{textcite}{%
  \iffieldequals{fullhash}{\cbx@lasthash}
% Compact cite - more than one thing for same author
    {\setunit{\compcitedelim}%
     \usebibmacro{cite:plabelyear+extrayear}}
% New cite
    {%
    \ifbool{cbx:parens}
      {\bibcloseparen\global\boolfalse{cbx:parens}}
      {}%
      \setunit{\compcitedelim}%
      \ifthenelse{\ifnameundef{labelname}\OR\iffieldequalstr{entrytype}{patent}}
  % No author/editor or patent
       {\iffieldundef{shorthand}%
    % Cite using title
         {\usebibmacro{cite:noname}%
          \setunit{\ifbool{cbx:np}%
                   {\nameyeardelim}%
                   {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
          \usebibmacro{cite:plabelyear+extrayear}}
    % Cite using shorthand
         {\usebibmacro{cite:shorthand}}}
  % Normal cite with author/editor
  % Normal full cite
       {\ifnameundef{shortauthor}%
    % Normal full cite
         {\printnames[labelname][-\value{listtotal}]{labelname}}
    % Cite using short author
         {\cbx@apa@ifnamesaved
           {\printnames{shortauthor}}
           {\printnames[labelname][-\value{listtotal}]{author}}}%
  % Year
        \setunit{\ifbool{cbx:np}
                  {\nameyeardelim}
                  {\global\booltrue{cbx:parens}\addspace\bibopenparen}}%
  % Put the shortauthor inside the year brackets if necessary
        \ifnameundef{shortauthor}
         {}
         {\cbx@apa@ifnamesaved
           {}
           {\printnames{shortauthor}\setunit{\nameyeardelim}}}%
  % Actual year printing
        \usebibmacro{cite:plabelyear+extrayear}%
  % Save name hash for checks later
        \savefield{fullhash}{\cbx@lasthash}}}}

\newbibmacro*{citeyear}{%
  \iffieldundef{labelyear}
    {\usebibmacro{cite:init}}
    {\iffieldequals{fullhash}{\cbx@lasthash}
       {\setunit{\compcitedelim}%
        \usebibmacro{cite:plabelyear+extrayear}}
       {\usebibmacro{cite:plabelyear+extrayear}%
        \savefield{fullhash}{\cbx@lasthash}}}%
  \setunit{\multicitedelim}}

\newbibmacro*{cite:post}{%
  \xifinlist{\thefield{fullhash}}{\cbx@apa@names}
    {}
    {\listxadd{\cbx@apa@names}{\thefield{fullhash}}}}
\makeatother

\begin{document}
\parencite{john_big_1991}
\parencite{john_big_1992}

\parencite{john_big_1991,john_big_1992}
\parencite{john_big_1991,john_paradigm_2008}

\parencite{john_big_1991}

\parencite{john_big_1991}

\parencite{john_paradigm_2008}
\parencite{john_big_1991,john_paradigm_2008}

\printbibliography
\end{document}

gives the (arguably) expected result of

enter image description here

  • 1
    Note though that one might feel shortening both "John, Oliver P. and Naumann, Laura P. and Soto, Christopher J." and "John, Oliver P. and Donahue, E. M. and Kentle, R. L." to "John et al." goes in the wrong direction. – moewe Dec 27 '13 at 17:47
  • Thanks for clearing this up! I edited the expected output into my question. – s0larix Dec 27 '13 at 19:37

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.