平均能量损失

平均能量损失

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

  1. 复制h-physrev.bsthttps://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,文档目录就可以了)。

  2. 将文件重命名h-physrev-fix.bst

  3. 代替

     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 将导致

M. 作者,贡献,书名,第 10547 卷,第 9 页,2018 年。

BibTeX 运行中没有错误。

相关内容