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