Удалить скобки для пустого поля года в стиле biblatex ieee

Удалить скобки для пустого поля года в стиле biblatex ieee

Используя стиль biblatex ieee, я обнаружил, что ссылка будет отображать пустые скобки, даже если поле "год" не определено. Как мне удалить его, не изменяя 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полем (в конце концов, [почти] каждая заявка на получение стартового номера должна иметь поле, см. также комментарий Джозефа Райта выше), @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}

введите описание изображения здесь

Связанный контент