如何使用 APA 样式显示参考文献列表中的前 6 位作者和最后一位作者

如何使用 APA 样式显示参考文献列表中的前 6 位作者和最后一位作者

这个问题涉及文档末尾的参考书目/参考文献列表,而不是文内引用。

我想使用 apa-good.bst 作为我的参考书目样式。我的一些参考文献的作者远不止 7 位。按照 APA 样式引用的指导方针,应列出前 6 位作者,然后是“...”,然后是最后一位作者。经过大量的谷歌搜索,我没有找到一个有效的解决方案。我的计划是修改函数 {格式名称}但我的 LaTeX 编码知识相当差。我只设法输入了将总作者列表缩减为 7 位作者的部分。现在显示为:

FUNCTION {format.names} 
{ 'bibinfo :=  
duplicate$ empty$ 'skip$ {  
's := 
 "" 't :=
 #1 'nameptr :=
 s num.names$ 'numnames :=
 numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
  "{vv~}{ll}{, f.}{, jj}"
  format.name$
  bibinfo bibinfo.check
  't :=
  nameptr #1 >
     {
    nameptr #7
    #1 + =
    numnames #7 
   > and
    { "others" 't :=
    #1 'namesleft := }
    'skip$
    if$
       namesleft #1 >
        { ", " * t * }
        {
          "," *
          s nameptr "{ll}" format.name$ duplicate$ "others" =
            { 't := }
            { pop$ }
          if$
          t "others" =
            {
              " " * bbl.etal *
            }
            {
              "\&"
              space.word * t *
            }
          if$
        }
      if$
    }
    't
  if$
  nameptr #1 + 'nameptr :=
  namesleft #1 - 'namesleft :=
}  while$
  } if$
}

这会将作者列表缩减为最多 7 位作者,但不是“作者 6,...,作者 70”,而是“作者 6,等”。

您是否知道如何、分别在何处更改函数以符合指南?[APA 样式第 6 版,7 位或更多作者1

感谢您的时间和想法,

露西

答案1

我不会通过修改apa-good书目样式来做相当于重新发明轮子的事情。相反,我会使用apaciteLaTeX 包和apacite书目样式。它们共同实现了您在排版书目条目方面所寻找的与八个或更多作者/编辑相关的内容。

如果您希望能够使用 natbib 样式的引用命令,例如citet\citep,只需apacite使用选项 加载包natbibapa

在此处输入图片描述

\RequirePackage{filecontents}
\begin{filecontents}{mybib.bib}
@misc{abc...xyz:3001,
  author = "A and B and C and D and E and F and G and X and Y and Z",
  title = "Thoughts",
  year  = 3001,
}
\end{filecontents}

\documentclass{article}
\usepackage{apacite}
\bibliographystyle{apacite}

\begin{document}
\nocite{*}
\bibliography{mybib}
\end{document}

答案2

如果仍然有用,我修改了原来的内容format.namesapa-good.bst插入新标准。它应该是这样的

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}{, f.}{, jj}"
      format.name$
      bibinfo bibinfo.check
      't :=
      nameptr #1 >
      { namesleft #1 >
        nameptr #7 <
        and
          { ", " * t * }
          { numnames #2 >
            nameptr #7 <
            and
              { "," * }
              'skip$
              if$
            t "others" =
              { " ..." * }
              { nameptr #7 <
                nameptr numnames =
                or
                numnames #7 >
                and
                  {", ..., and " * t * }
                  { nameptr #7 <
                    nameptr numnames =
                    or
                      {" and " * t * }
                      'skip$
                    if$
                  }
                if$
              }
            if$
          }
        if$
      }
      numnames #7 >
      nameptr #7 >
      nameptr numnames <
      and and
        {"" 't :=}
        'skip$
        if$
      't
        if$
        nameptr #1 + 'nameptr :=
        namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

相关内容