Base bibliographique et tri

Un fichier .bib ignore totalement l’allure qu’il aura une fois imprimé, et cette ignorance est tout le principe. C’est une base de données en texte brut — @article{shannon1948, author = {Shannon, Claude E.}, …} — qui consigne uniquement ce qu’est une référence, jamais son apparence ; voilà pourquoi un seul .bib survit à tous les articles LaTeX que l’on écrit et à toutes les revues auxquelles on les envoie. Le hic, c’est qu’une base de données possède une grammaire, et que celle-ci réserve quelques surprises : dans un fichier .bib, % n’ouvre pas un commentaire, une virgule à l’intérieur d’un nom a un sens très précis, et une seule paire d’accolades constitue la seule défense lorsqu’un style décide de réécrire le titre. Cette page porte sur le fichier lui-même : types d’entrées, champs, choix d’une clé de citation, syntaxe des noms, accents, @string et crossref.

Cette division du travail est la décision de conception elle-même, prise au milieu des années 1980. En tenant les données (.bib) séparées de l’apparence (un style .bst), changer de revue coûte une ligne de style et les données restent intactes. À l’inverse : dès qu’on se sent tenté d’inscrire de la mise en forme dans le .bib, la partie est généralement déjà perdue. La conduite des outils — l’ordre latex → bibtex → latex → latex, le choix d’un .bst — revient à la page BibTeX, et l’écriture de \cite dans le corps du texte à la page sur la citation. Ici, le regard reste à l’intérieur du fichier.

À l’intérieur d’une entrée : @type{clé, champ = {valeur}}

Une entrée se compose de trois parties : un type après le @, une clé de citation juste après l’accolade ouvrante, et une suite de champs séparés par des virgules. Il n’y a pas de quatrième élément à retenir. Voici une entrée : l’article de Shannon de 1948, fondateur de la théorie de l’information.

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

Les détails sont indulgents. Les valeurs peuvent être entourées d’accolades { } ou de guillemets doubles " ", et une valeur purement numérique comme year = 1948 peut rester nue. La virgule après le dernier champ est facultative. Les noms de type et de champ ne tiennent pas compte de la casse : @Article et @article, Title et title sont identiques. En pratique, mieux vaut s’en tenir aux accolades : les guillemets cèdent dès qu’une valeur contient elle-même un ", et les accolades s’accordent mieux avec les macros @string. Le double trait d’union de pages = {379--423} devient à la composition un tiret demi-cadratin « – ». Un trait d’union simple sort tel quel, ce qui est fautif pour un intervalle.

Comment choisir une clé de citation (et quels caractères sont interdits)

La clé de citation appartient entièrement à celui qui écrit ; tout convient tant qu’elle est unique dans le .bib. Elle doit correspondre à \cite{shannon1948} dans le corps du texte caractère pour caractère, casse comprise. L’usage courant est nom + année (shannon1948), avec une lettre ajoutée en cas de collision — shannon1948a, shannon1948b — et une clé dont on se souvient l’emporte à la longue sur une clé engendrée par une machine. Les caractères interdits sont fixés : accolades, virgules, espaces, barres obliques inverses, #, % et ~ sont proscrits partout, et biber refuse en outre les parenthèses, les guillemets et le =. Définir deux fois la même clé fait dire à BibTeX Repeated entry---line 15 of file refs.bib, et la seconde entrée est jetée en entier. C’est l’accident classique après un double import de la même notice depuis un gestionnaire bibliographique : ce message mérite d’être retenu.

Quel type d’entrée : @article, @book, @inproceedings ou @misc

Le type déclare ce qu’est la référence, et dès qu’il est choisi, le style décide aussi quels champs paraissent et dans quel ordre. Le BibTeX classique compte les quatorze types standard ci-dessous. Chacun est assorti de champs obligatoires (avertissement si l’un manque) et de champs facultatifs ; le fichier qui détient cette répartition n’est pas le vôtre, c’est le style (.bst).

