BibTeX

BibTeX est la méthode classique de gestion des références : vous enregistrez chaque œuvre une seule fois dans une base .bib, puis la bibliographie est générée automatiquement. Dans le document, vous appelez seulement une clé avec \cite. En remplaçant le fichier de style (.bst), les mêmes données sont reformattées selon le format d’une revue. Cette page explique comment écrire un fichier .bib, le rôle de \bibliographystyle et \bibliography, ainsi que la séquence particulière « latex → bibtex → latex → latex ».

Qu’est-ce que BibTeX ?

Vous pouvez lister les références à la main à la fin d’un document (l’environnement thebibliography), mais cela ne tient plus dès que leur nombre augmente et que vous réutilisez les mêmes travaux dans plusieurs articles. BibTeX est un programme séparé, écrit par Oren Patashnik vers 1985, qui fonctionne à côté de TeX/LaTeX, mais séparément. Son rôle est d’extraire d’une base bibliographique seulement les œuvres effectivement citées, de les formater dans un style choisi et de les écrire sous une forme que le document peut insérer.

Le mécanisme comporte trois parties : le fichier .bib (les données brutes des références), les appels \cite plus deux commandes dans le document (\bibliographystyle et \bibliography), et le fichier .bst (le style) qui fixe l’apparence. Comme les données et l’apparence sont séparées, changer de lieu de soumission ne touche jamais les données : vous changez un seul mot de style. C’est exactement l’idée de « séparer la structure de l’apparence » qui traverse tout LaTeX.

Écrire la base .bib

Un fichier .bib est une liste d’entrées. Chaque entrée déclare un type comme @article, puis donne entre accolades une clé de citation suivie de champs. La clé de citation est un identifiant que vous choisissez (p. ex. knuth1984) et qui doit correspondre exactement à \cite{...} dans le document. Les champs ont la forme fieldname = {value}, séparés par des virgules.

references.bib
@book{knuth1984,
  author    = {Donald E. Knuth},
  title     = {The {TeX}book},
  publisher = {Addison-Wesley},
  year      = {1984}
}

@article{shannon1948,
  author  = {Claude E. Shannon},
  title   = {A Mathematical Theory of Communication},
  journal = {Bell System Technical Journal},
  volume  = {27},
  number  = {3},
  pages   = {379--423},
  year    = {1948}
}

@inproceedings{lamport1987,
  author    = {Leslie Lamport},
  title     = {Document Production: Visual or Logical?},
  booktitle = {Proceedings of TUG},
  year      = {1987},
  pages     = {19--24}
}

Il est utile de connaître les types courants et leurs champs obligatoires. @article désigne un article de revue (author, title, journal, year) ; @book un livre (author ou editor, title, publisher, year) ; @inproceedings un article dans des actes de conférence (author, title, booktitle, year). On trouve aussi @phdthesis/@mastersthesis pour les thèses, @incollection pour un chapitre de livre, et @misc pour divers éléments comme les pages web. Les champs requis pour chaque type sont décidés par le style.

Les accolades autour d’une valeur ont une signification pratique. En ajoutant une paire supplémentaire à l’intérieur, comme dans title = {The {TeX}book}, vous protégez ce passage des changements de casse imposés par le style (ainsi TeX ne devient pas Tex). Pour plusieurs auteurs, séparez-les avec andauthor = {A. Smith and B. Jones} — et laissez BibTeX et le style gérer l’ordre des noms et les abréviations.

Les deux commandes dans le document

Dans le document, vous placez deux commandes à l’endroit où la bibliographie doit apparaître (en général à la fin du corps). \bibliographystyle{plain} choisit le style, c’est-à-dire le .bst à utiliser, et \bibliography{references} indique à BibTeX quelle base lire tout en imprimant la liste de références à cet endroit. Notez que cette dernière commande ne prend pas l’extension .bib : même si le fichier s’appelle references.bib, vous écrivez references.

document.tex
\documentclass{article}
\begin{document}

TeX was created by Knuth~\cite{knuth1984}, building on
Shannon's information theory~\cite{shannon1948}.

\bibliographystyle{plain}
\bibliography{references}

\end{document}

Dans le corps, \cite{knuth1984} pointe vers la clé de citation knuth1984 dans le .bib. Si les clés ne correspondent pas, l’ouvrage n’apparaît pas (vous obtenez un avertissement de référence indéfinie). Seules les œuvres citées apparaissent dans la liste ; ce qui est dans le .bib mais non cité est ignoré (utilisez \nocite{*} pour forcer toute la base). Les variantes de \cite lui-même — citations multiples, localisateurs de page, package cite — sont couvertes sur la page « Citing basics ».

La séquence de compilation (quatre passages)

