如何在 Biber 中定义自定义 url 条目?

如何在 Biber 中定义自定义 url 条目?

我的大学参考文献样式为在线资源定义了两种不同的样式。第一种样式用于当确切链接已知且属于公共领域时。bib 文件中的标准 url 条目可以很好地满足这种情况。

第二种类型适用于资源可在线使用但访问受限的情况。例如,在这种情况下需要以下内容。

可从以下网站获取:ebookcentral.com [访问受限]

似乎我应该定义一个新类型,比如 url2,它将位于引用条目中与 url 相同的位置。新类型将有两个参数 {web adress}{comment}。

有没有办法从文档序言中做到这一点,而无需进入 biber 配置文件?

我还应该澄清一下,URL 前面的字符串也需要更改。默认条目会在地址字符串前面添加 URL,但带有 [restricted access] 选项的条目前面应该添加“Available from: ”。

答案1

有多种方法可以实现此目的。

在较新版本的biblatexBiber 中,您可以使用数据注释功能。对于受限 URL,您可以添加url+an = {restricted},注释,该注释可以在字段格式中用 进行查询\iffieldannotation{restricted}

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\NewBibliographyString{urlrestricted}
\DefineBibliographyStrings{english}{
  urlrestricted = {restricted access},
}

\DeclareFieldFormat{url}{%
  \mkbibacro{URL}\addcolon\space
  \url{#1}%
  \iffieldannotation{restricted}
    {\space
     \mkbibbrackets{\bibstring{urlrestricted}}}
    {}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{elk,
  author  = {Anne Elk},
  title   = {A Theory on Brontosauruses},
  date    = {1971},
  url     = {https://example.edu/~elk/bronto.pdf},
}
@online{elk:paid,
  author     = {Anne Elk},
  title      = {A Paid Theory on Brontosauruses},
  date       = {1972},
  url        = {https://example.com/~elk/paywall/bronto/},
  url+an     = {=restricted},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\cite{sigfridsson,elk,elk:paid}
\printbibliography
\end{document}

一份书目,其中有条目“Elk, Anne (1971). A Theory on Brontosauruses. URL: https://example.edu/~elk/bronto.pdf。” 和“Elk, Anne (1972). A Paid Theory on Brontosauruses. URL: https://example.com/~elk/paywall/bronto/ [restricted access]。”


另一种简单的方法是定义一个条目选项,您可以打开或关闭该选项来指示 URL 是否受限制。不受限制的 URL 不需要特殊处理,但受限制 URL 的条目将添加options = {urlrestricted},

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\newtoggle{nzcbx@urlrestricted}
\DeclareEntryOption[boolean]{urlrestricted}[true]{%
  \settoggle{nzcbx@urlrestricted}{#1}%
}

\NewBibliographyString{urlrestricted}
\DefineBibliographyStrings{english}{
  urlrestricted = {restricted access},
}

\DeclareFieldFormat{url}{%
  \mkbibacro{URL}\addcolon\space
  \url{#1}%
  \iftoggle{nzcbx@urlrestricted}
    {\space
     \mkbibbrackets{\bibstring{urlrestricted}}}
    {}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{elk,
  author  = {Anne Elk},
  title   = {A Theory on Brontosauruses},
  date    = {1971},
  url     = {https://example.edu/~elk/bronto.pdf},
}
@online{elk:paid,
  author     = {Anne Elk},
  title      = {A Paid Theory on Brontosauruses},
  date       = {1972},
  url        = {https://example.com/~elk/paywall/bronto/},
  options    = {urlrestricted},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\cite{sigfridsson,elk,elk:paid}
\printbibliography
\end{document}

输出如上。


如果您想要的不仅仅是一个切换按钮,您可以将选项转换为字符串选项。在下面的 MWE 中,它被重命名为,urlcomment并且可以输入任意文本。如果可能的话,文本将被解释为 bibstring 的名称,并打印该 bibstring。如果没有 bibstring,则按原样打印文本。如果没有给出值,则假定默认值restricted(对应于 bibstring)。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\DeclareEntryOption[string]{urlcomment}[restricted]{%
  \csdef{nzcbx@urlcomment}{#1}%
}

\NewBibliographyString{restricted}
\DefineBibliographyStrings{english}{
  restricted = {restricted access},
}

\DeclareFieldFormat{url}{%
  \mkbibacro{URL}\addcolon\space
  \url{#1}%
  \ifcsundef{nzcbx@urlcomment}
    {}
    {\space
     \mkbibbrackets{%
     \ifbibxstring{\csuse{nzcbx@urlcomment}}
       {\bibstring{\csuse{nzcbx@urlcomment}}}
       {\csuse{nzcbx@urlcomment}}}}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@online{elk,
  author  = {Anne Elk},
  title   = {A Theory on Brontosauruses},
  date    = {1971},
  url     = {https://example.edu/~elk/bronto.pdf},
}
@online{elk:paid,
  author     = {Anne Elk},
  title      = {A Paid Theory on Brontosauruses},
  date       = {1972},
  url        = {https://example.com/~elk/paywall/bronto/},
  options    = {urlcomment},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\cite{sigfridsson,elk,elk:paid}
\printbibliography
\end{document}

输出如上。

但是,如果您想为 URL 注释传递任意文本,我更愿意使用一个新字段urlcomment。这似乎比选项更强大。同样,如果可能,字段的内容将被解释为 bibstring;如果没有可用的 bibstring,则按原样打印。与字符串选项相反,没有默认字段值。此解决方案需要一个数据模型,从技术上讲,这将导致 Biber 配置文件。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{filecontents}

\begin{filecontents}{url.dbx}
\DeclareDatamodelFields[type=field, datatype=key]{urlcomment}
\end{filecontents}

\usepackage[style=authoryear, backend=biber, datamodel=url]{biblatex}

\NewBibliographyString{urlrestricted}
\DefineBibliographyStrings{english}{
  urlrestricted = {restricted access},
}

\DeclareFieldFormat{urlcomment}{\mkbibbrackets{\ifbibstring{#1}{\bibstring{#1}}{#1}}}

\renewbibmacro{url}{%
  \printfield{url}%
  \setunit*{\addspace}%
  \printfield{urlcomment}}

\begin{filecontents}{\jobname.bib}
@online{elk,
  author  = {Anne Elk},
  title   = {A Theory on Brontosauruses},
  date    = {1971},
  url     = {https://example.edu/~elk/bronto.pdf},
}
@online{elk:paid,
  author     = {Anne Elk},
  title      = {A Paid Theory on Brontosauruses},
  date       = {1972},
  url        = {https://example.com/~elk/paywall/bronto/},
  urlcomment = {urlrestricted},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\cite{sigfridsson,elk,elk:paid}
\printbibliography
\end{document}

输出再次如上。


如果你使用最后一种方法,你可以添加

\DeclareFieldFormat{url}{%
  \iffieldundef{urlcomment}
    {\mkbibacro{URL}}
    {\bibstring{urlfrom}}%
  \addcolon\space
  \url{#1}}

将带有字段的条目的“URL”切换为“可用自” urlcomment

相关内容