使用 natbib 对 .bst 进行破解,在 BibTex 中的 @misc 中添加 urldate

使用 natbib 对 .bst 进行破解,在 BibTex 中的 @misc 中添加 urldate

尝试添加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

我明白了: PDF

这里你可以看到两个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$
}

会给: pdf

答案1

你的黑客攻击有两个错误。

首先,在语句之后将 urldate 留在堆栈上if$。这就是获取两个日期的方法。您需要使用此实例,而swap$不是将第三个实例放在urldate堆栈上:

FUNCTION {format.urldate}
{ urldate duplicate$ empty$
    { pop$ "" }
    { "~(Accessed: " swap$ * ")" * }
  if$
}

但是,如果您进行此更改,您将看到 url 和 date 以逗号分隔:url, (Accessed: urldate)。我想这不是您想要的。所以我建议将format.urldate其全部删除,然后改为urldateformat.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)。

相关内容