![当 model5-names.bst(elsarticle.cls)中没有 DOI 时添加“从 URL 地址检索”](https://linux22.com/image/477526/%E5%BD%93%20model5-names.bst%EF%BC%88elsarticle.cls%EF%BC%89%E4%B8%AD%E6%B2%A1%E6%9C%89%20DOI%20%E6%97%B6%E6%B7%BB%E5%8A%A0%E2%80%9C%E4%BB%8E%20URL%20%E5%9C%B0%E5%9D%80%E6%A3%80%E7%B4%A2%E2%80%9D.png)
当 model5-names.bst (elsarticle.cls) 参考书目中缺少在线文章的 DOI 时,我想添加“从 URL 地址检索”。这符合 APA 6th 样式。
例如:
Kanizsa, G. (1976)。主观轮廓。《科学美国人》,234(4),48–52。摘自http://www.address.edu(当 doi 缺失时)
而不是:
Kanizsa, G. (1976)。主观轮廓。《科学美国人》,234(4),48–52。
谢谢。
答案1
为了获得所需的输出,您需要更改\URLprefix
宏(更改 URL 字符串前的前缀)、函数(如果存在print.url
非空字符串则抑制打印)和函数(抑制格式化条目末尾的)。doi
fin.entry
.
更改指令(约 1686 行)
"\providecommand{\URLprefix}{URL: }"
到
"\providecommand{\URLprefix}{Retrieved from }"
将
print.url
函数(从第 995 行开始)从FUNCTION {print.url} {url duplicate$ empty$ { pop$ "" } { new.sentence urlprefix "\url{" * swap$ * "}" * } if$ }
到
FUNCTION {print.url} {url duplicate$ empty$ { pop$ "" } { doi empty$ { new.sentence urlprefix "\url{" * swap$ * "}" * } { pop$ "" } if$ } if$ }
新的代码块检查
doi
字段是否为空;只有在这种情况下,url
才会打印字段的格式化内容。更改
fin.entry
函数,使其看起来像这样(.
如果 adoi
或 aurl
字段非空,这将抑制打印 a,并结合您之前的查询):FUNCTION {fin.entry} { doi empty$ { url empty$ { add.period$ } { } if$ } { } if$ write$ newline$ }
附录:这是一个 MWE(最小工作示例),它有两个 bib 条目:一个包含url
和doi
字段,另一个仅包含一个url
字段。如果两个字段都存在,则只打印doi
;如果只url
存在一个字段,则打印出来,前缀为“从 URL 地址检索”。(单独的注释:修改后的 bst 文件也包含您之前的两个请求:(i)number
在括号中显示字段,以及(ii)如果打印字段,则在条目末尾没有句点doi
。)
\RequirePackage{filecontents}
\begin{filecontents}{mybib.bib}
@article{abc,
author = "Anne Author",
title = "An entry with both doi and url fields",
journal = "Thoughts",
year = 3001,
volume = 1,
number = 2,
pages = "3-4",
url = "http://xyz.com",
doi = 12345678,
}
@article{def,
author = "Annie Author",
title = "An entry with only a url field",
journal = "Thoughts",
year = 3002,
volume = 5,
number = 6,
pages = "7-8",
url = "http://xyz.com",
}
\end{filecontents}
\documentclass{article}
\bibliographystyle{mymodel5}
\usepackage{url,natbib}
\begin{document}
\nocite{*}
\bibliography{mybib}
\end{document}