
Tengo un archivo bst que acorta las entradas con más de 5 autores aet al. pero me gustaría modificarlo para que sea así para más de 4 autores. Creo que este es el fragmento de código relevante, pero ¿cómo puedo cambiarlo para obtener el comportamiento modificado?
Esta pregunta es similar aCambiar la función BibTeX "format.names" en el archivo .bst para forzar "et al." Citas para entradas con más de 3 autores.pero dado que este archivo bst ya realiza con éxito una función similar, quizás la probabilidad de que esta pregunta obtenga una respuesta sea mayor.
Esta sintaxis realmente es una BeaST... Si alguien pudiera explicarme qué está pasando aquí, se lo agradecería mucho.
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$
}
Fuente:http://mirror.unl.edu/ctan/macros/latex/contrib/nature/naturemag.bst
Respuesta1
Por razones que no me quedan del todo claras, cambiar el n.° 5 al n.° 3 funciona. Parece que los números 5 y 4 tienen el mismo comportamiento... Con mucho gusto aceptaría una respuesta que explique lo que está pasando aquí.
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$
}