删除空年份字段 biblatex ieee 样式的括号

删除空年份字段 biblatex ieee 样式的括号

通过使用 biblatex ieee 样式,我发现即使字段“year”未定义,参考文献也会显示空括号。如何在不更改 biblatex.bst 的情况下将其删除?

\documentclass{article}

\usepackage[style=ieee,backend=bibtex]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\x.bib}
@ELECTRONIC{MEMSnet,
  title = {What is {MEMS}?},
  organization = {MEMSnet},
  url = {http://www.memsnet.org/mems/what_is.html},
  urldate = {Dec. 01, 2013}
}
\end{filecontents}

\addbibresource{\x.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

我有

()。什么是 MEMS?MEMSnet,[在线]。可用:http://www.memsnet.org/mems/what_is.html

这不是一个正确的引用格式。我希望:

什么是 MEMS?MEMSnet,[在线]。可用:http://www.memsnet.org/mems/what_is.html

非常感谢

答案1

我们ieee.bbx发现

\DeclareBibliographyDriver{online}{%
  [...]
  \setunit{\adddot\addspace}%
  \printtext[parens]{\usebibmacro{date}}%
  \setunit{\adddot\addspace}%
  [...]

因此biblatex尝试使用date宏(实际上只是默认为\printdate)并将其输出包装到括号中。如果它不打印任何内容,那么空字符串将被包装到括号中,从而得到上述结果。

显而易见的解决办法是给条目提供一个date字段(毕竟,[几乎]每个 bib 条目都应该有一个字段,参见上面的 Joseph Wright 的评论),@online但对于某些资源来说,这可能很困难,甚至完全不可能。

由于我们不想重写整个@online驱动程序(这是解决问题的明显方法),我们使用以下方法进行修补xpatch

加载\usepackage{xpatch}此代码并将其放入你的序言中

\xpatchbibdriver{online}
  {\printtext[parens]{\usebibmacro{date}}}
  {\iffieldundef{year}
    {}
    {\printtext[parens]{\usebibmacro{date}}}}
  {}
  {\typeout{There was an error patching biblatex-ieee (specifically, ieee.bbx's @online driver)}}

\printtext[parens]{\usebibmacro{date}}它将用一个(或多或少复杂的)构造替换上面讨论的有问题的行( ),在这个构造中,我们检查是否存在一个year字段(即一个足够的日期字段),并且只有当满足该条件时(即,只有存在年份;这里当然我们假设这year是参考书目中日期输出的最低要求),我们才会继续打印日期,否则什么也不做。

\documentclass{article}
\usepackage[style=ieee,backend=bibtex]{biblatex}
\usepackage{xpatch}

\begin{filecontents}{\jobname.bib}
@ELECTRONIC{MEMSnet,
  title = {What is {MEMS}?},
  organization = {MEMSnet},
  url = {http://www.memsnet.org/mems/what_is.html},
  urldate = {2013-12-01},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\xpatchbibdriver{online}
  {\printtext[parens]{\usebibmacro{date}}}
  {\iffieldundef{year}
    {}
    {\printtext[parens]{\usebibmacro{date}}}}
  {}
  {\typeout{There was an error patching biblatex-ieee (specifically, ieee.bbx's @online driver)}}

\begin{document}
  \nocite{MEMSnet,wilde,markey}
  \printbibliography
\end{document}

在此处输入图片描述

相关内容