Remova os parênteses do campo de ano vazio estilo biblatex ieee

Remova os parênteses do campo de ano vazio estilo biblatex ieee

Usando o estilo biblatex ieee, descobri que a referência exibirá colchetes vazios mesmo que o campo "ano" esteja indefinido. Como posso removê-lo sem precisar alterar o 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}

Eu obtive

(). O que é MEMS? MEMSnet, [Online]. Disponível:http://www.memsnet.org/mems/what_is.html.

que não é um estilo de citação correto. Eu gostaria de ter:

O que é MEMS? MEMSnet, [Online]. Disponível:http://www.memsnet.org/mems/what_is.html.

Muito obrigado

Responder1

Em ieee.bbxencontramos as linhas

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

Então, biblatextenta usar a datemacro (que na verdade é apenas o padrão \printdate) e colocar sua saída entre parênteses. Se não imprimir nada, bem, então uma string vazia será colocada entre parênteses, resultando no que você obteve acima.

A cura óbvia é fornecer um datecampo à entrada (afinal, [quase] toda entrada de babador deveria ter um, veja também o comentário de Joseph Wright acima), @onlineembora isso possa ser difícil e totalmente impossível com alguns recursos.

Como não queremos reescrever todo o @onlinedriver (uma maneira óbvia de corrigir o problema), nós o corrigimos usandoxpatch.

Carregue \usepackage{xpatch}e coloque este código em seu preâmbulo

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

Ela substituirá a linha problemática discutida acima ( \printtext[parens]{\usebibmacro{date}}) por uma construção (mais ou menos sofisticada) na qual verificamos se existe um yearcampo (ou seja, um campo de data suficiente) e somente se essa condição for atendida (ou seja, apenas se existir um ano); aqui, é claro, pressupomos que esse yearé o requisito mínimo para uma saída de data na bibliografia) e imprimimos a data, caso contrário, nada será feito.

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

insira a descrição da imagem aqui

informação relacionada