Previous Contents Next

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 :

  1. la première consiste à l'intégrer dans le corps même du document (fichier.tex),
  2. 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 :

%%%% 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 %%%%

Previous Contents Next