如何使 revtex4-2 书目样式与 Phys Rev 指南保持一致

如何使 revtex4-2 书目样式与 Phys Rev 指南保持一致

《物理评论》书目的样式指南提到作者列表应该被截断:

参考文献中应给出被引用论文的完整作者列表,除非数量超过 10 篇(对于《物理评论物理教育研究》限制为 3 篇)。

但这不是 REVTex4-2 文件的默认行为.bst。不仅如此,弄清楚如何实际截断参考文献中的作者数量非常麻烦 - 特别是因为使用参考书目样式的整个目的是让作者不必花时间担心格式细节。这对我来说毫无意义,甚至REVTex 常见问题解答提到这个:

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

有人能帮我理解一下吗?由于revtex-2与不兼容biblatex,这有点困难。我是不是忽略了一些显而易见的东西?比如一个documentclass可以让它工作的选项?有没有比编辑.bst文件更简单的方法?

目前还在学习在哪里进行适当的编辑apsrev4-2.bst以限制作者列表。此时,手动编辑文件中的作者会更快.bib,社区中的每个人都在说不是去做。

答案1

根据以下答案 这个问题我对 apsrev4-2.bst 进行了相应的编辑,以截断作者列表,最多显示 4 个名字。更新后的 format.names 函数复制到下方,更新后的 .bst 文件位于这里。要使用更新的 .bst 文件,请下载它并将其添加到 latex 项目中。然后调用

\bibliographystyle{apsrev4-2-author-truncate}
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 *
          } {
            nameptr #3
            #1 + =
            numnames #4
            > and
              { "others" 't :=
                #1 'namesleft := }
              'skip$
            if$
            namesleft #1 >
              {
                names.punctuate
                t *
              } {
                s nameptr "{ll}" format.name$ duplicate$ "others" =
                  { 't := }
                  { pop$ }
                if$
                numnames #2 >
                  'names.comma
                  'skip$
                if$
                t "others" =
                  {
                    " " *
                    bbl.etal
                    emphasize
                    *
                  } {
                    bbl.and
                    space.word *
                    t *
                  }
                if$
              }
            if$
          }
        if$
        nameptr #1 + 'nameptr :=
        namesleft #1 - 'namesleft :=
      }
    while$
  } if$
}

相关内容