TypeUsageChamps obligatoires clés
@articleArticle dans une revue ou un périodiqueauthor, title, journal, year
@bookLivre avec un éditeur commercial nomméauthor ou editor, title, publisher, year
@bookletOuvrage relié sans éditeur nommétitle (au minimum)
@inproceedingsArticle dans des actes de conférenceauthor, title, booktitle, year
@conferenceAlias de @inproceedings (compatibilité Scribe)(identique à @inproceedings)
@proceedingsLe volume d’actes lui-même ; parent de crossreftitle, year
@incollectionChapitre titré dans un ouvrage collectifauthor, title, booktitle, publisher, year
@inbookPartie d’un livre (chapitre ou intervalle de pages)author/editor, title, chapter ou pages, publisher, year
@phdthesisThèse de doctoratauthor, title, school, year
@mastersthesisMémoire de masterauthor, title, school, year
@techreportRapport produit par une institutionauthor, title, institution, year
@manualManuel technique ou logicieltitle (au minimum)
@unpublishedManuscrit ou brouillon non publiéauthor, title, note
@miscTout ce qui ne rentre pas ailleursaucun champ obligatoire (compléter avec howpublished, note)

Deux couples provoquent l’essentiel des hésitations. @inbook face à @incollection : le premier désigne une partie d’un même livre (le chapitre 3 du sien, par exemple), le second un texte autonome, d’une autre plume, dans un ouvrage collectif. @inproceedings et @conference sont fonctionnellement identiques : @conference ne subsiste que comme alias de compatibilité avec Scribe, le système de composition dont BibTeX descend ; dans du matériel neuf, il faut donc écrire @inproceedings. Les thèses se répartissent selon le diplôme entre @phdthesis et @mastersthesis, et ce qui ne rentre nulle part tombe dans @misc, étayé par howpublished ou note.

Le biblatex moderne englobe presque tout cela et en ajoute : @online (alias @electronic) pour les ressources web, un @report générique dont le champ type précise la catégorie, un @thesis indépendant du diplôme, et @xdata — un pur conteneur de données qui ne peut être ni cité ni imprimé et n’existe que pour être hérité. @online convient aux notices arXiv et aux preprints, associé aux champs eprint décrits plus bas. Ces types récents supposent biber/biblatex ; le bibtex classique avec un .bst peut ne pas les comprendre.

Champs obligatoires et facultatifs — et où placer le DOI et l’URL

