修改 bst 文件,使文本中的 2 个作者之间用“and”隔开

修改 bst 文件,使文本中的 2 个作者之间用“and”隔开

我必须使用自定义 .bst 文件来处理一篇论文。当我的参考文献恰好有两位作者时,这些作者会被分开在文本中用“ , ”表示。
例如 (Simonyan , Zisserman, 2014)。我希望它是 (Simonyan and Zisserman, 2014)。
在我的参考书目中,这种风格是正确的。那么,是否有必要更改 .bst 文件?
我认为以下是相关行:

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  'f :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr f format.name$ 't :=
      nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
            { t "others" =
                { " et~al." * }
                { ", " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { "{vv~}{ll}{, jj}{, f.}" author format.names }
  if$
}

答案1

相关的宏是format.lab.names.abbr。对于“and”,它必须读取

FUNCTION {format.lab.names.abbr}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #2 >
        { s #1 "{vv~}{ll}" format.name$ " et al." * }
        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
            { s #1 "{vv~}{ll}" format.name$ " et al." * }
            { s #1 "{vv~}{ll}" format.name$ " and " *
              s #2 "{vv~}{ll}" format.name$ * 
            }
          if$
        }
      if$
    }
    { s #1 "{vv~}{ll}" format.name$ }
  if$
}

更改位于最内层条件的第二个分支中。isprs.bst当前可用的版本为http://www.isprs.org/documents/orangebook/app5.aspx

s #1 "{vv~}{ll}" format.name$ " , " * % replaced and with ,

在那里我们让它读

s #1 "{vv~}{ll}" format.name$ " and " *

再次。请注意他们的评论和逗号前的虚假空格。


当然,您仍应将此问题报告给模板的维护者,并且不应.bst直接修改文件。只需修改并重命名副本isprs-and.bst,然后记录更改。

相关内容