bjnano.bst는 @Inproceedings에 대해 "항목 XXX에 대해 빈 리터럴 스택을 팝할 수 없습니다" 오류를 발생시킵니다.

bjnano.bst는 @Inproceedings에 대해 "항목 XXX에 대해 빈 리터럴 스택을 팝할 수 없습니다" 오류를 발생시킵니다.

나는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(2020-02-26 날짜)에 존재하며 새 버전 업데이트로 수정될 예정입니다.

답변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으로 전송되었습니다.

관련 정보