Un champ est une paire name = {value}. Ce qui est obligatoire ou facultatif varie selon le type, et c’est le style qui trace cette limite. Si un champ obligatoire manque, BibTeX avertit ; un champ qu’il ne reconnaît pas est, dans la plupart des styles, ignoré en silence — les champs surnuméraires venus de métadonnées importées ne font donc aucun mal. Voici ceux que l’on rencontre dans tous les types.

  • author / editor — auteur ou éditeur scientifique ; la syntaxe multi-auteurs occupe la section suivante.
  • title — le titre : titre d’article, de livre, intitulé de chapitre.
  • journal / booktitle — le nom de la revue (@article), ou le titre de l’ouvrage ou des actes qui contient la contribution (@inproceedings, @incollection).
  • year / month / date — le BibTeX classique emploie year et month ; biblatex préfère une forme ISO comme date = {2026-05-01} (un simple date = {2026} convient aussi).
  • volume / number / pages — volume, numéro et pages ; les intervalles prennent le double trait d’union, pages = {379--423}.
  • publisher / institution / school — éditeur / institution émettrice (rapports) / université délivrant le diplôme (thèses).
  • doi / url / urldate — le DOI (seulement le corps 10.…, sans préfixe https://doi.org/), une URL, et la date de consultation de biblatex.
  • eprint / eprinttype / eprintclass — les champs de preprint de biblatex. Pour arXiv : eprint = {2405.00001}, eprinttype = {arxiv} (anciennement archivePrefix), eprintclass (anciennement primaryClass) pour le domaine.
  • note / howpublished — remarques libres / « mode de publication », logement habituel de l’URL d’une entrée @misc.

Voici l’ornière dans laquelle presque tout le monde tombe une fois. Les styles standard classiques ignorent totalement doi et url. La chaîne url n’apparaît pas une seule fois dans plain.bst, et un champ soigneusement rempli s’évapore — sans même un avertissement. Trois issues : charger \usepackage{url} et loger l’adresse dans howpublished = {\url{https://…}} ; passer à un style qui les comprend, comme plainnat (natbib) ou IEEEtran ; ou migrer vers biblatex, où doi, url et urldate sont des champs de plein droit et où la sortie se coupe avec une option telle que \usepackage[doi=false]{biblatex}. La bonne habitude consiste à toujours consigner les deux dans les données et à laisser le style décider de les imprimer ou non.

references.bib
% classic BibTeX: standard .bst styles drop doi/url, so use howpublished
@misc{tug2024,
  author       = {{TeX Users Group}},
  title        = {TeX Live 2024},
  howpublished = {\url{https://tug.org/texlive/}},
  note         = {Accessed 7 August 2026},
  year         = {2024}
}

% biblatex: doi, url and urldate are proper fields
@online{arxiv2405,
  author     = {Doe, Jane},
  title      = {A Preprint with a {DOI}},
  date       = {2024-05-01},
  eprint     = {2405.00001},
  eprinttype = {arxiv},
  doi        = {10.1000/example},
  url        = {https://arxiv.org/abs/2405.00001},
  urldate    = {2026-08-07}
}

Écrire les noms d’auteurs : and, von, Jr et la grammaire en quatre parties

Plusieurs auteurs se séparent par and — jamais par une virgule, car celle-ci a un autre emploi. BibTeX lit un nom unique en quatre parties : First, von, Last et Jr, et n’admet que trois façons de l’écrire : First von Last, von Last, First et von Last, Jr, First. La virgule est précisément la marque qui signale la frontière entre parties. C’est pourquoi author = {Shannon, Claude E.} signifie nom Shannon, prénom Claude E. Le premier ordre, naturel, suffit d’ordinaire, mais il échoue dans deux cas : lorsqu’il existe une partie Jr et lorsque le nom de famille comporte plusieurs mots sans partie von. Écrire Per Brinch Hansen conduit BibTeX à lire « Brinch » comme un morceau du prénom ; écrire Brinch Hansen, Per ne laisse aucune place au malentendu.

references.bib
@book{names2026,
  author = {de la Vall{\'e}e Poussin, Charles Louis Xavier Joseph
            and Brinch Hansen, Per
            and Ford, Jr., Henry
            and {The TeX Users Group}
            and others},
  title  = {Four Ways to Write One Name},
  publisher = {William Reid {and} Company},
  year   = {2026}
}

Comment BibTeX sait-il alors que de la est une partie von ? La règle est d’une simplicité désarmante : un jeton compte comme von si sa première lettre hors accolades est une minuscule. Dans de la Vall{\'e}e Poussin, de et la commencent par une minuscule et forment la partie von, les deux mots suivants la partie Last. On peut détourner la règle : une macro factice commençant par une majuscule, placée en tête, fait passer dans la partie Last un patronyme pourtant écrit en minuscules. Trois conséquences pratiques en découlent. Quand les auteurs sont trop nombreux, la liste se termine par and others et le style y substitue « et al. ». Un nom collectif doit être entouré d’accolades en entier, {The TeX Users Group}, pour que le and qu’il contient ne soit pas lu comme un séparateur. Dans biblatex, la même règle s’étend aux listes littérales publisher, institution, organization et location : un and qui appartient à une raison sociale doit être encadré — publisher = {William Reid {and} Company}.

Accents et noms non ASCII : G{\"o}del n’est pas Gödel

Pour le bibtex classique, un caractère accentué est un « special character » : tout ce qui va d’une accolade ouvrante de premier niveau, immédiatement suivie d’une barre oblique inverse, jusqu’à l’accolade fermante correspondante. {\"o} et {\'e} sont de tels blocs, et BibTeX compte le groupe entier pour une seule lettre. L’effet éclate dans les étiquettes. Avec le style alpha, G{\"o}del engendre l’étiquette G{\"o}d31 ; le même nom saisi en UTF-8 brut, Gödel, engendre Gö31 — car ö occupe deux octets, et bibtex 0.99d, qui compte des octets, a déjà dépensé là ses trois caractères. Le tri souffre de la même façon, et les noms japonais, chinois ou coréens s’en tirent plus mal encore. Il n’en découle qu’une conclusion pratique : dès qu’il y a des noms non ASCII, il faut employer biber, conçu pour l’UTF-8 et triant selon une collation adaptée à la locale. S’il faut absolument rester au BibTeX classique, on écrit les noms sous la forme {\"o} ou l’on passe aux versions huit bits bibtex8 / bibtexu.

references.bib
% classic bibtex + alpha.bst -> label [G{\"o}d31]
@article{godel1931a,
  author  = {G{\"o}del, Kurt},
  title   = {On Formally Undecidable Propositions},
  journal = {Monatshefte},
  year    = {1931}
}

% same name in raw UTF-8 -> label [Gö31] under bibtex 0.99d; fine under biber
@article{godel1931b,
  author  = {Gödel, Kurt},
  title   = {Same Name, Raw UTF-8},
  journal = {Monatshefte},
  year    = {1931}
}

Pourquoi {DNA} a besoin d’accolades — et quand ce n’est pas le cas

Les styles classiques — plain, abbrv, unsrt, alphapassent le titre d’un article en minuscules, hormis sa première lettre. Ainsi title = {A Theory of DNA and Galois Theory} s’imprime « A theory of dna and galois theory ». Noms propres et sigles n’obtiennent aucune grâce. Il n’existe qu’un outil contre cela : entourer d’une seconde paire d’accolades la portion à préserver. Écrite {DNA}, cette portion se retrouve hors du champ de la conversion. Ignorer ce seul geste est la première cause des bibliographies abîmées. Pourquoi le programme se comporte ainsi relève de la page BibTeX.

Avec biblatex et biber, l’histoire change. Les styles standard — numeric, authoryear et les autres — ne touchent pas du tout à la casse d’un titre : il sort exactement tel qu’il a été saisi. La mise en sentence case ne survient que si on la demande explicitement, par exemple avec \DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}}, et même alors l’option par défaut bibtexcaseprotection=true reproduit la règle d’accolades de BibTeX, si bien que {DNA} reste protégé. Avec bibtexcaseprotection=false, les accolades cessent de protéger ; l’intention s’exprime alors par \NoCaseChange{DNA}. L’habitude d’encadrer d’accolades vaut donc toujours sous biblatex — elle sert simplement bien moins souvent qu’autrefois.

Un détail mérite ici d’être connu. Les vieux fichiers .bib encadrent souvent des majuscules isolées — title = {An Introduction to {L}a{T}e{X}} — mais le manuel de biblatex le déconseille, car les accolades suppriment le crénage de part et d’autre de la lettre enfermée, ce qui rend le mot légèrement lâche. Encadrer le mot entier, {LaTeX}, protège autant sans abîmer l’approche. Second détail : ce qui est protégé, c’est ce qui se trouve dans des accolades, non ce qui se trouve dans une macro. Une macro doit être enveloppée avec son texte, comme dans {\TeX book} ; un \TeX nu n’est pas protégé.

references.bib
% unprotected: plain.bst prints "A theory of dna and galois theory"
% protected:   prints "A theory of DNA and Galois theory"
@article{protect2026,
  author  = {Doe, Jane},
  title   = {A Theory of {DNA} and {Galois} Theory},
  journal = {J. Test},
  year    = {2026}
}

% brace the whole word, not single letters: {LaTeX}, not {L}a{T}e{X}
% wrap a macro together with its text: {\TeX book}

Abréviations @string, @preamble et commentaires dans un .bib

Lorsqu’une même valeur revient sans cesse, @string permet de définir une macro. Le nom défini se place à une position de valeur, sans accolades, et se joint à d’autres chaînes par #. C’est la manière habituelle de basculer entre titres de revues abrégés et développés ; une disposition courante consiste à garder les définitions @string dans un .bib à part et à le lire en premier, comme dans \bibliography{strings,refs}. Le mécanisme est d’ailleurs déjà à l’œuvre : les styles standard prédéfinissent les mois jan à dec comme macros @string, ce qui explique que month = jan s’écrive sans accolades — month = {jan} ne donne pas la macro mais la chaîne littérale « jan ».

references.bib
@string{bstj = {Bell System Technical Journal}}

@preamble{ "\newcommand{\noopsort}[1]{} " }

@article{shannon1948,
  author  = {Shannon, Claude E.},
  title   = {A Mathematical Theory of Communication},
  journal = bstj # { (Supplement)},
  month   = jan,
  year    = {1948}
}

@comment{ everything in here is skipped, portably }

@preamble relève d’un autre genre : il envoie son contenu — le plus souvent des définitions de macros LaTeX — tel quel en tête du .bbl. On y recourt lorsqu’un petit outil, comme l’astuce de tri \noopsort, doit voyager avec les données. Quant aux commentaires, une méprise célèbre mérite d’être dissipée : dans un fichier .bib, % n’est pas un caractère de commentaire. Le bibtex classique ignore tout ce qui se trouve hors d’une entrée (@…{}) ; une ligne commençant par % passe donc comme texte ignoré et ne fait que ressembler à un commentaire. Le danger est à l’intérieur : un % nu dans la valeur d’un champ se déverse dans le .bbl, où il devient un véritable caractère de commentaire LaTeX qui dévore la fin de la ligne. Dans une valeur, il faut toujours écrire \%.

La forme portable est @comment{ … } : son contenu est intégralement ignoré et elle reste sûre sous biber. Cela compte, car biber est plus strict que le bibtex classique : du texte libre hors entrée vaut l’avertissement warning: 30 characters of junk seen at toplevel. Et si l’on souhaite seulement désactiver une entrée pour un temps, le chemin le plus court consiste à effacer un seul caractère — @article{…} devient article{…}, et ce n’est plus une entrée mais une simple suite de texte ignoré.

N’écrire les actes qu’une fois : le champ crossref

Le champ crossref fait hériter à une entrée les champs qui lui manquent d’une autre. Lorsqu’on cite cinq articles d’un même volume, inutile de saisir cinq fois le nom du colloque, les éditeurs et l’année. Une entrée @proceedings sert de parent, chaque @inproceedings enfant porte crossref = {gg1988}, et booktitle, editor et year descendent d’en haut. La duplication disparaît — et avec elle la plaie des cinq orthographes légèrement différentes d’un même nom de colloque.

references.bib
@inproceedings{gneisser1988,
  crossref = {gg1988},
  author   = {Gneisser, Rocky},
  title    = {No Gnats Are Taken for Granite},
  pages    = {133--139}
}

% the parent must appear LATER in the file than every entry citing it
@proceedings{gg1988,
  editor    = {Ford, Gerald and Carter, Jimmy},
  title     = {The Gnats and Gnus 1988 Proceedings},
  booktitle = {The Gnats and Gnus 1988 Proceedings},
  year      = {1988}
}

Trois règles s’y rattachent. Premièrement, le parent doit figurer plus loin dans le fichier que toute entrée qui le référence — d’où l’usage de rassembler les parents crossref en fin de fichier. Deuxièmement, même sans \cite explicite, le parent paraît de lui-même dans la bibliographie dès que deux enfants ou plus le désignent ; avec un seul enfant il reste dehors, et ses champs sont alors imprimés à l’intérieur de cet enfant. Le seuil se règle par bibtex --min-crossrefs=N. Troisièmement, un crossref imbriqué n’est pas fiable : mieux vaut ne pas donner de parent à un parent. biblatex propose un dispositif distinct, xdata, qui hérite des données sans instaurer de relation parent-enfant — le choix naturel pour un ensemble comme éditeur et lieu, qui n’est pas lui-même une référence.

Qui décide de l’ordre de la bibliographie

Pas vous — et c’est une bonne nouvelle. L’ordre d’apparition des entrées n’a rien à voir avec l’ordre de saisie ; c’est l’outil qui tranche. Avec le BibTeX classique, l’ordre est fixé par le style (.bst). La marge de manœuvre est quasi nulle : choisir le style, c’est choisir l’ordre. plain et alpha trient alphabétiquement par auteur, unsrt suit l’ordre de première citation dans le texte, et des styles d’ingénierie comme ieeetr font de même. Les données restant intactes, il suffit de remplacer \bibliographystyle{plain} par \bibliographystyle{unsrt} pour que toute la liste se réorganise. Le tri des références japonaises revient à pbibtex / upbibtex (voir la page BibTeX).

biblatex rend cette décision à l’auteur. Indépendamment du style, \usepackage[sorting=nyt]{biblatex} fixe l’ordre. Les clés de tri s’écrivent comme des combinaisons de lettres : n pour name, y pour year, t pour title.

OptionOrdre des clésSens
ntyname → title → yearnom, puis titre, puis année (valeur par défaut de biblatex)
nytname → year → titlenom, année, titre (préféré pour auteur-année)
yntyear → name → titleannée, puis nom, puis titre (chronologique)
ydntyear (décroissant) → name → titleannées les plus récentes d’abord
none(aucun tri)ordre de citation (équivalent de unsrt)

En bref : pour conserver l’ordre de citation, le style unsrt avec BibTeX ou sorting=none avec biblatex. Pour un ordre alphabétique, plain avec BibTeX ou le nty par défaut avec biblatex (nyt en auteur-année). Dans tous les cas, il n’y a jamais lieu de réordonner à la main les entrées du .bib. C’est l’affaire de l’outil ; la vôtre consiste seulement à consigner les données avec exactitude : choisir le bon type, écrire les noms selon la grammaire en quatre parties, encadrer d’accolades les majuscules qui doivent survivre. Un .bib qui respecte ces trois points survivra largement à l’article en cours de rédaction.