在 .bst 文件中格式化 bib 的作者

在 .bst 文件中格式化 bib 的作者

我想要当.bib文件中有超过三位作者时,latex可以自动截断作者。

Tang, J. and Scellato, S. and Musolesi, M. and Mascolo, C. and Latora, V.在 .bib 文件中应该在论文中显示为Tang, J., Scellato, S. and Musolesi, M. et al.

预期格式第一作者第二作者第三作者

我得到了 apsrev4-1.bst。截断作者的解决方案当有 5 位或更多作者时

当有 5 位或更多作者时,如何获取截断的参考文献,例如“Ann Author et al.”?

REVTeX 4.1 中发布的 BibTeX 样式文件不再截断参考文献的作者列表(如果作者超过 10 位,REVTeX 4 的 .bst 文件会截断列表)。APS 编辑更喜欢对作者不超过 15 位的参考文献使用完整的作者列表。对于较长的列表,请使用短语“和其他”代替要省略的作者。

但是需要在 .bib 文件中添加“and others”。如何自动格式化作者而不按照我期望的格式修改 .bib 文件?

@Article{2010Tang.J,
  Title                    = {Small-world behavior in time-varying graphs},
  Author                   = {Tang, J. and Scellato, S. and Musolesi, M. and Mascolo, C. and Latora, V.},
  Journal                  = {Phys. Rev. E},
  Year                     = {2010},

  Month                    = {May},
  Pages                    = {055101},
  Volume                   = {81},

  Doi                      = {10.1103/PhysRevE.81.055101},
  File                     = {:..\\pdfs\\Small-worldbehaviorintime-varyinggraphs\\Small-worldbehaviorintime-varyinggraphs.pdf:PDF},
  Issue                    = {5},
  Numpages                 = {4},
  Publisher                = {American Physical Society},
  Url                      = {http://link.aps.org/doi/10.1103/PhysRevE.81.055101}
}

format.namesapsrev4-1.bst 中的

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ { pop$ "" } {
    duplicate$ num.names$
    duplicate$ 'numnames :=
    'namesleft :=
    's :=
    #1 'nameptr :=
    ""
      { namesleft #0 > }
      {
      format.names.morfont
        bibinfo bibinfo.check
        type$ "presentation" =
          'check.speaker
          'skip$
        if$
        't :=
        nameptr #1 > not
          {
            t *
          } {
            namesleft #1 >
              {
                names.punctuate
                t *
              } {
                s nameptr "{ll}" format.name$ duplicate$ "others" =
                  { 't := }
                  { pop$ }
                if$
                numnames #2 >
                  'names.punctuate
                  'skip$
                if$
                t "others" =
                  {
                    " " *
                    bbl.etal
                    emphasize
                    *
                  } {
                    bbl.and
                    space.word *
                    t *
                  }
                if$
              }
            if$
          }
        if$
        nameptr #1 + 'nameptr :=
        namesleft #1 - 'namesleft :=
      }
    while$
  } if$
}

相关内容