![使用 natbib 对 .bst 进行破解,在 BibTex 中的 @misc 中添加 urldate](https://linux22.com/image/308478/%E4%BD%BF%E7%94%A8%20natbib%20%E5%AF%B9%20.bst%20%E8%BF%9B%E8%A1%8C%E7%A0%B4%E8%A7%A3%EF%BC%8C%E5%9C%A8%20BibTex%20%E4%B8%AD%E7%9A%84%20%40misc%20%E4%B8%AD%E6%B7%BB%E5%8A%A0%20urldate.png)
尝试添加urldate
到我的 bst 文件。
我的条目为:
ENTRY
{ address
...
url
urldate
...
year
}
url
通过定义和的两个函数urldate
:
FUNCTION {format.url}
{ url duplicate$ empty$
{ pop$ "" }
{ "\url{" swap$ * "}" * }
if$
}
FUNCTION {format.urldate}
{ urldate duplicate$ empty$
{ pop$ "" }
{ "~(Accessed: " * urldate * ")" * }
if$
}
最后,函数misc
:
FUNCTION {misc}
{ output.bibitem
format.authors output
author format.key output
format.date "year" output.check
date.block
format.title output
new.block
howpublished "howpublished" bibinfo.check output
format.doi output
new.block
format.annote output
format.eprint output
format.url output
format.urldate output
fin.entry
}
还有一个 MWE:
\documentclass{article}
\usepackage[main=UKenglish,danish]{babel}
\usepackage{natbib}
\usepackage{filecontents,url}
\begin{filecontents*}{\jobname.bib}
@misc{DenTool2015,
author = {{The Engineering ToolBox}},
title = {{Density and Specific Weight of Air at Standard Atmospheric Pressure -- SI Units}},
url = {http://www.engineeringtoolbox.com/air-density-specific-weight-d_600.html},
urldate = {2015-03-30},
year = {2015}
}
\end{filecontents*}
\begin{document}
\cite{DenTool2015}
\bibliographystyle{bibstyle}
\bibliography{\jobname}
\end{document}
这是 bst 文件: https://db.tt/NUW5iXqF
我明白了:
这里你可以看到两个urldate
条目。希望你能帮忙删除第一个。/Tobias
评论:
在 Boris 的帮助下,我开始urldate
工作了。如果您想将日期格式编辑为英国或欧盟标准,请使用软件包isodate
。
前任:
FUNCTION {format.url}
{ url duplicate$ empty$
{ pop$ "" }
{ "\url{" swap$ * "}" *
urldate duplicate$ empty$
{ pop$ }
{ "~(Date last accessed:~\numdate\printdate{" swap$ * "})" * *}
if$
}
if$
}
会给:
答案1
你的黑客攻击有两个错误。
首先,在语句之后将 urldate 留在堆栈上if$
。这就是获取两个日期的方法。您需要使用此实例,而swap$
不是将第三个实例放在urldate
堆栈上:
FUNCTION {format.urldate}
{ urldate duplicate$ empty$
{ pop$ "" }
{ "~(Accessed: " swap$ * ")" * }
if$
}
但是,如果您进行此更改,您将看到 url 和 date 以逗号分隔:url, (Accessed: urldate)
。我想这不是您想要的。所以我建议将format.urldate
其全部删除,然后改为urldate
像format.url
这样:
FUNCTION {format.url}
{ url duplicate$ empty$
{ pop$ "" }
{ "\url{" swap$ * "}" *
urldate duplicate$ empty$
{ pop$ }
{ "~(Accessed: " swap$ * ")" * *}
if$
}
if$
}
urldate
这可以解决您没有遇到的情况url
(好的软件必须能够优雅地处理用户的错误)。
结果是
工程工具箱,2015 年:标准大气压 SI 单位下的空气密度和比重。http://www.engineeringtoolbox.com/air-density-specific-weight-d_600.html(访问日期:2015-03-30)。