将 shortjournal 映射到 journaltitle

将 shortjournal 映射到 journaltitle

我有以下书目

@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映射journaljournaltitle

\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}

Uthor, Anne (1982)。《一些标题》。在:Lng Nm. 12,第 45-48 页。//— (1983)。《一些标题》。在:Shrt. Jour. 12,第 45-48 页。//— (1984)。《一些标题》。在:Anoth. Lng. Nam. 9,第 103-156 页。

相关内容