Elimine los paréntesis para el campo de año vacío estilo biblatex ieee

Elimine los paréntesis para el campo de año vacío estilo biblatex ieee

Al usar el estilo biblatex ieee, descubrí que la referencia mostrará corchetes vacíos aunque el campo "año" no esté definido. ¿Cómo puedo eliminarlo sin tener que cambiar 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}

Obtuve

(). ¿Qué es MEMS? MEMSnet, [en línea]. Disponible:http://www.memsnet.org/mems/what_is.html.

que no es un estilo de cita correcto. Me gustaría tener:

¿Qué es MEMS? MEMSnet, [en línea]. Disponible:http://www.memsnet.org/mems/what_is.html.

Muchas gracias

Respuesta1

En ieee.bbxencontramos las líneas.

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

Así que biblatexintenta usar la datemacro (que en realidad solo es predeterminada \printdate) y encierra su salida entre paréntesis. Si no imprime nada, bueno, entonces se envuelve una cadena vacía entre paréntesis, lo que da como resultado lo que obtuvo arriba.

La solución obvia es proporcionar un datecampo a la entrada (después de todo, [casi] todas las entradas dorsales deben tener uno; consulte también el comentario de Joseph Wright anterior); sin embargo, esto puede ser difícil y completamente imposible con algunos @onlinerecursos.

Como no queremos reescribir todo el @onlinecontrolador (una forma obvia de solucionar el problema), lo parcheamos usandoxpatch.

Cargue \usepackage{xpatch}y coloque este código en su 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)}}

Reemplazará la línea ofensiva discutida anteriormente ( \printtext[parens]{\usebibmacro{date}}) por una construcción (más o menos sofisticada) en la que verificamos si hay un yearcampo (es decir, un campo de fecha suficiente) y sólo si se cumple esa condición (es decir, sólo si existe un año; Aquí, por supuesto, presuponemos que ese yeares el requisito mínimo para una salida de fecha en la bibliografía), continuamos imprimiendo la fecha; de lo contrario, no se hace nada.

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

ingrese la descripción de la imagen aquí

información relacionada