Biblatex 中是否有‘上次修改’字段?

Biblatex 中是否有‘上次修改’字段?

我正在写一份报告,其中引用了几个网页。我想提供这些网站最后修订的日期。是否有一个字段名为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则可能需要检查编辑历史记录。

相关内容