我的大学要求在线资料在每个条目中包含三个不同的日期:
- 原始出版日期
- 最后编辑日期
- 访问网站的日期
好吧,第一个和第三个日期很容易,但是哪个 biblatex 字段对应于第二个日期?
date
- ???
urldate
最后,条目看起来应该是这样的
Uthor, A. (1996): A Stackexchange question. <https://tex.stackexchange.com/questions/ask>. (Last edited: 2008-04-36) (Last checked: 2018-01-29)
其中日期对应于上述定义
- 1996
- 2008-04-36
- 2018-01-29
我该如何处理这个问题?现在,我只是使用该note
字段,但当然,这并不完全可取,因为它不是很“干净”。
编辑:刚刚发现一些其他类似的问题。我需要研究一下,尽管我不太清楚需要编辑哪个 bibmacro,或者实际上不太了解如何向条目添加自定义字段并将其合并到宏中。我会看看我能做些什么。
我将进一步调查他们。
答案1
如同Biblatex:自定义日期字段。我们需要定义一个.dbx
文件来让 Biber 知道这个新内容。然后我们只需要添加对 URL/URL 日期宏的lasteditdate
调用。\printlasteditdate
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@online{elk,
author = {Anne Elk},
title = {On the Theory of Brontosauruses},
url = {https://example.edu/~elk/bronto.html},
lasteditdate = {2018-01-15},
urldate = {2018-01-29},
}
\end{filecontents*}
\begin{filecontents*}{lastedit.dbx}
\DeclareDatamodelFields[type=field, datatype=date, skipout]{
lasteditdate,
}
\DeclareDatamodelEntryfields{
lasteditday,
lasteditendday,
lasteditendhour,
lasteditendminute,
lasteditendmonth,
lasteditendsecond,
lasteditendtimezone,
lasteditendyear,
lastedithour,
lasteditminute,
lasteditmonth,
lasteditsecond,
lastedittimezone,
lastedityear,
}
\end{filecontents*}
\documentclass[british]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, datamodel=lastedit, lasteditdate=short]{biblatex}
\usepackage{hyperref}
\addbibresource{\jobname.bib}
\NewBibliographyString{lastchanged}
\DefineBibliographyStrings{english}{
lastchanged = {last changed},
}
\DeclareFieldFormat{lasteditdate}{\mkbibparens{\bibstring{lastchanged}\space#1}}
\renewbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{lastedityear}
{}
{\setunit*{\addspace}%
\printlasteditdate}%
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}