So ändern Sie bst, um nach n Autoren zu et al. abzukürzen

So ändern Sie bst, um nach n Autoren zu et al. abzukürzen

Ich habe eine bst-Datei, die Einträge mit mehr als 5 Autoren verkürzt aufet al. aber ich möchte es so ändern, dass es für mehr als 4 Autoren funktioniert. Ich glaube, dies ist der relevante Codeausschnitt, aber wie kann ich ihn ändern, um das geänderte Verhalten zu erhalten?
Diese Frage ähneltÄndern der BibTeX-Funktion „format.names“ in der BST-Datei, um „et al.“-Zitate für Einträge mit mehr als 3 Autoren zu erzwingenDa diese BST-Datei jedoch bereits erfolgreich eine ähnliche Funktion ausführt, ist die Wahrscheinlichkeit, dass diese Frage eine Antwort erhält, möglicherweise höher.

Diese Syntax ist wirklich ein Biest ... Ich wäre sehr dankbar, wenn mir jemand auch nur erklären könnte, was hier vor sich geht.

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$
}

Quelle:http://mirror.unl.edu/ctan/macros/latex/contrib/nature/naturemag.bst

Antwort1

Aus mir völlig unklaren Gründen funktioniert die Änderung von #5 in #3. Es scheint, dass #5 und #4 das gleiche Verhalten haben ... Ich würde mich über eine Antwort freuen, die erklärt, was hier vor sich geht.

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$
}

verwandte Informationen