n 人の著者の後に bst を et al. に省略するにはどうすればいいですか

n 人の著者の後に bst を et al. に省略するにはどうすればいいですか

5人以上の著者がいるエントリを短縮するbstファイルがあります しかし、4人以上の著者に対しても実行できるように変更したいです。これは関連するコードスニペットだと思いますが、変更した動作を得るにはどうすればよいですか?
この質問は次の質問に似ています。.bst ファイルの BibTeX "format.names" 関数を変更して、著者が 3 人以上のエントリに "et al." 引用を強制するしかし、この 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 >
        {
          nameptr #1
          #1 + =
          numnames #5
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal emphasize *
                }
                {
                  "\&"
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

ソース:http://mirror.unl.edu/ctan/macros/latex/contrib/nature/naturemag.bst

答え1

理由はまったくわかりませんが、#5 を #3 に変更すると機能します。#5 と #4 は同じ動作をしているようです...ここで何が起こっているのかを説明する回答を喜んで受け入れます。

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 #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" =
                {
                  " " * bbl.etal emphasize *
                }
                {
                  "\&"
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

関連情報