![Biblatex 中是否有‘上次修改’字段?](https://linux22.com/image/302400/Biblatex%20%E4%B8%AD%E6%98%AF%E5%90%A6%E6%9C%89%E2%80%98%E4%B8%8A%E6%AC%A1%E4%BF%AE%E6%94%B9%E2%80%99%E5%AD%97%E6%AE%B5%EF%BC%9F.png)
我正在写一份报告,其中引用了几个网页。我想提供这些网站最后修订的日期。是否有一个字段名为last modified
(或类似名称)用于该online
条目或任何其他条目类型?快速搜索Biblatex 文档什么也没找到,但也许我搜索的是错误的术语。
答案1
我认为网站上的“最后修改时间”字段其实没有必要。该date
字段将包含此信息。如果您引用一本书,您总是在字段中使用印刷版本的年份year
,而不是其他版本的年份(无论是第一版还是您喜欢的版本,如果您坚持提供这样的信息,那么就有origdate
)。
note
您可以在或字段中添加诸如“上次修改”之类的信息addendum
,这些字段用于保存杂项信息。
还有urldate
上次访问的时间(这似乎不是您想要的,但无论如何都值得一提)。
但我又怎么能否认你拥有一个字段的乐趣呢lastmodifieddate
?当然,它不会是免费的。我们将在如何使用 BibLaTeX/Biber 创建全新的数据类型?。
为此,我们需要一个新的数据模型。将以下内容保存在名为的文件中lastmod.dbx
(在下面的 MWE 中,此文件通过 自动创建filecontents
)。
\DeclareDatamodelFields[type=field, datatype=datepart]{
lastmodifiedyear,
lastmodifiedmonth,
lastmodifiedday,
lastmodifiedhour,
lastmodifiedminute,
lastmodifiedsecond,
lastmodifiedtimezone,
lastmodifiedseason,
}
\DeclareDatamodelFields[type=field, datatype=date, skipout]{
lastmodifieddate}
\DeclareDatamodelEntryfields{
lastmodifieddate}
请注意,我们稍后将biblatex
使用该选项进行加载datamodel=lastmod
。
现在比伯知道了lastmodifieddate
。
我们甚至可以有本地化功能(保存在english-lastmod.lbx
)
\ProvidesFile{english-lastmod.lbx}[2015/05/10 english with edditions for last modified]
\InheritBibliographyExtras{english}
\NewBibliographyString{lastmodified}
\DeclareBibliographyStrings{%
inherit = {english},
lastmodified = {{last modified}{last mod\adddot}},
}
最后,我们通过以下方式打印新日期
\DeclareFieldFormat{lastmodifieddate}{\bibstring{lastmodified}\space#1}
\newbibmacro*{lastmodifieddate}{\printlastmodifieddate}
\renewbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{lastmodifiedyear}
{}
{\setunit*{\addcomma\space}%
\usebibmacro{lastmodifieddate}}
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
数学家协会
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@online{webs,
author = {Anne Uthor},
title = {A Website from the Future},
url = {https://example.com},
urldate = {2014-12-12},
lastmodifieddate = {2015-06-06},
}
\end{filecontents*}
\begin{filecontents}{lastmod.dbx}
\DeclareDatamodelFields[type=field, datatype=datepart]{
lastmodifiedyear,
lastmodifiedmonth,
lastmodifiedday,
lastmodifiedhour,
lastmodifiedminute,
lastmodifiedsecond,
lastmodifiedtimezone,
lastmodifiedseason,
}
\DeclareDatamodelFields[type=field, datatype=date, skipout]{
lastmodifieddate}
\DeclareDatamodelEntryfields{
lastmodifieddate}
\end{filecontents}
\documentclass[english]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[datamodel=lastmod,backend=biber]{biblatex}
\usepackage{hyperref}
\addbibresource{\jobname.bib}
\begin{filecontents*}{english-lastmod.lbx}
\ProvidesFile{english-lastmod.lbx}[2015/05/10 english with edditions for last modified]
\InheritBibliographyExtras{english}
\NewBibliographyString{lastmodified}
\DeclareBibliographyStrings{%
inherit = {english},
lastmodified = {{last modified}{last mod\adddot}},
}
\end{filecontents*}
\DeclareLanguageMapping{english}{english-lastmod}
\ExecuteBibliographyOptions{lastmodifieddate=short}
\DeclareFieldFormat{lastmodifieddate}{\bibstring{lastmodified}\space#1}
\newbibmacro*{lastmodifieddate}{\printlastmodifieddate}
\renewbibmacro*{url+urldate}{%
\usebibmacro{url}%
\iffieldundef{lastmodifiedyear}
{}
{\setunit*{\addcomma\space}%
\usebibmacro{lastmodifieddate}}
\iffieldundef{urlyear}
{}
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
\begin{document}
\cite{webs}
\printbibliography
\end{document}
给出
答案已更新,以反映biblatex
内部的变化,使定义日期字段更加容易。如果您使用的是 的非常旧版本,biblatex
则可能需要检查编辑历史记录。