我有以下书目
@article{SomeCiteKey,
title = {SomeTitle},
author = {SomeLastname, SomeName},
date = {SomeDate},
shortjournal = {SomeAbbr},
volume = {SomeVol},
pages = {SomePages},
doi = {SomeDoi},
number = {SomeNum}
}
如您所见,那里没有日记或日记标题条目。
我想将短日记条目映射到日记标题中,这样 biber 就可以将短日记字段读取为日记标题。这可能吗?我猜可以用 来完成\DeclareSourcemap
。
答案1
对于几乎所有其他领域来说,这将是非常简单的。
使用
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=<bib field>, fieldtarget=<internal field>]
}
}
}
映射<bib field>
到<internal field>
。如果您将overwrite
选项传递给\map
,Biber 将覆盖<internal field>
(如果存在)。如果未设置该选项,Biber 将不会执行任何操作(如果<internal field>
存在)。
如果您想使用overwrite
,这直接适用于shortjournal
( <bib field>
) 和journaltitle
( <internal field>
):
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=shortjournal, fieldtarget=journaltitle]
}
}
}
另一个稍微详细一些的版本可以在杨·阿克·拉尔森的回答到biblatex 中的简称、期刊缩写等。
但是,如果您不想覆盖现有的长日志名称,则需要记住,它由驱动程序级源journal
映射(在用户级映射之后执行)重新映射到。在这种情况下,最简单的方法似乎是执行从到我们自己的journaltitle
映射journal
journaltitle
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=journal, fieldtarget=journaltitle]
}
\map{
\step[fieldsource=shortjournal, fieldtarget=journaltitle]
}
}
}
我猜你想要overwrite
解决方案,所以这里有一个 MWE 来证明这一点
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=shortjournal, fieldtarget=journaltitle]
}
}
}
\begin{filecontents}{\jobname.bib}
@article{uthor:jt,
title = {Some Title},
author = {Anne Uthor},
date = {1982},
shortjournal = {Lng Nm.},
journaltitle = {A Long Journal Name},
volume = {12},
pages = {45-48},
}
@article{uthor:j,
title = {Some Title},
author = {Anne Uthor},
date = {1984},
shortjournal = {Anoth. Lng. Nam.},
journal = {Another Loooong Journal Name},
volume = {9},
pages = {103-156},
}
@article{uthor:n,
title = {Some Title},
author = {Anne Uthor},
date = {1983},
shortjournal = {Shrt. Jour.},
volume = {12},
pages = {45-48},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{uthor:jt,uthor:j,uthor:n,sigfridsson}
\printbibliography
\end{document}