我正在使用apacite
包,并且我一直在尝试在可用url
时抑制doi
,按照提供的解决方案网址中换行:
\documentclass[11pt,a4paper]{article}
\usepackage{hyperref}
\usepackage{apacite}
\usepackage{etoolbox}
\usepackage{environ}
\newtoggle{bibdoi}
\newtoggle{biburl}
\makeatletter
\undef{\APACrefURL}
\undef{\endAPACrefURL}
\undef{\APACrefDOI}
\undef{\endAPACrefDOI}
\long\def\collect@url#1{\global\def\bib@url{#1}}
\long\def\collect@doi#1{\global\def\bib@doi{#1}}
\newenvironment{APACrefURL}{\global\toggletrue{biburl}\Collect@Body\collect@url}{\unskip\unskip}
\newenvironment{APACrefDOI}{\global\toggletrue{bibdoi}\Collect@Body\collect@doi}{}
\AtBeginEnvironment{thebibliography}{
\pretocmd{\PrintBackRefs}{%
\iftoggle{bibdoi}
{\iftoggle{biburl}{\unskip\unskip doi:\bib@doi}{}}
{\iftoggle{biburl}{Retrieved from\bib@url}{}}
\togglefalse{bibdoi}\togglefalse{biburl}%
}{}{}
}
\begin{document}
\nocite{*}
\bibliographystyle{apacite}
\bibliography{references}
\end{document}
其中references.bib
有以下引用:
@misc{american_cancer_society_melanoma_2018,
title = {Melanoma {skin} {cancer}},
url = {https://www.cancer.org/cancer/melanoma-skin-cancer},
urldate = {2018-02-20},
author = {{American Cancer Society}},
year = {2018}
}
我面临着该帖子末尾指出的相同问题,但尚未得到答复:
如果定义了条目 urldate(或 lastchecked)(但未定义 DOI),则此解决方案似乎效果不佳。参考资料将显示为 Retrieved from [2018-12-20]http://www.example.com
因此,使用提供的代码后,我会得到这样的结果:
有没有办法抑制或重新格式化urldate
?
答案1
是的,@pablos 和 @Guido 的解决方案没有考虑可选的 urldate。要使其工作,请插入以下内容(环境APACrefURL
中的原始定义apacite.sty
):
\newcommand{\APAurl}[1][]{%
\ifx\@empty#1\@empty
\BRetrievedFrom% Retrieved from
\else
\BRetrieved{#1}% Retrieved <date>, from
\fi}%
并将此行替换为:
{\iftoggle{biburl}{Retrieved from\bib@url}{}}
有了这个:
{\iftoggle{biburl}{\expandafter\APAurl\bib@url}{}}
我还发现了之前解决方案中的一个错误,导致不是如果打印 DOI不URL 可用(很奇怪,对吧?)。为此,您只需替换此行:
{\iftoggle{biburl}{\unskip\unskip doi:\bib@doi}{}}
有了这个:
{\unskip\unskip doi:\bib@doi}