Chapter 15 Bibliographie sous LATEX
La plupart des documents scientifiques utilisent les
références bibliographiques. LATEX permet une gestion aisée et
pratique.
15.1 Comment construire une bibliographie ?
Il existe deux techniques pour construire une bibliographie :
-
la première consiste à l'intégrer dans le corps même du document (fichier.tex),
- la seconde consiste à la définir dans un fichier particulier (fichier.bib)
puis à l'appeler dans le corps du document.
Technique on-line : Il suffit d'appeler l'environnement thebibliography
et de définir des bibitem.
-
Exemple
- :
-
\begin{thebibliography}{2}
\bibitem[label]{cle} Auteur, TITRE, editeur, annee
\bibitem[LAM94]{lam1} L. LAMPORT, {\it \LaTeX : A Document
preparation system, Addison-Wesley, 1994}
\end{thebibliography}
%%%% fin exemple %%%%
[label] définit le label qui apparaîtra dans la bibliographie
et dans le texte après appel de la commande \cite{cle}.
BibTeX permet de construire simplement une bibliographie. La technique
consiste alors à écrire un ou plusieurs fichiers.bib qui seront appelés
dans le document source par la commande \bibliography{fichier1,
fichier2,...}. BibTeX est disponible sur ftp://ftp.fdn.org/pub/CTAN/biblio/bibtex.
Le style de la bibliographie doit être défini par \bibliographystyle{xxx}
avec xxx valant généralement plain ou alpha, mais il existe aussi
d'autres styles. La commande \bibliographystyle doit
être appelée après \begin{document}.
Le contenu d'un fichier.bib est un ensemble de déclarations du style
:
-
@ARTICLE{cle,
author = "liste-noms-auteur",
title = "titre-article",
journal = "nom-journal",
year = "annee-parution",
}
% OPTIONAL FIELDS
% volume = "",
% number = "",
% pages = "",
% month = "",
% note = "",
La syntaxe des différentes déclarations possibles peut se trouver
dans toute bonne documentation LATEX ou dans les menus des éditeurs
tels que emacs ou Alpha.
Losqu'on utilise BibTeX, il faut alors enchaîner plusieurs compilations
pour que toutes les références soient exactes. Généralement, il faut
exécuter une passe LATEX, une passe Bibtex et encore deux passes
LATEX.
Pour pouvoir inclure dans la bibliographie des références à des documents
qui ne sont pas cités explicitement par une commande \cite,
il suffit d'inclure la commande \nocite{la-ref-non-citee}
avant la commande \bibliography{fichier_biblio}.
Pour faire apparaître toutes les références non citées sans toutes
les énumérer, on peut utiliser \nocite{*}.
BIBDB, disponible sur CTAN, est un gestionnaire de bibliographie BIBTEX,
facile à manipuler qui tourne sous DOS.
Bibview est un programme tournant sous X11 et permettant la saisie
et la consultation de fichiers bibtex.
15.2 Comment gérer plusieurs bibliographies ?
Le package 'chapterbib' permet d'inclure une bibliographie par chapitre.
Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/cite/.
Les bibliographies réparties peuvent alors apparaître comme section
de ce chapitre grâce à la commande :
-
\usepackage[sectionbib]{chapterbib}.
Le package 'bibunits', de A. Fernandez, permet de partager une bibliographie
en plusieurs unités, chacune attenante à une section, ou à un chapitre
d'un article ou d'un livre donné.
-
Exemple :
-
-
////////////// fichier rapport.tex /////////////
\documentclass[a4paper]{report}
\usepackage{bibunits}
\usepackage{french}
\begin{document}
\chapter{Algorithmes.}
Présentation d'algorithmes.
\nocite*
\bibliographystyle{alpha}
\bibliography{alg}
\chapter{Géométrie.}
Texte sur la géométrie.
\nocite*
\bibliographystyle{plain}
\bibliography{geom}
\end{document}
////////////// fichier alg.bib /////////////
@UNPUBLISHED{algg,
author = MPK,
title = Algorithmes et rythmes,
note = RAS,
}
////////////// fichier geom.bib /////////////
@INBOOK{geomm,
author = Me again,
title = Principes de géométrie,
chapter = Les droites,
publisher = Home publishing,
year = 1997,
}
%%%% fin exemple %%%%
Le package 'bibtopics', de P. Basso, permet de contruire une bibliographie
générale comportant des rubriques diverses (livres, articles, thèses,
...) ou des sujets divers (physique, mathématiques, ...). Il est disponible
par ftp sur ftp://ftp.gutenberg.eu.org/pub/gut/contrib/.
-
Remarque
- : pour les versions récentes de LATEX, il peut être nécessaire
d'inclure dans le préambule du document les lignes :
-
\makeatletter
\let\if@openbib\iffalse
\makeatother
Voici un petit fichier 'multibib.sty' de V. Henn, créé en recopiant
les définitions LATEX des commandes relatives à la gestion des
bibliographies, et en les rendant paramétrables.
Les commandes qui ont été définies sont :
-
\newbibliographyGENE{biblio} pour déclarer une bibliographie
biblio.
- \citeGENE{biblio}{clé} pour appeler une référence.
- \bibliographystyleGENE{biblio-x}{alpha} pour définir
le style de biblio.
- \bibliographyGENE{biblio}{fichier-biblio1} pour
faire référence au fichier fichier-biblio1.bib qui contient les références.
-
%%%% debut macro %%%%
%% A sauver dans multibib.sty
%%%%%% biblio generique %%%%%%%%
\newcommand\newbibliographyGENE[1]{%
\expandafter\expandafter\expandafter\newwrite\@nameuse{@#1aux}
\immediate\expandafter\expandafter\openout\@nameuse{@#1aux}=#1.aux
%\expandafter\expandafter\expandafter\show\@nameuse{@#1aux}
}
\def\citeGENE#1{\@ifnextchar [{\@tempswatrue\@citexGENE{#1}}%
{\@tempswafalse\@citexGENE{#1}[]}}
\def\@citexGENE#1[#2]#3{\if@filesw\immediate\expandafter%
\expandafter\expandafter\write\@nameuse{@#1aux}{\string%
\citation{#3}}\fi
\let\@citea\@empty
\@cite{\@for\@citeb:=#3\do
{\@citea\def\@citea{,\penalty\@m\ }%
\def\@tempa##1##2\@nil{\edef\@citeb{\if##1\space##2%
\else##1##2\fi}}%
\expandafter\@tempa\@citeb\@nil
\@ifundefined{b@\@citeb}{{\reset@font\bf ?}\@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
\hbox{\csname b@\@citeb\endcsname}}}{#2}}
\def\bibliographyGENE#1#2{\if@filesw\immediate\expandafter%
\expandafter\expandafter\write\@nameuse{@#1aux}{\string%
\bibdata{#2}}\fi
\@input{#1.bbl}}
\def\bibliographystyleGENE#1#2{\if@filesw\immediate\expandafter%
\expandafter\expandafter\write\@nameuse{@#1aux}
{\string\bibstyle{#2}}\fi}
\def\nociteGENE#1#2{\@bsphack
\if@filesw\immediate\write\@nameuse{@#1aux}{\string%
\citation{#2}}\fi
\@esphack}
%%%% fin macro %%%%
-
Exemple d'utilisation :
- Les fichiers gene.bib et speci.bib contiennent
respectivement une référence bibliographie de clé cle-gene et cle-speci.
-
\documentclass{report}
\usepackage{multibib}
\usepackage{french}
\begin{document}
\newbibliographyGENE{Toto}
\newbibliographyGENE{Titi}
\chapter{Introduction.}
blabla bla \citeGENE{Toto}{cle-gene} et
\citeGENE{Titi}{cle-speci} rebla rebla rebla
\bibliographystyleGENE{Toto}{plain}
\bibliographyGENE{Toto}{gene}
\bibliographystyleGENE{Titi}{alpha}
\bibliographyGENE{Titi}{speci}
\end{document}
il faut alors compiler de la manière suivante :
-
latex fichier-source
bibtex Toto
bibtex Titi
latex fichier-source
latex fichier-source
%%%% fin exemple %%%%
15.3 Comment changer de langue dans une bibliographie ?
Il existe des versions francisées des styles bibliographiques (fplain,
falpha, fralpha, frealfullname...) qui ne sont pas parfaits mais qui
peuvent être modifiés facilement. Voir la distribution GUTenberg.
-
Exemple :
-
-
\documentstyle{falpha}
%%%% fin exemple %%%%
Sachant que les items d'une bibliographie sont des paragraphes, ils
peuvent commencer par la spécification d'une langue. Si on utilise
le package 'french', on dispose des commandes \french
et \english et si l'on utilise le package 'babel',
il faut utiliser la commande \selectlanguage{} (cf.
paragraphe ??).
Voir également le package 'frbib' pour les bibliographies françaises.
Le package 'mlbib' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/mlbib/
permet de gérer des bibliographies multilingues.
15.4 Comment renvoyer une référence en note de bas de page ?
Pour remplacer une référence insérée dans le texte par la commande
\cite, par un appel à une note de bas de page contenant
une référence succinte à un document (la référence détaillée apparaissant
toujours dans la bibliographie), il faut redéfinir la commande \cite
dans le préambule du document par :
-
%%%% debut macro %%%%
\makeatletter
\def\@cite#1#2{%
\footnote{#1\if@tempswa, #2\fi}}
\makeatother
%%%% fin macro %%%%
Les informations reportées dans la note de bas de page dépendent du
style de bibliographie choisi.
Le package 'overcite', de D. Arseneau, est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/cite/.
Il permet de faire référence à des documents par un exposant.
Le problème qui se pose alors est de distinguer les références, des
notes de bas de page. Si le document contient moins de 10 notes de
bas de page, on peut utiliser la commande \renewcommand{\thefootnote}{\fnsymbol{footnote}}.
Sinon pour disposer de 10 notes de bas de page par page, il existe
le package 'footmisc' de R. Fairbairns disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/footmisc/.
-
Exemple :
-
-
\usepackage[perpage,symbol]{footmisc}
%%%% fin exemple %%%%
Le package 'camel' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/camel/,
propose différents styles de bibliographies renvoyant à des notes
de bas de page.
E. Domenjoud a également écrit le package 'footbib', disponible sur
CTAN, qui permet de faire cela. Eric.Domenjoud@loria.fr.
15.5 Comment faire référence à un document ?
Il suffit d'utiliser la commande \cite avec en paramètre
la clé du document (cf. paragraphe ??). La commande \cite
peut prendre un texte en option.
-
Exemple :
-
-
Voir: \cite[chapitre 1]{cle}.
%%%% fin exemple %%%%
15.6 Comment grouper des références multiples ?
Le package 'cite' de D. Arseneau est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/cite/.
Il permet de trier et de grouper les références multiples. Par exemple,
il permet automatiquement de générer [1-6] au lieu de lister [1,
2, 3, 4, 5, 6].
Il existe également les packages 'mcite' et 'rangecite' (pour LATEX2.09)
disponibles sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/mcite/
et dans ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/misc/.
15.7 Comment changer le titre de la bibliographie ?
Suivant la classe de document que l'on utilise (article, book, report,
...), il faut redéfinir :
-
\renewcommand{\bibname}{R\'ef\'erences}
ou
-
\renewcommand{\refname}{R\'ef\'erences}
dans le préambule.
-
Remarque
- : avec certains packages comme french, il faut placer cette
nouvelle définition de commande après le \begin{document}.
15.8 Comment changer le style de la bibliographie ?
Il existe un certain nombre de style par défaut (alpha, plain, unsrt,
abbrrv) que l'on peut appeler par la commande \bibliographystyle{xxx}
placée après la commande \begin{document}.
-
Remarque
- : Certains styles comme plain, acm ou apalike trient alphabétiquement
les références d'une bibliographie suivant le premier auteur de chaque
référence. D'autres comme alpha utilisent la première lettre du nom
de chacun des auteurs multiples.
Il existe également le package 'custom-bib' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/custom-bib/
qui permet de définir ses propres styles sans avoir à se plonger dans
le language BibTeX. Le programme est interactif.
De même le package 'natbib' est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/natbib.
Il permet entre autres de classer la bibliographie de plusieurs façons
différentes, notamment par ordre alphabétique pour les auteurs, par
l'année de parution, etc.
Pour remplacer la numérotation [1] par 1., on peut utiliser la
commande :
-
\makeatletter
\renewcommand{\@biblabel}[1]{\quad #1.}
\makeatother
Pour supprimer toute numérotation, il faut utiliser de la même manière
:
-
\makeatletter
\renewcommand{\@biblabel}[1]{}
\makeatother
Le package 'easybib' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/easy/
permet par une syntaxe simple de définir ses propres styles bibliographiques.
15.9 Comment construire une bibliographie à partir de plusieurs fichiers
.bib ?
Pour cela il existe le package 'biblist' de J. chrod, disponible sur
ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/biblist/.
-
Exemple :
-
-
\documentclass[12pt]{article}
\usepackage{biblist}
\begin{document}
\nocite{*}
\bibliographystyle{plain}
\bibliography{bibfile1,bibfile2,...}
\end{document}
%%%% fin exemple %%%%
15.10 Comment utiliser la commande \cite dans un \caption
?
On peut mettre la commande \cite dans un \caption
à condition de la protéger : \protect\cite.
15.11 Comment référencer une thèse française ou un mémoire ?
Il faut définir de nouvelles références. Pour cela, copier le fichier
.bst dans un autre fichier .bst avec un nom différent et rechercher
PhD thesis puis remplacer par Thèse de doctorat.
-
Exemple :
-
-
FUNCTION {thesedoc}
{ output.bibitem
format.authors "author" output.check
new.block
format.btitle "title" output.check
new.block
"Th\`ese de Doctorat" format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
new.block
note output
fin.entry
}
%%%% fin exemple %%%%
Idem pour les mémoires de DEA :
-
FUNCTION {memdea}
{ output.bibitem
format.authors "author" output.check
new.block
format.title "title" output.check
new.block
"M\'emoire de D.E.A." format.thesis.type output.nonnull
school "school" output.check
address output
format.date "year" output.check
new.block
note output
fin.entry
}
15.12 Comment supprimer la virgule supplémentaire dans une liste d'auteurs
?
Par défaut, dans une liste d'auteurs le ``et'' qui introduit le
dernier auteur est précédé d'une virgule. Pour la supprimer, il faut
modifier la fonction format.names dans un nouveau fichier .bst de
la manière suivante :
-
%%%% debut macro %%%%
FUNCTION {format.names}
{ 's :=3D
#1 'nameptr :=3D
s num.names$ 'numnames :=3D
numnames 'namesleft :=3D
{ namesleft #0 > }
{ s nameptr "{ff}{vv}{ll}{, jj}" format.name$ 't :=3D
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ namesleft #2 >
{ "," * }
'skip$
if$
t "others" =3D
{ " etal." * }
{ " and " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=3D
namesleft #1 - 'namesleft :=3D
}
while$
}
%%%% fin macro %%%%
15.13 Comment configurer la commande \cite ?
Le package 'cite' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/cite/
offre certaines possibilités.
-
Exemple :
-
-
\usepackage{cite}
\renewcommand\citepunct{;\penalty999\ }
%%%% fin exemple %%%%
Pour afficher une clé à la place du label [??] dans le cas où
LATEX/BibTex ne trouve pas la clé spécifiée dans la bibliographie,
on peut utiliser la macro suivante :
-
%%%% debut macro %%%%
\def\@citex[#1]#2{%
\let\@citea\@empty
\@cite{\@for\@citeb:=#2\do
{\@citea\def\@citea{,\penalty\@m\ }%
\edef\@citeb{\expandafter\@firstofone\@citeb}%
\if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}
\fi
%%%% Ligne originale %%%%
% \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
%%%% Ligne modifiée %%%%
\@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries \@citeb}%
\G@refundefinedtrue
\@latex@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\hbox{\csname b@\@citeb\endcsname}}}}{#1}}
%%%% fin macro %%%%
15.14 Comment construire une liste d'auteurs ?
Pour séparer les éléments d'une liste d'auteurs, il faut utiliser
``and''.
-
Exemple :
-
-
Dewitt, D.J. and Naughton, J.
%%%% fin exemple %%%%
15.15 Comment spécifier un tri dans une bibliographie ?
Il existe l'outil BibTool disponible sur ftp://ftp.fdn.org/pub/CTAN/biblio/bibtex/utils/bibtool/.
BibTool est un outil de manipulation de bases de données BibTeX
et il permet en particulier de spécifier différents ordres de tri
pour une bibliographie.
-
Exemples :
-
-
bibtool -s file.bib -o the_new_bibtex_file.bib
pour trier suivant les auteurs et les titres
-
bibtool -s -- 'sort.format={%d(year)}' file.bib -o the_new_bibtex_file.bib
pour trier par ordre croissant des années de parution
-
bibtool -s -- 'sort.format={%s($type)%N(author)}' gn-publ.bib
pour trier par classe de document et par auteur.
L'appel du fichier ainsi trié se fait alors par exemple par :
-
\documentclass{article}
\begin{document}
\nocite{*}
\bibliographystyle{unsrt}
\bibliography{the_new_bibtex_file}
\end{document}
%%%% fin exemple %%%%
15.16 Comment référencer les pages contenant des citations ?
Il faut utiliser le package 'backref' disponible sur CTAN.
15.17 Où trouver des styles de bibliographie ?
Le package 'biblist' de J. Schrod offre différents styles de bibliographie
prédéfinis. Il est disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex209/contrib/biblist/.
Le package 'apacite' est disponible sur ftp://ftp.fdn.org/pub/CTAN/biblio/bibtex/contrib/.
Le package 'bbtbase' disponible sur CTAN propose des styles bibliographiques
de base.
De nombreux autres styles sont disponibles sur CTAN.
15.18 Comment faire des références croisées ?
Il faut utiliser le champ crossref de BibTeX.
-
Exemple :
-
-
@InProceedings{contejean96rta,
author = "Evelyne Contejean and Claude March\'e",
title = "{CiME: Completion Modulo $E$}",
crossref = "rta96",
pages = "416--419",
year = 1996,
note = "System Description",
ftp = "ftp://ftp.lri.fr/LRI/art/march/cime-rta96.ps.gz",
abstract = "http://www.lri.fr/marche/cime-rta96.html"
}
@Proceedings{rta96,
title = "7th International Conference on ...",
booktitle = "7th International Conference on ...",
editor = "Harald Ganzinger",
publisher = SV,
year = 1996,
month = jul,
address = "New Brunswick, NJ, USA",
series = LNCS,
volume = 1103,
}
%%%% fin exemple %%%%
-
ATTENTION :
- l'ordre de déclaration @InProceedings/@Proceedings dans
le fichier .bib est important.
15.19 Comment citer une URL ?
Le style harvard propose un champ URL. Il est disponible à :
http://www.arch.su.edu.au/ peterw/latex/harvard/
ou sur
ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/supported/harvard/.
Le style bibliographique 'utphys', de J. Distler, disponible à http://xxx.lanl.gov/hypertex/bibstyles/
ajoute le champ eprint à toutes les entrées BibTeX classiques.
On peut également utiliser la macro @MISC et mettre la référence URL
dans le champ note.
M. Moreau propose la solution suivante : J'ai recupéré le fichier
falpha.bst auquel j'ai ajouté :
-
FUNCTION {format.url}
{ url empty$
{"empty"}
{ url emphasize }
if$
}
FUNCTION {onTheNet}
{ output.bibitem
format.authors output
format.title "title" output.check
new.block
institution "institution" output.check
format.date output
new.block
format.url "url" output.check
fin.entry
}
Autrement dit, si on peut avoir des documents de type onTheNet avec
pour entrée obligatoire : title, institution, url et entrée optionnelle
: author, year, month, note. L'URL est indiquée en italique.
15.20 Comment définir des initiales à deux lettres ?
En français, les prénoms commencant par Ch, Ph, Th... ont pour initiales
leurs deux premières lettres (Ex : Philippe --> Ph.). Pour forcer
BibTeX à considérer ces groupes de lettres, il faut utiliser :
{\relax Ph}ilippe. BibTeX prend alors tout le
groupe {..} pour une lettre. La commande \relax est
considérée comme une commande d'accent qui est supprimée lors du tri
alphabétique. Elle est nécessaire car lorsqu'un groupe apparaît dans
un nom, BibTeX s'attend à trouver une commande d'accent juste après
l'accolade ouvrante.
15.21 Comment conserver les majuscules dans les titres ?
Il suffit de mettre les majuscules entres accolades.
15.22 Comment changer l'espace entre les item ?
Il faut copier la définition de l'environnement thebibliography qui
se trouve dans le fichier de style de la classe utilisée (par exemple
article.cls pour un article) dans un fichier de style (qui sera appelé
via une commande \usepackage) ou dans le préambule
de votre document (entre \makeatletter, \makeatother).
Il faut ensuite remplacer \newenvironment par \renewenvironment
et modifier la définition en ajoutant \setlength{\itemsep}{0pt}
après \list.
15.23 Comment réaliser des fiches de lecture ?
S. O. Genaud (genaud@galaad.u-strasbg.fr) a écrit un petit logiciel
de gestion des références bibliographiques au format BibTeX, sous
la forme d'une interface graphique. La version actuelle n'est peut
être pas exempte de tout bug. Elle tourne sur Linux, SunOS et Solaris
avec la librairie xview.
Pour récupérer l'exécutable ou avoir plus d'informations : http://icps.u-strasbg.fr/ genaud/FRM/
Le programme bibfrm permet de lire un fichier BibTeX ou de créer
un fichier de références bibliographiques au format BibTeX et d'associer
à chaque référence un résumé. L'interface graphique permet de savoir
immédiatement quels sont les champs optionnels et obligatoires pour
un type de document donné. Le logiciel permet de parcourir les différentes
références du fichier, de faire une recherche sur une chaîne, de trier
les références par nom d'auteur, année ou type de document. Pour chaque
référence, un résumé peut être saisi dans l'éditeur de texte incorporé
dans l'interface. Ce résumé peut être envoyé par mail à une liste
de diffusion prédéfinie.
Le package 'abstbook' disponible sur ftp://ftp.fdn.org/pub/CTAN/macros/latex/contrib/other/misc/
permet de mettre en page des catalogues de résumés.
15.24 Comment utiliser la commande \cite dans un item ?
Pour utiliser la commande \cite dans l'item d'un environnement
description, il suffit de l'encadrer dans des accolades.
-
Exemple :
-
-
\item[{\cite[\S3.1]{Author1}}]
%%%% fin exemple %%%%
15.25 Comment générer l'expression et al automatiquement ?
Voici une fonction ``format.names'' (tirée de plain.bst) où V.
Henn a rajouté quelques lignes pour mettre un et al pour les auteurs
de numéro supérieurs à 4. N'importe quel style biblio utilise une
fonction avec une syntaxe similaire, il n'y a qu'à insérer les nouvelles
lignes dans la fonction format.names (juste avant la fin du while)
du fichier biblio qui vous plaît et le tour est joué...
-
%%%% debut macro %%%%
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" =
{ " etal." * }
{ " and " * t * }
if$
}
if$
} % fin du "si nameptr > 1"
't % "si nameptr = 1"
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
% ------------------------------
% 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 : nameleft:=0
nameptr #4 = namesleft #0 > and
{ " \emph{etal.}" *
#0 'namesleft :=
}
'skip$
if$
% fin des ajouts
% ------------------------------
}
while$ % tant qu'il reste des nom à placer
}
%%%% fin macro %%%%