
Я используюbeilstein.clsкласс избайльштейнПакет для форматирования документа. Ссылки в этих документах форматируются с использованиемbjnano.bstфайл стиля, который идет сбайльштейнпакет от CTAN (https://ctan.org/pkg/beilstein). В моем документе я ссылаюсь на ссылку типа InProceedings, что приводит к следующей ошибке в bibtext:
This is BibTeX, Version 0.99d (MiKTeX 20.7)
The top-level auxiliary file: co-paper-MWE.aux
The style file: bjnano.bst
Database file #1: MWE.bib
You can't pop an empty literal stack for entry 5420955
while executing---line 1463 of file bjnano.bst
(There was 1 error message)
Несмотря на ошибку, создается правильная библиография, и запись, кажется, полностью там. Я посмотрел на строку 1463 файла стиля, однако я не понимаю, как работает форматирование.
Вот соответствующий MWE:
\documentclass{beilstein}
\usepackage{filecontents}
\begin{filecontents*}{MWE.bib}
@INPROCEEDINGS{5420955,
author={J. J. {Martin} and V. {Neburchilov} and H. {Wang} and W. {Qu}},
booktitle={2009 IEEE Electrical Power Energy Conference (EPEC)},
title={Air cathodes for metal-air batteries and fuel cells},
year={2009},
volume={},
number={},
pages={1-6},
publisher={{IEEE}},
doi = {10.1109/epec.2009.5420955},}
\end{filecontents*}
\begin{document}
Text\cite{5420955}
\bibliography{MWE}
\end{document}
Существует ли ошибка в файле стиля или мой файл .bib содержит ошибку?
РЕДАКТИРОВАТЬ: Как указал сопровождающий пакет в ответе ниже, эта ошибка существует в версии 2.0 (от 26.02.2020) и будет исправлена в новом обновлении версии.
решение1
inproceedings
В функции есть небольшая ошибка bjnano.bst
.
После печати названия книги функция вызывает add.semicolon write$
(строка 1121). В этот момент стек, по-видимому, пуст, поэтому и возникает ошибка. Заменив строку на new.block
(которая также печатает точку с запятой), ошибка исчезает, а вывод остается прежним.
Полная функция без ошибок:
FUNCTION {inproceedings}
{ output.bibitem
format.authors "author" output.check
after.item 'output.state :=
title empty$
'skip$
{ title format.title.noemph output
after.sentence 'output.state :=
}
if$
booktitle format.proc.title.in "booktitle" output.check
new.block
format.pub.address "publisher" output.check
format.bdate "year" output.check
pages empty$
'skip$
{ new.block
format.pages output }
if$
format.doi output
fin.entry
}
решение2
Спасибо за отчет. Обновленная версия 2.1 только что отправлена в CTAN.