从以下 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}
在 Stack Exchange 上,我只找到一个关于类似样式问题的相关讨论authortitle
:
那里提供的解决方案对我来说不起作用。
答案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。