引用:如何使用 unsrt 样式自动将长作者列表缩短为“xxx 等”?

引用:如何使用 unsrt 样式自动将长作者列表缩短为“xxx 等”?

我想通过在参考文献列表中一定数量的作者(例如 3 位)后添加 et al. 来缩短我的参考书目,使用 unsrt 样式。

在我的序言中,我添加了上标选项的 cite 包:

\usepackage[superscript,biblabel]{cite}

在我的文件中,参考书目是由

\bibliographystyle{unsrt}

这种方法很好,但是参考书目太长了,因为无论有多少作者,所有作者都是列表者。

我尝试按照 Mico 的回答进行操作(这个问题),但不幸的是完全失败了。我的 unsrt.bst 文件中的原始 format.name 函数如下所示:

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

这就是为什么我不知道在哪里更改行。如果我只更改您写的那一行

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
      nameptr #1 >
        nameptr #3
          #1 + =
          numnames #1
          > and
            { "et al." 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
    }
    't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

它 a) 不起作用,并且 b) 参考连接不再起作用。

我知道,我对此没有那么多的了解,这就是我询问如何解决这个问题的原因。

先感谢您!

答案1

在您的副本中替换以下内容并尝试:

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
      nameptr #1 >
    { nameptr #3 #1 + =
      numnames 
      #5 > and
      { "others" 't :=
        #1 
        'namesleft := }
        'skip$
      if$
    namesleft #1 >
        { ", " * t * }
        { numnames #2 >
        { "," * }
        'skip$
          if$
          t "others" =
        { " et~al." * }
        { " and " * t * }
          if$
        }
      if$
    }
    't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

相关内容