Bibtex:定制 bst 文件

Bibtex:定制 bst 文件

使用makebst例程,我创建了一个 bst 文件,该文件基本符合我的需要,唯一的例外是条目incollection。目前,参考文献的编译方式如下:

在此处输入图片描述

尽管如此,参考样式应该是这样的:

在此处输入图片描述

所以有三个不同点。(eds)应该在编辑姓名后面,其次,我需要删除最后一位编辑后面的最后一个逗号,最后在出版商位置之后和页码之前,应该有一个分号而不是逗号。

以下是包含用于复制的完整 bst 文件的 Gist 链接:https://gist.github.com/anonymous/d2c33f3ecc03f5f52109d4d291b68013

这是incollection我的 bst 文件中的函数:

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  author format.key output
  format.date "year" output.check
  date.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.publisher.address output
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      format.edition output
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  new.block
  format.note output
  fin.entry
}

我发现需要调整的部分是format.in.ed.booktitle

FUNCTION {format.in.ed.booktitle}
{ format.booktitle duplicate$ empty$ 'skip$
     {
       format.bvolume duplicate$ empty$ 'pop$
         { " " swap$ * * }
       if$
       editor "editor" format.names.ed duplicate$ empty$ 'pop$
         {
           bbl.editors
           " " * swap$ *
           swap$
           "" *
           ", " * swap$
           * }
       if$
       word.in swap$ *
     }
   if$
}

其中bbl.editors已重新定义了产品(编辑):

FUNCTION {bbl.editors}
{ "(eds)" }

此外,这里是确切的围兜条目:

@incollection{Greene2008,
address = {New York, NY},
author = {Greene, William},
booktitle = {The Measurement of Productive Efficiency and Productivity},
editor = {Fried, Harold O. and Lovell, C.A. Knox and Schmidt, Shelton S.},
pages = {92--250},
publisher = {Oxford University Press},
title = {{The Econometric Approach to Efficiency Analysis}},
year = {2008}
}

如果您需要任何进一步的代码片段或信息来回答这个问题,请告诉我,我们将非常感激您的帮助。

编辑:我意识到这可能是一个很难的问题,但如果有人能向我描述第二段代码中到底发生了什么,可能会有所帮助,因为我确信问题和解决方案就在这里。

答案1

经过几天的努力,我终于解决了这个问题。以下是修订后的部分,希望以后有人会对此感兴趣:

FUNCTION {format.in.ed.booktitle}
{ format.booktitle duplicate$ empty$ 'skip$
    {
      editor "editor" format.names.ed duplicate$ empty$ 'pop$
        {
          get.bbl.editor
          swap$ "" *
          " " * swap$ *
          swap$
          "," *
          " " * swap$
          * }
      if$
      word.in swap$ *
    }
  if$
}

也:

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  author format.key output
  format.date "year" output.check
  date.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      new.block
      format.publisher.address output
      new.block
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      format.edition output
      format.isbn output
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  format.doi output
  new.block
  format.note output
  fin.entry
}

相关内容