C’est là que BibTeX déroute d’abord. Pour produire correctement la liste, la recette classique exécute les outils quatre fois dans l’ordre latex → bibtex → latex → latex. Pourquoi plusieurs passages ? Parce que BibTeX est un programme séparé de LaTeX lui-même, et les deux échangent des informations au moyen de fichiers auxiliaires (.aux et .bbl).

  • 1er passage latex — traite le corps et écrit dans le fichier .aux les clés citées ainsi que les réglages \bibliographystyle/\bibliography. À ce stade, la liste de références est encore vide.
  • bibtex — lit le .aux pour savoir quelles clés sont citées, quel style utiliser et quel .bib lire ; extrait les entrées correspondantes du .bib ; les formate selon les règles du .bst ; puis écrit le fichier .bbl.
  • 2e passage latex — intègre le .bbl et compose la liste de références, mais les renvois croisés, comme les numéros des entrées, ne sont pas encore résolus.
  • 3e passage latex — les numéros et les marqueurs \cite se stabilisent, de sorte que les citations dans le texte et la liste de références correspondent exactement.
terminal
$ latex document.tex     # writes document.aux (cite keys)
$ bibtex document        # reads .aux + .bib + .bst, writes .bbl
$ latex document.tex     # pulls in .bbl
$ latex document.tex     # resolves all references

Notez que vous donnez à bibtex le nom auxiliaire (le nom de job sans extension), pas le .tex. La recette est identique avec pdflatex : remplacez simplement latex par pdflatex. Comme taper quatre commandes à chaque fois est fastidieux, on délègue en pratique à latexmk, qui inspecte le .aux pour décider si BibTeX doit être lancé et combien de passages sont nécessaires, finissant généralement en une seule invocation.

terminal
$ latexmk -pdf document.tex   # runs latex/bibtex/latex as many times as needed

Styles standard (.bst)

Un style fixe l’ordre de tri, le libellé (numéro ou abréviation) et la façon dont les noms d’auteurs et les titres de revues sont abrégés. BibTeX fournit quatre styles standard ; les connaître couvre la plupart des besoins. Vous changez simplement en passant le nom à \bibliographystyle{...}.

StyleOrdreLibellé / trait
plainAlphabétique par auteurNuméroté [1] ; le défaut habituel
unsrtOrdre de première citationNuméroté [1] (même format que plain)
alphaPar libellé (grosso modo auteur, année)Étiquettes alphanumériques comme [Knu84]
abbrvAlphabétique par auteurAbrège les prénoms et les titres de revues

Plusieurs styles spécialisés courants sont aussi fournis en standard : ieeetr (aspect IEEE Transactions, numérotation par ordre de citation), très utilisé en ingénierie ; acm (style ACM) en informatique ; et siam (style SIAM) en mathématiques appliquées. Les sociétés savantes et éditeurs distribuent aussi leurs propres fichiers .bst, à remplacer selon les consignes. L’intérêt de BibTeX est qu’un changement de style ne demande aucun changement au .bib ni aux appels \cite dans le corps.

Japonais : pbibtex / upbibtex

Le bibtex brut vise les textes occidentaux et trie ou traite mal les champs contenant des noms d’auteurs ou titres japonais. pLaTeX/upLaTeX fournissent donc des commandes conscientes du japonais. pbibtex est destiné à pLaTeX et trie selon les points de code EUC-JP ; upbibtex est destiné à upLaTeX et trie selon les points de code Unicode. Tous deux descendent de JBibTeX (développé par Shouichi Matsui) et étendent les fonctions intégrées afin que les champs japonais ne soient pas coupés au milieu d’un caractère.

L’usage reflète le cas occidental : dans la séquence de compilation, remplacez simplement latex par platex (ou uplatex) et bibtex par pbibtex (ou upbibtex). Des équivalents japonais des styles existent aussi : jplain pour plain, junsrt pour unsrt, jalpha pour alpha, et jname, qui place le nom de famille en tête comme dans « [Kin80] Kinoshita: … » (des styles de sociétés comme jipsj existent également).

terminal
$ uplatex  document.tex   # 1st pass: writes .aux
$ upbibtex document       # Japanese-aware: writes .bbl
$ uplatex  document.tex   # pulls in .bbl
$ uplatex  document.tex   # resolves references
$ dvipdfmx document.dvi   # DVI -> PDF

Comme upLaTeX passe par DVI, vous terminez en convertissant en PDF avec dvipdfmx (ce pipeline est détaillé sur les pages consacrées au japonais et au convertisseur DVI). latexmk peut être configuré pour appeler pbibtex/upbibtex, ce qui automatise aussi les quatre passages manuels pour le japonais.

Limites de BibTeX, et biber/biblatex

BibTeX est mature et largement utilisé, mais sa conception est ancienne et comporte plusieurs limites : il suppose des encodages 8 bits et ne gère pas Unicode proprement (les noms d’auteurs multilingues et les accents sont pénibles), son tri est peu flexible, et créer un format complexe impose d’écrire du .bst, un petit langage particulier orienté pile.

Pour lever ces limites sont apparus biblatex (un package LaTeX) et son backend par défaut, biber. Ils gèrent Unicode nativement, permettent de contrôler finement le tri et la mise en forme par des options côté LaTeX, et évitent d’écrire du .bst. Pour les nouveaux projets, biblatex/biber est un choix solide, traité sur sa propre page.