biber / biblatex

Un seul mot suffit : remplacez style=numeric par style=authoryear dans la ligne \usepackage et toutes les citations du texte, comme toutes les entrées de la bibliographie, sortent sous une autre forme. Ce mot unique résume presque tout l’argument en faveur de biblatex et de son backend biber. Le BibTeX classique enfermait la mise en forme dans un programme .bst écrit dans un langage à pile ; biblatex rend la mise en forme à des macros LaTeX lisibles et redéfinissables, et confie le côté données — lecture, désambiguïsation, tri — au programme biber. Cette page traite du préambule qui fait tenir l’ensemble (\usepackage[backend=biber, style=…]{biblatex}, \addbibresource, \printbibliography), de la compilation latex → biber → latex → latex, des commandes \autocite, \parencite et \textcite, et de l’accident le plus fréquent : un éditeur qui continue d’appeler bibtex pendant que la bibliographie reste vide.

biblatex ou biber : lequel est le package, lequel est le programme

biblatex est un package LaTeX ; biber est un programme externe. biblatex décide de l’apparence des citations et de la bibliographie. biber lit le .bib, résout les renvois croisés, détermine où les noms d’auteurs doivent être désambiguïsés, trie l’ensemble et écrit un .bbl. Sous BibTeX, ces deux tâches cohabitaient dans un même fichier .bst — traitement des données et mise en forme, écrits dans un langage à pile postfixé sans même de nom, comme le décrit la page BibTeX. biblatex a séparé cette couche. Selon les termes de son propre manuel, la mise en forme est désormais « entièrement contrôlée par des macros TeX », et concevoir un style ne demande qu’une bonne pratique de LaTeX.

  • analyser le .bib (ou une autre source) dans un modèle de données interne
  • résoudre crossref, les ensembles d’entrées et les entrées liées
  • produire les données qui permettent de distinguer noms et listes de noms identiques
  • valider structurellement chaque entrée par rapport au modèle de données
  • trier les listes de références — plusieurs listes, dans des ordres différents, si besoin
  • écrire le .bbl que biblatex relira ensuite

Le backend se choisit avec l’option backend=, qui accepte biber, bibtex ou bibtex8 ; la valeur par défaut est biber. Les trois diffèrent d’abord par le codage des caractères. Le manuel de biblatex décrit bibtex comme ne prenant en charge « que le codage US-ASCII, le tri étant toujours insensible à la casse », bibtex8 comme acceptant US-ASCII et les codages 8 bits tels que Latin 1, et biber comme acceptant US-ASCII, les codages 8 bits, UTF-8, le recodage à la volée et le tri propre à une locale. Autrement dit, choisir bibtex condamne d’avance toute bibliographie non anglophone — c’est la différence qui pèse le plus en pratique. biber est écrit en Perl, mais TeX Live et MacTeX le fournissent sous forme de binaire : aucune installation de Perl n’est requise.

Les noms méritent d’être connus. biblatex a été écrit par Philipp Lehman, qui l’a développé seul de 2006 à 2012. Philip Kime a repris le package en 2012, Moritz Wemheuer y contribuant régulièrement depuis 2017 (Audrey Boruvka et Joseph Wright ont prêté main-forte pendant la transmission). Le manuel cite toujours Lehman parmi les auteurs et précise qu’« une grande partie de son excellent code d’origine subsiste dans le cœur ». biber est l’œuvre de Philip Kime et François Charette ; conçu spécifiquement pour biblatex, il ne peut pas servir seul : lui donner un .bst ne mène à rien. Là où bibtex était un outil généraliste, biber est un composant de biblatex.

Le minimum qui compile : \usepackage{biblatex}, \addbibresource, \printbibliography

