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 風格中,第一個引文必須包含完整的作者列表,而後續引文只有一個非常短的截斷標籤,通常是第一作者加上「等人」。這是apa.cbx透過一種非常特殊的labelname格式實現的,labelname但不會在第一次出現時列印。此行為會導致顯示的名稱和namehash(基於labelname)在某些情況下有所不同。

解決方法是將所有namehashes更改apa.cbxfullhash類似這樣。

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

給出(可以說)預期結果

在此輸入影像描述

相關內容