
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.bbx
encontramos las líneas.
\DeclareBibliographyDriver{online}{%
[...]
\setunit{\adddot\addspace}%
\printtext[parens]{\usebibmacro{date}}%
\setunit{\adddot\addspace}%
[...]
Así que biblatex
intenta usar la date
macro (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 date
campo 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 @online
recursos.
Como no queremos reescribir todo el @online
controlador (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 year
campo (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 year
es 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}