问题:

问题:

问题:

当条目不包含标题时,我想替换 biblatex+biber 标题.bib。例如,如果我有以下条目:

@article{key123,
  author = {Name AA and Name BB},
  title = {Article title name},
  Year = {2016},
  revjournal = {Journal Name},
}

我想更换

姓名 AA 和姓名 BB。“文章标题名称”。在:(2016 年)。

名称 AA 和名称 BB。“文章标题名称”。审核中:期刊名称(2016)。

我已尝试过:

我尝试使用以下内容revjournal进行映射:usera

\DeclareSourcemap{
    \maps[datatype=bibtex]{
      \map{
        \step[fieldsource=revjournal]
        \step[fieldset=usera,origfieldval]
    }
  }
}

\DeclareFieldFormat{usera}{%
  \iffieldundef{title}{%
    \mkbibacro{Under review at}\addcolon\space#1%
  }{}%
}

但这没有任何作用。也许有更好的方法来替换/覆盖 biblatex 字段?

梅威瑟:

\documentclass{article}

\usepackage{filecontents}

\usepackage[backend=biber,firstinits=true]{biblatex}
\DeclareSourcemap{
    \maps[datatype=bibtex]{
      \map{
        \step[fieldsource=revjournal]
        \step[fieldset=usera,origfieldval]
    }
  }
}

\DeclareFieldFormat{usera}{%
  \iffieldundef{title}{%
    \mkbibacro{Under review at}\addcolon\space{#1}%
  }{}%
}

\begin{filecontents}{./pubs.bib}
@article{key123,
  author = {Name AA and Name BB},
  title = {Article title name},
  Year = {2016},
  revjournal = {Journal Name},
  }
\end{filecontents}
\bibliography{./pubs.bib}
\begin{document}

\fullcite{key123}
\end{document}

感谢您的帮助。

答案1

这是该问题的另一种解决方案。Biblatex 提供了pubstate记录期刊文章出版状态的字段。

因此我建议保留标准journaltitle(或 bibtexjournal字段)并将pubstate= {under review}信息添加到条目中。

因此 bibtex 条目看起来像

@article{key123,
  author = {Name AA and Name BB},
  title = {Article title name},
  Year = {2016},
  journal = {Journal Name},
  pubstate = {under review},
  }

然后,处理信息并以所需格式排版输出,使用:

\def\jmlarson@ur{under review}

\renewbibmacro{in:}{%
  \ifentrytype{article}
    {\iffieldequals{substate}{\jmlarson@ur}{\printtext{Under review at\intitlepunct}}{}\clearfield{pubstate}}
    {\printtext{\bibstring{in}\intitlepunct}}%
}

诀窍是重新定义排版“In”的宏,为适当的条目放入正确的文本,并清除其中的信息pubstate(这样就不会打印两次)。

使用提供的 MWE,结果如下:

在此处输入图片描述

答案2

由 @moewe 提供的更强大的结果是使用:

\iffieldequalstr{pubstate}{under review}

并且不声明任何宏。有关更多理由,请参见此处:

Biblatex:iffieldequals 似乎在错误条件下返回 true

相关内容