空の年フィールドの括弧を削除する 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

明らかな解決策は、エントリにフィールドを提供することです(結局のところ、[ほぼ] すべての bib エントリにフィールドが必要です。上記の Joseph Wright のコメントも参照してください) 。ただし、これは難しい場合があり、一部のリソースdateではまったく不可能な場合があります。@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}

ここに画像の説明を入力してください

関連情報