在文内引用中列出所有作者

在文内引用中列出所有作者

我正在尝试在文内引用中列出所有作者。目前,et al.如果作者超过两位,则会显示。请指教。这是我的代码。

\usepackage[round, authoryear]{natbib}
\bibliographystyle{aomlike}  

以下是aomlike书目样式代码

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=   % last name first
      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$
}

答案1

format.names修改文件中的函数aomlike.bst似乎可行,但事实并非如此。相反,我们需要修改函数format.lab.names

我建议您按如下方式进行。

  • 复制一份aomlike.bst并将副本命名为aomlike2.bst。(您可以自由选择更具描述性的名称。)

  • 在文本编辑器中打开文件aomlike2.bst。你用来编辑 tex 文件的程序就可以了。

  • 在文件中aomlike2.bst找到函数的定义format.lab.names。在我的文件副本中,函数定义从第 971 行开始,占比略少于 20 行。

  • 删除(或注释掉)此函数定义并将其替换为以下 50 行 [!] 代码块:

    FUNCTION {space.word}
    { " " swap$ * " " * }
    FUNCTION {format.lab.names}
    {'s :=
     "" 't :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          "{vv~}{ll}" format.name$
          't :=
          nameptr #1 >
            {
              nameptr #100 =
              numnames #99 > and
                { "others" 't :=
                  #1 'namesleft := }
                'skip$
              if$
              namesleft #1 >
                { ", " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  t "others" =
                    {
                      " " * "et~al." *
                    }
                    {
                      numnames #2 >
                        { "," * }
                        'skip$
                      if$
                      "and"
                      space.word * t *
                    }
                  if$
                }
              if$
            }
            't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
  • 如果条目中有超过 99 位作者(或编辑),代码会截断引文标注中显示的作者姓名列表。我相信这在实践中并不是一个有约束力的限制。

  • 将文件保存aomlike2.bst在包含主 tex 文件的目录中,或保存在 BibTeX 搜索的目录中。如果选择第二个选项,请确保更新 TeX 发行版的文件名数据库。如果您不知道前面这句话的意思,我建议您选择选项 1。

  • 在您的主 tex 文件中,更改\bibliographystyle{aomlike}\bibliographystyle{aomlike2}并执行完整的重新编译循环,即重新运行 LaTeX、BibTeX 和 LaTeX 两次以上。

祝您 BibTeX 愉快!

相关内容