Trois commandes suffisent. Chargez le package dans le préambule avec \usepackage[backend=biber, style=…]{biblatex}, déclarez la base — toujours dans le préambule — avec \addbibresource{refs.bib}, puis placez \printbibliography là où la liste doit figurer. Les citations passent par \autocite, \parencite et leurs parents. Le fichier .bib lui-même — types d’entrée comme @article, clés de citation, champs — s’écrit exactement comme pour BibTeX et fait l’objet de la page sur la base bibliographique. C’est justement pourquoi la migration coûte moins qu’il n’y paraît.

document.tex
\documentclass{article}
\usepackage[backend=biber, style=authoryear]{biblatex}
\addbibresource{refs.bib}   % preamble only, and the .bib extension IS required

\begin{document}

\textcite{shannon1948} introduced the measure.
Later work built on it \autocite[see][45]{knuth1984}.

\printbibliography

\end{document}

Ce qui fait d’abord trébucher ceux qui viennent de BibTeX, c’est la déclaration de la base. \addbibresource ne s’écrit que dans le préambule et remplace le \bibliography{refs} de fin de document. De plus, l’extension .bib est obligatoire : \bibliography s’en passait, mais \addbibresource exige le nom complet du fichier, si bien que \addbibresource{refs} ne trouve rien. Répétez la commande pour répartir la base sur plusieurs fichiers ; avec biber comme backend, elle accepte aussi des motifs glob comme \addbibresource[glob]{bib/*.bib} et des ressources distantes commençant par http://. Quant à \bibliographystyle, il n’a plus d’emploi ici : le style est fixé par les options de \usepackage.

Ce style= est en réalité une option maîtresse qui charge deux fichiers d’un coup : style=authoryear appelle authoryear.bbx pour la bibliographie et authoryear.cbx pour les citations. La valeur par défaut est numeric. Ce n’est que si les deux doivent diverger — par exemple une liste auteur-année avec des citations numériques — que l’on règle séparément bibstyle= et citestyle=. Au quotidien, un seul style= suffit.

Pourquoi la compilation suit latex → biber → latex → latex

Parce que LaTeX ignore ce qu’il a cité tant qu’il n’a pas tourné une fois. À la première passe, biblatex écrit les clés de citation et toute la configuration dans un fichier de contrôle XML, le .bcf. biber lit ce .bcf, le confronte au .bib, traite l’ensemble et écrit un .bbl. La deuxième passe intègre le .bbl ; la troisième fixe les renvois et les numéros de page. Le calcul est celui de BibTeX, mais le programme appelé est biber, pas bibtex, et on lui passe non pas le .tex mais le nom de job, sans extension. Avec pdflatex ou lualatex, seule l’étape latex change de nom ; la structure ne bouge pas.

terminal
$ pdflatex document.tex   # 1st pass: writes document.bcf with the cited keys
$ biber    document       # NOT bibtex, and no .tex extension: reads .bcf, writes .bbl
$ pdflatex document.tex   # 2nd pass: pulls the .bbl in
$ pdflatex document.tex   # 3rd pass: settles cross-references and page numbers

Presque toutes les pannes ont ici la même origine : l’éditeur ou latexmk appelle encore bibtex. biblatex n’écrit ni \citation, ni \bibdata, ni \bibstyle dans le .aux ; lancer bibtex document produit donc trois lignes d’un coup : I found no \citation commands---while reading file document.aux, I found no \bibdata command---while reading file document.aux, I found no \bibstyle command---while reading file document.aux. Aucun .bbl n’est créé, et LaTeX répond par LaTeX Warning: Empty bibliography et LaTeX Warning: Citation 'knuth1984' on page 1 undefined, puis Package biblatex Warning: Please (re)run Biber on the file:. Cette dernière ligne est à elle seule la réponse : là où tournait bibtex, il faut lancer biber.

terminal
$ latexmk -pdf document.tex   # detects biblatex in the .fls/.bcf and runs biber itself

Taper quatre commandes à la main n’est pas un flux de travail : en pratique, latexmk s’en charge. Les versions récentes détectent biblatex, appellent biber d’elles-mêmes et répètent les passes autant qu’il le faut. Depuis un éditeur, le plus sûr est un moteur fondé sur latexmk : les moteurs LaTeXmk de TeXShop, ou une recette latexmk dans LaTeX Workshop pour VS Code. Overleaf détecte biblatex et lance biber tout seul. Seuls les scripts de compilation écrits à la main demandent une correction : remplacez la ligne bibtex par biber.

is wrong format version : biber et biblatex forment un couple de versions

biber et biblatex ne fonctionnent qu’en versions accordées. Le manuel de biber comporte une table de compatibilité des deux ; depuis biber 2.7 / biblatex 3.7, les numéros mineurs avancent au même pas — TeX Live 2024 livre biber 2.19 avec biblatex 3.19. Cela se manifeste lorsqu’un gestionnaire de paquets met à jour biblatex seul, ou lorsqu’un biber installé à part (via Homebrew, par exemple) arrive plus tôt dans le PATH. Le symptôme est l’avertissement Package biblatex Warning: File 'document.bbl' is wrong format version - expected … accompagné d’une bibliographie qui refuse de changer. Le remède est banal : mettre à jour biber et biblatex ensemble depuis la même distribution, supprimer document.bbl, recompiler. Comparer biber --version à la version de biblatex imprimée en tête du journal indique aussitôt si les deux ont divergé.

style=numeric ou style=authoryear : changer de style avec un seul mot

Écrivez un autre nom dans style= et les citations comme la bibliographie changent ensemble. biblatex fournit cinq familles généralistes — numeric, alphabetic, authoryear, authortitle et verbose — chacune déclinée en variantes. Le détail intéressant : un style fixe aussi, au chargement, sa propre valeur par défaut pour autocite=. numeric, alphabetic et authoryear posent autocite=inline, tandis que authortitle et verbose posent autocite=footnote. L’hypothèse disciplinaire — citations dans le texte courant ou sources renvoyées en note — est donc inscrite dans le style lui-même.

style=Aspect d’une citationHypothèse retenue
numeric[1]Valeur par défaut ; équivaut à la numérotation propre à LaTeX et pose autocite=inline
numeric-comp[1--3, 7, 8]Regroupe les numéros consécutifs : [8, 3, 1, 7, 2] devient [1--3, 7, 8]
alphabetic[Jon95] / [JW86]Équivalent du alpha.bst de BibTeX ; court code tiré de l’auteur et de l’année
authoryearDoe 1995aAjoute a, b… lorsqu’un même auteur a publié plusieurs fois la même année
authoryear-compDoe 1992, 1995a,bN’imprime l’auteur qu’une fois si plusieurs clés d’une commande le partagent
authortitleDoe, Short titleLaisse l’année de côté et utilise shorttitle s’il existe ; autocite=footnote
verboseRéférence complète, puis forme courteDonne toutes les données dès la première citation, donc peut se passer de liste

Quand un lieu de publication impose un format, le plus rapide est de chercher un package de style tout fait. TeX Live contient biblatex-ieee pour l’ingénierie, biblatex-apa pour la psychologie et ses voisines, biblatex-chicago et biblatex-mla pour les humanités, biblatex-nature et biblatex-science pour les sciences de la nature, oscola pour le droit anglais, ainsi qu’une série de normes nationales : biblatex-gb7714-2015 pour la norme chinoise GB/T 7714-2015, biblatex-gost pour la GOST russe, biblatex-abnt pour l’ABNT brésilienne, biblatex-dw pour les sciences humaines allemandes. Le domaine francophone dispose en outre de biblatex-enc, conforme aux normes bibliographiques de l’École nationale des chartes et adapté aux travaux historiques et philologiques. Là où une revue ne distribue toujours qu’un .bst, rester sur BibTeX reste la réponse honnête ; la page BibTeX précise où passe la frontière.

\autocite, \parencite ou \textcite : quelle commande choisir

\textcite quand le nom de l’auteur se lit comme partie de la phrase, \parencite quand la citation se tient hors de la phrase comme une note, \autocite quand on veut laisser le style trancher. La raison grammaticale de ce choix à trois branches — « Knuth (1986) a montré » et « … comme on l’a montré (Knuth, 1986) » sont des objets grammaticaux distincts — est exposée sur la page des bases de la citation ; ici, place à la mécanique. Toute commande de citation prend la forme \parencite[note avant][note après]{clé} et accepte plusieurs clés séparées par des virgules. Un seul crochet donne la note après — \parencite[45]{knuth1984} —, deux donnent les deux — \parencite[see][45]{knuth1984}.

CommandeCe qui s’imprimeQuand y recourir
\citeLe libellé nu, sans ajoutQuand on ne veut ni parenthèses ni note
\parenciteToute la citation entre parenthèses (crochets en style numérique ou alphabétique)La forme la plus courante : une note en fin de proposition
\textciteNom d’auteur plus année ou libellé entre parenthèses : Doe (1995)Quand le nom de l’auteur est sujet de la phrase
\footciteRenvoie toute la citation en note, close par un pointDisciplines qui placent les sources en note
\autociteDevient l’une des formes ci-dessus selon autocite=Quand la forme des citations de tout le document doit rester interchangeable
\citeauthorLe seul nom d’auteurPour nommer une personne dans le texte sans année ni numéro
\citeyearLa seule année de publicationPour compléter juste après avoir nommé l’auteur dans le texte

\autocite se situe un cran au-dessus des autres : ce qu’elle devient réellement dépend de l’option autocite= passée à \usepackage. Les valeurs sont plain (se comporte comme \cite), inline (\parencite), footnote (\footcite) et superscript. De plus, \autocite ne se contente pas de regarder la ponctuation qui suit : elle la déplace. Avec autocite=footnote, un signe de ponctuation final est décalé de sorte que l’appel de note s’imprime après la ponctuation. C’est cette petite attention qui permet de faire basculer tout un document des citations dans le texte aux citations en note sans reprendre la ponctuation phrase par phrase.

Pour citer plusieurs travaux d’un coup, chacun avec sa propre note après, il existe les formes multicite terminées par s. \parencites[35]{key1}[88--120]{key2}{key3} conserve une seule paire de parenthèses tout en donnant à chaque ouvrage sa plage de pages ; \autocites et \footcites suivent le même modèle. Et si vos doigts connaissent encore natbib de l’époque BibTeX, \usepackage[natbib=true]{biblatex} rend \citep, \citet et consorts disponibles comme alias. C’est un pont commode pendant la migration, même si un document neuf réagit plus prévisiblement à un changement de style s’il s’en tient aux commandes propres à biblatex.

sorting= et sortlocale= : trier correctement une bibliographie non anglophone

L’ordre se règle avec sorting=. La valeur par défaut est nty — les initiales de name, title, year. Viennent ensuite nyt (nom, année, titre), ynt (année, nom, titre), ydnt (année décroissante) et none, qui laisse les entrées dans l’ordre de citation. Tout cela se change sans toucher au .bib. Sous BibTeX, ces choix étaient enfouis dans le .bst et n’étaient accessibles qu’en choisissant entre plain, unsrt et alpha.

À cela s’ajoute que « le bon ordre » pour les mêmes chaînes dépend de la langue. biber confie ce travail au module Perl Unicode::Collate, qui implémente intégralement l’algorithme de tri Unicode (UCA), puis y superpose les adaptations de locale du CLDR. L’effet se constate aisément. En allemand, sortlocale=de_DE donne Mohr → Möller → Muster ; avec l’ordre de l’annuaire, sortlocale=de_DE_phonebook, ö compte pour oe et la liste devient Möller → Mohr → Muster. L’espagnol est plus spectaculaire : en orthographe traditionnelle, sortlocale=es_ES_trad traite ch comme une lettre à part entière, si bien que Chávez se classe après Cortázar (avec le es_ES moderne, on obtient Cela → Chávez → Cortázar). Le manuel de biber le signale expressément : le spanish de babel renvoie au es_ES moderne ; pour l’ordre traditionnel, il faut nommer es_ES_trad soi-même.

preamble
\usepackage[
  backend=biber,
  style=authoryear,
  sorting=nyt,                % name, year, title
  sortlocale=de_DE_phonebook, % locale tailoring: umlauts sort as oe/ue/ae
  maxbibnames=99,             % list every author in the bibliography
  maxcitenames=2,             % but shorten to "et al." inside citations
  backref=true                % back-links from each entry to its citations
]{biblatex}

Un algorithme de tri ne peut travailler qu’avec les caractères qu’on lui donne, et cette limite se fait sentir en japonais, en chinois et en coréen. sortlocale=ja_JP applique bien l’adaptation japonaise, mais les kanji ne portent aucune lecture : espérer un ordre gojūon ou pinyin mène à la déception. Si l’ordre doit suivre la lecture, la lecture doit figurer dans les données : la lecture d’un nom va dans sortname, une clé de tri quelconque dans sortkey. Le manuel de biblatex appelle sortkey la clé de tri maîtresse : dès qu’elle est présente, le tri s’y conforme et ignore tout le reste, sauf presort. Pour l’entrée unique qui refuse de se ranger, c’est le dernier recours qui marche toujours.

La même ligne \usepackage règle aussi la troncature des listes d’auteurs. maxnames vaut 3 par défaut et minnames 1 ; maxbibnames et maxcitenames héritent simplement de maxnames s’ils ne sont pas donnés. maxnames est donc le parent, les deux autres ses enfants. La combinaison que l’on emploie réellement est celle du code ci-dessus : tous les auteurs dans la bibliographie (maxbibnames=99), mais deux noms suivis d’« et al. » dans les citations (maxcitenames=2) — ce que maxnames seul ne sait pas exprimer. Ajoutez backref=true et chaque entrée se termine par les pages où elle a été citée : appréciable lors de la relecture d’un long manuscrit.

Diviser la bibliographie : \printbibliography[type=…] et keyword=

\printbibliography peut apparaître autant de fois qu’on veut, avec un filtre différent à chaque fois. Les clés sont type= (ce seul type d’entrée), nottype= (tout sauf ce type), keyword= et notkeyword= (filtrage sur le champ keywords du .bib), category= et notcategory= (classes déclarées avec \DeclareBibliographyCategory), ainsi que heading= et title= pour les intitulés. Séparer sources primaires et secondaires, ou livres et articles, ne coûte donc aucune modification des données. Pour des conditions plus fines, \defbibfilter définit un filtre sur mesure — c’est aussi l’outil pour scinder une liste par langue, le champ langid ne faisant que commuter la localisation et la césure sans rien diviser de lui-même.

document.tex
\printbibliography[type=article,   title={Journal articles}]
\printbibliography[type=book,      title={Books}]
\printbibliography[keyword=primary, title={Primary sources}]
\printbibliography[nottype=misc,   heading=bibintoc, title={Everything else}]

La décision tient en deux temps. Si le lieu de publication vous remet un .bst, restez sous BibTeX ; si le format vous appartient, passez à biblatex et biber. Une fois le pas franchi, il n’y a que trois choses à faire : écrire \usepackage[backend=biber, style=…]{biblatex} et \addbibresource{refs.bib} dans le préambule, placer \printbibliography, et appeler biber à la place de bibtex — ou confier cela à latexmk. Le fichier .bib est commun aux deux : rien de ce que vous avez accumulé n’est perdu. Ce qui a changé, au bout de quarante ans, c’est que modifier le format ne consiste plus à réécrire un .bst mais à changer un mot dans \usepackage.