biblatex-apa: Несколько ссылок в одних и тех же скобках с одним и тем же первым автором, но разными соавторами, сжимаются

biblatex-apa: Несколько ссылок в одних и тех же скобках с одним и тем же первым автором, но разными соавторами, сжимаются
@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}
}

Эти две записи BibLaTeX цитируются в одних и тех же скобках...

\parencite{john_big_1991, john_paradigm_2008}

...приводят к следующему результату цитирования:

(Джон, Донахью и Кентл, 1991, 2008)

Поскольку соавторы явно не одни и те же, хотя первый автор один и тот же, я полагаю, что этого не должно происходить.

Мои настройки Babel и BibLaTeX следующие:

\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

Я также подавляю некоторые поля, такие как URL, и переопределяю некоторые строки библиографии, но предполагаю, что это не должно быть причиной обнаруженной проблемы.

Кроме того, если я переверну цитату...

\parencite{john_paradigm_2008, john_big_1991}

...и деактивируем сортировку, мой вывод будет таким:

(Джон, Науманн и Сото, 2008, 1991)

Есть ли какие-то настройки BibLaTeX, которые я пропустил и которые решают эту проблему, или это ожидаемое поведение?


РЕДАКТИРОВАТЬ:Я ожидаю, что первое многократное цитирование будет выглядеть так:

(Джон, Донахью и Кентл, 1991; Джон, Науманн и Сото, 2008)

Я действительно не имел ни малейшего представления о том, как должны выглядеть потенциальные последующие множественные цитирования с теми же ссылками. Следующее покажется по меньшей мере странным, как заявил moewe в своем ответе ниже:

(Джон и др., 1991; Джон и др., 2008)

решение1

Как я объяснил в своих комментариях выше, это связано со способом biblatex-apaобработки последующих цитат.

В стиле APA первая цитата должна содержать полный список авторов, тогда как последующие цитаты имеют только очень короткую усеченную метку, обычно первого автора плюс «et al.». Это реализовано в apa.cbxочень специальном labelnameформате, который, labelnameоднако, не печатается при первом появлении. Такое поведение приводит к тому, что отображаемое имя и namehash(который основан на labelname) расходятся в определенных ситуациях.

Исправление — изменить все namehashes apa.cbxна fullhashчто-то вроде этого.

\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

МВЭ

\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}

дает (возможно) ожидаемый результат

введите описание изображения здесь

Связанный контент