elsarticle-num.bst:年份在参考书目条目中出现两次

elsarticle-num.bst:年份在参考书目条目中出现两次

继续解决杂项条目https://tex.stackexchange.com/a/482872,让我们考虑输入

\documentclass{elsarticle}%% V3.1 from https://ctan.org/tex-archive/macros/latex/contrib/elsarticle
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{LevesonTurner-InvestigationOfTheTherac25Accidents,
  author    = {Nancy Gail Leveson and Clark Savage Turner},
  title     = {Investigation of the {Therac}-25 accidents},
  journal   = {{IEEE} Computer},
  volume    = 26,
  number    = 7,
  pages     = {18--41},
  year      = 1993
}
\end{filecontents}
\bibliographystyle{elsarticle-num}%%% V2.1 From https://ctan.org/tex-archive/macros/latex/contrib/elsarticle
\begin{document}
\cite{LevesonTurner-InvestigationOfTheTherac25Accidents}
\bibliography{\jobname}
\end{document}

运行标准pdflatex-bibtex循环会产生(1993)两次年份:年两次

当我看着样式文件在第 1177 行左右,我看到年份仅被处理一次:

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  title empty$ 'skip$ 'setup.inlinelink if$ % urlbst
  format.title "title" output.check
  crossref missing$
    { journal
      "journal" output.check
      % add.blank
  before.all 'output.state :=
      format.vol.num.pages output
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  format.journal.pages
  format.note output
    format.date "year" output.check
  fin.entry
  write.url
}

我看不出哪里出了问题。有错误修复吗?

答案1

直接从article函数来看,年份确实只处理一次。但是,函数format.journal.pages(由 调用article)出于某种原因这样做了。该函数如下所示(位于 的第 797 行elsarticle-num.bst):

FUNCTION {format.journal.pages}
{ pages empty$
    'skip$
    { duplicate$ empty$
        { pop$ format.pages }
        {
          " " *
          format.year * " " * % <-- This guy here
          pages n.dashify *
        }
      if$
    }
  if$
}

在正常情况下,如果pages条目存在,代码会添加一个空格 ( " " *),年份后面由于某种原因又加了一个空格 ( format.year * " " *),然后才添加页数 ( pages n.dashify *)。因此,如果您注释掉添加年份和空格的行,那么您就只剩下 了<space> pages

回答你的评论,我会注释掉这个例子,因为year

  1. 它在format.journal.pages函数中,因此从语义上讲它在错误的位置,因此代码很笨拙。您自己看到了 :)

  2. 大多数其他条目类型以以下内容结尾:

    format.note output
      format.date "year" output.check
    fin.entry
    write.url
    

    因此年份是 URL 前面的最后一项。如果只是类型article有不同的约定,看起来会很奇怪;

  3. 如果pages没有给出条目,BibTeX 将不会到达条件的分支,并且年份将“神秘地”消失。

答案2

使用旧版本(版权所有 2007、2008、2009 Elsevier Ltd)

尝试这个 https://github.com/gagolews/bibliography/blob/master/elsarticle-num.bst

相关内容