我的大学参考文献样式为在线资源定义了两种不同的样式。第一种样式用于当确切链接已知且属于公共领域时。bib 文件中的标准 url 条目可以很好地满足这种情况。
第二种类型适用于资源可在线使用但访问受限的情况。例如,在这种情况下需要以下内容。
可从以下网站获取:ebookcentral.com [访问受限]
似乎我应该定义一个新类型,比如 url2,它将位于引用条目中与 url 相同的位置。新类型将有两个参数 {web adress}{comment}。
有没有办法从文档序言中做到这一点,而无需进入 biber 配置文件?
我还应该澄清一下,URL 前面的字符串也需要更改。默认条目会在地址字符串前面添加 URL,但带有 [restricted access] 选项的条目前面应该添加“Available from: ”。
答案1
有多种方法可以实现此目的。
在较新版本的biblatex
Biber 中,您可以使用数据注释功能。对于受限 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}
另一种简单的方法是定义一个条目选项,您可以打开或关闭该选项来指示 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
。