
У меня есть файл bst, который сокращает записи с более чем 5 авторами дои другие. но я хотел бы изменить его, чтобы сделать это для более чем 4 авторов. Я считаю, что это соответствующий фрагмент кода, но как я могу изменить его, чтобы получить измененное поведение?
Этот вопрос похож наИзменение функции BibTeX "format.names" в файле .bst для принудительного цитирования "et al." для записей с более чем 3 авторамино поскольку данный bst-файл уже успешно выполняет аналогичную функцию, возможно, вероятность получения ответа на этот вопрос будет выше.
Этот синтаксис действительно BeaST... Если бы кто-нибудь мог мне просто объяснить, что здесь происходит, я был бы очень признателен.
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$
}