使用选项 backref 时,biblatex-apa 不会始终删除 DOI 后的句点。如何修复此问题?

使用选项 backref 时,biblatex-apa 不会始终删除 DOI 后的句点。如何修复此问题?

从以下 MWE 中可以看出,当 时backref = true,对于像 这样的参考类型book(实际上,article根据我的测试,除了 之外的几乎所有其他类型)biblatex-apa不会删除 DOI 后的句点,这违反了 APA 第 7 标准。

\documentclass{article}

\usepackage[
  backend = biber,
  style = apa,
  backref = true
]{biblatex}

\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
  @article{a,
    author  = {Aron, A. A.},
    title   = {Example article},
    journal = {Example Journal},
    year    = {2022},
    doi     = {10.1000/example.a}
  }

  @book{b,
    author  = {Brown, B. B.},
    title   = {Example book},
    year    = {2022},
    doi     = {10.1000/example.b}
  }
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}
\parencite{a} \parencite{b}
\printbibliography
\end{document}

MWE 显示 biblatex-apa 没有删除书籍条目 DOI 后的句号

在 Stack Exchange 上,我只找到一个关于类似样式问题的相关讨论authortitle

使用 biblatex 删除 DOI 后的句号

那里提供的解决方案对我来说不起作用。

答案1

经过谷歌搜索,我发现这个问题已经在未发布的版本中得到解决biblatex-apa

https://github.com/plk/biblatex-apa/pull/159

在该版本向用户开放之前,在文档序言中添加以下几行\usepackage[...]{biblatex}似乎可以解决问题:

\DeclareFieldFormat{doi}{%
  \ifhyperref
    {\href{https://doi.org/#1}{\nolinkurl{https://doi.org/#1}}}
    {\nolinkurl{https://doi.org/#1}}%
  \nopunct%
}

\DeclareFieldFormat{url}{\url{#1}\nopunct}

\DeclareFieldFormat{urldate}{%
  \bibstring{retrieved}\space#1%
  \urldatecomma\bibstring{from}%
}

\renewbibmacro*{doi+url}{%
  \ifboolexpr{          test {\iffieldundef{doi}}
                 or not togl {bbx:doi}}
    {\ifboolexpr{       test {\iffieldundef{url}}
                 or not togl {bbx:url}}
       {\newunit}
       {\usebibmacro{url+urldate}%
        \setunit{\addspace}}}
    {\printfield{doi}%
     \setunit{\addspace}}%
}

\renewbibmacro*{url+urldate}{%
  \ifthenelse{\iffieldundef{url}\OR\NOT\iffieldundef{doi}}
    {}
    {\iffieldundef{urlyear}
      {}
      {\bibstring{retrieved}%
       \setunit{\addspace}%
       \printurldate
       \setunit{\urldatecomma}%
       \bibstring{from}%
       \setunit{\addspace}}%
     \printfield{url}}%
}

这些行是从新版本apa.bbx文件中的更改中获得的,除了\newbibmacro*将 s 替换为\renewbibmacro*s。

相关内容