h-physrev.bst
我的目标是在 Linux 机器上将bibstyle 与 bibtex 一起使用。bibstyle 文件可从以下网址下载:https://arxiv.org/help/hypertex/bibstyles/
平均能量损失
到目前为止一切顺利,但现在我对其中一个条目遇到了问题 - 请参阅以下 MWE:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@InProceedings{my_entry,
author = {My Author},
title = {Conribution},
booktitle = {Book title},
year = {2018},
volume = {10547},
pages = {9},
month = feb,
doi = {10.1117/12.2300061},
}
\end{filecontents*}
\documentclass{scrartcl}
\begin{document}
\nocite{*}
\bibliography{\jobname}
\bibliographystyle{h-physrev}
\end{document}
我看到的 bibtex 错误消息是:
This is BibTeX, Version 0.99d (TeX Live 2018/Arch Linux)
The top-level auxiliary file: test_bibtex_h-physrev.aux
The style file: h-physrev.bst
Database file #1: test_bibtex_h-physrev.bib
You can't pop an empty literal stack for entry my_entry
while executing---line 944 of file h-physrev.bst
(There was 1 error message)
在追溯错误的过程中,我发现音量条目导致了either.or.check
样式文件第 275 行函数调用中的错误。
问题
联系bibtex 风格作家手册,我仍然没有完全理解 bst 编程命令:变量'pop$
到底起什么作用,它在那里有意义吗?或者它应该是其他什么命令(例如用 替换它来'skip$
解决错误)?
答案1
复制
h-physrev.bst
自https://static.arxiv.org/static/arxiv.marxdown/0.1/help/hypertex/bibstyles/h-physrev.bst(通过https://arxiv.org/help/hypertex/bibstyles/)到 LaTeX(或者更确切地说是 BibTeX)可以找到的地方(参见https://texfaq.org/FAQ-inst-wlcf,文档目录就可以了)。将文件重命名
h-physrev-fix.bst
为代替
FUNCTION {format.bvolume} { volume empty$ { "" } { series empty$ 'skip$ { ", " series * } if$ " Vol." volume tie.or.space.connect * "volume and number" number either.or.check } if$ }
在第 281-292 行中
FUNCTION {format.bvolume} { volume empty$ { "" } { series empty$ { "" } { series ", " * } if$ " Vol." volume tie.or.space.connect * "volume and number" number either.or.check } if$ }
h-physrev-fix
然后在您的文档中使用重命名的文件。
那么这里发生了什么?除了增加缩进以方便阅读之外,您会注意到只有series empty$
条件发生了变化。在旧版本中,如果volume
字段非空,但为series
空,则'skip$
将使堆栈保持为空,并" Vol." volume tie.or.space.connect *
尝试将字符串Vol. <volume>
与空文字连接起来,从而导致错误。新版本在这种情况下会在堆栈上留下一个空字符串,因此不会引发错误,它还修复了周围的标点符号series
。
使用修复后的文件,上面的 MWE 将导致
BibTeX 运行中没有错误。