Comment générer l'expression «//et al.//» automatiquement?
Lorsqu'on a une longue liste d'auteurs, il peut être
souhaitable que tous les auteurs n'apparaissent pas dans la
bibliographie. On mettra donc les 4 premiers, puis et al.
Pour ce faire, on modifie la fonction format.names
(qui est
généralement toujours semblable à celle ci-dessous) et on ajoute
un test sur le nombre d'auteurs :
FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " et~al." * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := % ------------------------------ % (debut des ajouts) % si à ce stade on se retrouve avec des noms à placer % et que le pointeur nameptr est égal à 4 alors % il faut : % 1. ajouter un "et~al." % 2. ne pas prendre en compte les auteurs suivants : % on met donc namesleft à 0. % nameptr #4 = namesleft #0 > and { " \emph{et~al.}" * #0 'namesleft := } 'skip$ if$ % % NB : pour mettre 3 noms au lieu de 4, on mettra #3 % au lieu de #4 ci-dessus. % (fin des ajouts) % ------------------------------ } while$ }