natbib:如何在参考文献中显示部分作者

natbib:如何在参考文献中显示部分作者

我正在使用natbib它来管理我的参考文献,现在我遇到一个问题:我的参考文献列表总是显示一篇文章的所有作者姓名:

Marcel H. Schulz, Daniel R. Zerbino, Martin Vingron, and Ewan Birney. Oases: robust
de novo RNA-seq assembly across the dynamic range of expression levels. Bioinformatics
(Oxford, England), 28(8):1086–1092, April 2012. 7, 9, 10, 40

我将选项设置为:

\usepackage[round, sort, numbers]{natbib}

\bibliographystyle{Latex/Classes/PhDbiblio-url2} 
\renewcommand{\bibname}{References} 
\bibliography{9_backmatter/references} 

并使用cite{}来引用参考文献。我尝试使用biblatex,但似乎与 不兼容natbib

\usepackage[maxnames=3]{biblatex}

我希望最多显示3位作者的全名,否则显示为et al.如何设置?

================

编辑:文件 PhDbiblio-url2.bst 可以在这里找到:https://bitbucket.org/dekz/thesis/src/3f8d8507cddc/Latex/Classes/PhDbiblio-url2.bst

这里的几行似乎定义了作者的显示:

INTEGERS { nameptr namesleft numnames }

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$
}

但是如何numnamestex文件中设置呢?

答案1

et al.我相信您需要在之前设置作者数量.bst,而不是从 LaTeX 中设置。

我认为下面的内容可以满足您的要求,我已经根据.bst我使用创建的内容对其进行了改编makebst. 只需替换format.names您的.bst

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

et al.如果您想更改使用之前的作者人数,请将#33 更改为正确的数字。如果您想更改et al.列表中出现的名称数量,请将前一行中的#1以下内容从 1 更改为正确的数字。nameptr#1 + =

答案2

好的。我用一个愚蠢的方法解决了它。在bib文件中,对于作者超过 3 位的文章,从列表中删除其他作者并代之others。然后参考资料最多显示 3 位作者和et~al。但无论如何,这有点乏味。

相关内容