BibLaTeX 将参考书目中的“&”更改为“and”

BibLaTeX 将参考书目中的“&”更改为“and”

我是 BibLaTeX 新手,遇到了参考书目问题,但引用没有问题。我想将参考书目中最后一位作者姓名前的“&”改为“and”。我知道有些帖子将参考书目中的“and”改为“&”,但我无法修改这些代码来做相反的事情。

目前,我的代码在引用中使用“and”,但在参考书目中使用“&”。我目前使用的序言是:

\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[natbib=true,
backend=biber,
bibencoding=utf8,
sorting=nyt,
citestyle=authoryear,
bibstyle=apa,
maxbibnames=99,
apamaxprtauth=99,
maxcitenames=3,
uniquelist=false,
uniquename=false]{biblatex}
\addbibresource{bib3_clean.bib}% Syntax for version >= 1.2

% Removes period after year in bibliography
\renewcommand{\labelnamepunct}{\addspace} 

%put comma after title
\usepackage{xpatch}
\xpatchbibdriver{article}
{\usebibmacro{title}%
    \newunit}
{\usebibmacro{title}%
    \printunit{\addcomma\space}}
{}
{}

%remove journal number
\AtEveryBibitem{%
    \clearfield{number}}

% do not italicize volume number
\DeclareFieldFormat[article]{volume}{\apanum{#1}}

%remove comma after journal name
\renewbibmacro*{journal+issuetitle}{%
    \usebibmacro{journal}%
    \setunit*{\space}%
    \iffieldundef{series}
    {}
    {\newunit
        \printfield{series}%
        \setunit{\addspace}}%
    \usebibmacro{volume+number+eid}%
    \setunit{\addspace}%
    \usebibmacro{issue}%
    \setunit{\addcolon\space}%
    \usebibmacro{issue}%
    \newunit}

我的问题是,如何仅在参考书目中用“and”替换“&”?

答案1

尝试biblatex-apa与其他样式混合或对其进行大量修改通常不是一个好主意:biblatex-apa应该被用作,style=apa,以便参考书目和引用样式都是apa。这是一种相当复杂的样式,需要做大量工作来实现 APA 手册的要求,这意味着代码中的一些选择会牺牲可定制性以换取对复杂 APA 规则的准确实施。参考书目和引用样式之间也存在一些(隐式)依赖关系。如果您需要一种非 APA 样式的作者年份样式,那么从标准样式之一开始通常是更好的选择。

样式书目中的“&”apa由两个分隔符控制:标准分隔符finalnamedelimapa特定分隔符finalnamedelim:apa:family-given。两者都需要重新定义。原始定义可以在ll. 602-624 的apa.bbx,我们只需将所有\&s改为\bibstring{and}

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[
  backend=biber,
  sorting=nyt,
  citestyle=authoryear,
  bibstyle=apa,
  maxbibnames=99,
  apamaxprtauth=99,
  maxcitenames=3,
  uniquelist=false,
  uniquename=false]{biblatex}

\renewcommand{\labelnamepunct}{\addspace}

\DeclareDelimFormat[bib]{finalnamedelim}{%
  \ifthenelse{\value{listcount}>\maxprtauth}
    {}
    {\ifthenelse{\value{liststop}>2}
       {\finalandcomma\addspace\bibstring{and}\space}
       {\addspace\bibstring{and}\space}}}

\DeclareDelimFormat[bib]{finalnamedelim:apa:family-given}{%
  \ifthenelse{\value{listcount}>\maxprtauth}
    {}
    {\ifthenelse{\ifcurrentname{groupauthor}\AND%
                 \value{liststop}=2}
     {\addspace\bibstring{and}\space}
     {\finalandcomma\addspace\bibstring{and}\space}}}

\usepackage{xpatch}
\xpatchbibdriver{article}
  {\usebibmacro{title}%
   \newunit}
  {\usebibmacro{title}%
   \printunit{\addcomma\space}}
  {}
  {}

\AtEveryBibitem{\clearfield{number}}

\DeclareFieldFormat[article]{volume}{\apanum{#1}}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\space}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addspace}}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson}
\printbibliography
\end{document}

Sigfridsson, E. 和 Ryde, U. (1998) 从静电势和矩推导原子电荷的方法比较。计算化学杂志 19,377–395。https://doi.org/10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P


该答案假定您正在使用实现第 7 版 APA 样式的当前版本biblatex-apa(至少自 2019-11-23 起为 v9.0)。

如果你正在使用biblatex-apa仍采用第 6 版 APA 格式的旧版本,或者你正在使用biblatex-apa6( style=apa6,) 的最新版本,你可能需要

\DeclareDelimFormat[bib,biblist]{finalnamedelim}{%
  \ifthenelse{\value{listcount}>\maxprtauth}
    {}
    {\ifthenelse{\value{liststop}>2}
       {\finalandcomma\addspace\bibstring{and}\space}
       {\addspace\bibstring{and}\space}}}

\DeclareDelimFormat[bib,biblist]{finalnamedelim:apa:family-given}{%
  \ifthenelse{\value{listcount}>\maxprtauth}
    {}
    {\finalandcomma\addspace\bibstring{and}\space}}

一些引用命令也使用“&”,如果你也想摆脱它们,你还需要

\DeclareDelimFormat[parencite,nptextcite,fullcite,fullcitebib]{finalnamedelim}
  {\ifnum\value{liststop}>2 \finalandcomma\fi\addspace\bibstring{and}\space}

这应该适用于旧版本和新biblatex-apa版本biblatex-apa6

相关内容