通过使用 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}