我正在尝试通过通常的构造清除 BibLaTeX 字段\DeclareSourcemap
,如§4.5.3。
具体来说,在大多数情况下,以下操作对我来说都是正确的,并导致pubstate
被清除:
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\step[fieldset=pubstate, null]
}
}
但是,我希望包含特定pubstate
, \bibstring{submitted}
, 的条目不是得到清除,但对于所有其他人(例如那些有的pubstate = {\bibstring{prepublished}}
)确实得到清除。
bibstring
暂时忽略复杂性(虽然我在包含它时也尝试过,在我现在的情况下它只是变成了“已提交”),我尝试了以下操作,但没有成功:
\step[fieldset=pubstate, notmatch=\regexp{[Ss]ubmitted}, null]
在上述正则表达式中添加.*
前缀和后缀,或添加和删除分组似乎也无效。我还尝试使用 和 的各种组合match
、replace
使用和不使用多个\step
命令来实现这一点,或者改为通过 来实现fieldsource
。
有人可以建议我如何才能最好地实现这一目标吗?
答案1
match
记录在biblatex
手动的,第 178 页,
如果
match
已定义但replace
未定义,则仅当与 正则表达式fieldsource
<entryfield>
匹配时才应用该步骤match
(如果使用,则逻辑相反notmatch
)。
因此 amatch
需要 afieldsource
而不是 a fieldset
。这意味着你的一行代码无法工作,需要扩展为两行代码
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldsource=pubstate, notmatch={[sS]ubmitted}, final]
\step[fieldset=pubstate, null]
}
}
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
pubstate = {prepublished},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
pubstate = {submitted},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{elk,appleby}
\printbibliography
\end{document}
未来版本的biblatex
Biber 将不区分大小写notmatchi
,以避免出现[sS]
:https://github.com/plk/biber/issues/235
请注意,它不需要在字段\bibstring
内使用,如果需要,它将在打印字段时pubstate
自动添加。biblatex