natbib

L'auteur de natbib n'aimait guère ce nom. Dans natbib.dtx, la source commentée du package, Patrick W. Daly explique qu'il vient du natsci.bst de Stephen Gildea — natsci pour natural sciences, les sciences de la nature — et ajoute entre parenthèses que c'est un nom laid, il l'admet, mais désormais trop installé pour être changé. Laid ou non, \usepackage{natbib} reste la façon dont un document LaTeX obtient des citations auteur–année telles que (Jones et al., 1990) à partir du BibTeX classique. Cette page dépasse la grammaire de \citet et \citep, qui relève de la page sur les citations, pour aborder les endroits où l'on bute vraiment : quels fichiers .bst natbib sait ou ne sait pas exploiter, ce que signale (author?), et lequel de round, square, \bibpunct et \setcitestyle décide réellement des parenthèses.

\usepackage{natbib} et les trois styles fournis : plainnat, abbrvnat, unsrtnat

Deux lignes dans le préambule suffisent : \usepackage{natbib} et \bibliographystyle{plainnat}. La seconde compte davantage qu'il n'y paraît, et c'est en la manquant qu'on casse ses citations. natbib fournit trois fichiers .bstplainnat, abbrvnat et unsrtnat — qui composent la bibliographie exactement comme les styles standard plain, abbrv et unsrt, mais écrivent dans chaque \bibitem une donnée supplémentaire : l'auteur et l'année, étiquetés séparément. Cette donnée est tout le ressort du mécanisme. Un style standard n'écrit que \bibitem{jon90}, si bien que LaTeX ne peut imprimer qu'un numéro opaque ; les styles nat écrivent \bibitem[Jones et al.(1990)Jones, Baker, and Williams]{jon90}, et de cette seule ligne natbib tire à la demande une liste d'auteurs abrégée, une liste complète, une année ou un numéro.

La séquence d'exécution ne change pas de celle de BibTeX seul : latex (ou pdflatex), puis bibtex, puis latex deux fois — la première passe écrit les clés dans le fichier .aux, bibtex construit le .bbl, et les deux dernières relisent les étiquettes. Pour des références en japonais, on remplace bibtex par pbibtex ou upbibtex. Ce que natbib ajoute tient en une phrase : le même .bib et le même plainnat produiront aussi des citations numériques si on les demande. Les packages auteur–année existaient bien avant l'arrivée de natbib en 1993 — harvard, apalike, chicago, astron — mais chacun liait un manuscrit à un seul schéma de citation ; passer à une revue numérique imposait de récrire le texte. natbib a appris à lire toutes leurs étiquettes \bibitem et a fait du schéma une simple option de package.

document.tex
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{plainnat}   % not plain: only plainnat carries author and year
\begin{document}

The line-breaking algorithm is described by \citet{knuth1986}.
The same idea is used elsewhere \citep[chap.~2]{lamport1994}.

\bibliography{refs}
\end{document}

% pdflatex doc -> bibtex doc -> pdflatex doc -> pdflatex doc
% (pbibtex or upbibtex instead of bibtex for Japanese references)

Des citations qui s'impriment (author?) : Author undefined for citation

Ce duo — un (author?) en gras dans le PDF et Package natbib Warning: Author undefined for citation 'knuth1986' on page 1 dans le journal — signifie que le .bst désigné ne sait pas faire d'auteur–année. C'est ce que produit à tous les coups \bibliographystyle{plain} associé à \citet : plain.bst écrit des étiquettes \bibitem{knuth1986} nues, il n'y a donc aucun auteur à trouver pour natbib, et \citet{knuth1986} se dégrade en (author?) [1]. Le piège est que \citep, dans le même document, semble parfaitement correct — il ne lui faut que le numéro —, si bien que le dégât se cache aisément dans un long brouillon. Le remède consiste à nommer un style qui transporte la donnée : plainnat au lieu de plain, abbrvnat au lieu de abbrv, unsrtnat au lieu de unsrt, ou l'un des styles auteur–année que natbib comprend (chicago, apalike, named, agsm, dcu, kluwer). Relancer bibtex après le changement de style : modifier le seul fichier .tex ne rafraîchit pas les étiquettes du .bbl.

thebibliography
% plain.bst writes this -- no author, no year, so \citet cannot work
\bibitem{jon90}

% plainnat.bst writes this -- short list, year, then the full list
\bibitem[Jones et al.(1990)Jones, Baker, and Williams]{jon90}

% apalike.bst and friends: the minimal form natbib still accepts
\bibitem[Jones et al., 1990]{jon90}

Toute la famille : \citet / \citep étoilés, puis \citealt, \citealp, \citeauthor, \citeyear

Tout ce qui vient après \citet et \citep sert à démonter une citation. Les formes étoilées composent la liste complète des auteurs au lieu d'abréger par « et al. » ; \citealt et \citealp donnent le même contenu que \citet et \citep mais sans les parenthèses (le alt renvoie à textuel, le alp à parenthétique). \citeauthor ne rend que l'auteur et \citeyear que l'année, ce qui permet de bâtir à la main une phrase du type « Jones et ses collègues soutenaient déjà, en 1990, que… ». Les sorties ci-dessous proviennent de \usepackage[round]{natbib} avec plainnat ; la clé jon90 désigne Jones, Baker, and Williams (1990). À noter : \citet n'était pas là dès l'origine. natbib est paru en 1993, mais \citet n'est arrivé qu'en version 6.2, le 11 janvier 1996 — la commande à laquelle on identifie aujourd'hui le package est postérieure de plus de deux ans au package lui-même.

CommandeExemple de sortieUtilisation
\citet{jon90}Jones et al. (1990)textuel ; l'auteur fait partie de la phrase
\citep{jon90}(Jones et al., 1990)parenthétique ; l'ensemble tient entre parenthèses
\citet*{jon90}Jones, Baker, and Williams (1990)liste complète des auteurs, textuel
\citep*{jon90}(Jones, Baker, and Williams, 1990)liste complète des auteurs, parenthétique
\citealt{jon90}Jones et al. 1990\citet sans les parenthèses
\citealp{jon90}Jones et al., 1990\citep sans les parenthèses ; pour des parenthèses à soi
\citeauthor{jon90}Jones et al.l'auteur seul
\citeauthor*{jon90}Jones, Baker, and Williamsla liste complète des auteurs seule
\citefullauthor{jon90}Jones, Baker, and Williamsidentique à \citeauthor* ; l'ancienne graphie
\citeyear{jon90}1990l'année seule
\citeyearpar{jon90}(1990)l'année entre parenthèses, quand l'auteur est déjà nommé
\citetext{priv.\ comm.}(priv. comm.)texte libre à l'intérieur des parenthèses de citation
\citenum{jon90}21le numéro nu, sans parenthèses ni exposant

Toutes les commandes \cite… acceptent les mêmes notes entre crochets, mais le manuel de Daly le dit sans détour : les notes sont faites pour \citep. En attacher une à \citeyear ou \citeauthor ne provoque pas d'erreur, mais elle est silencieusement ignorée en mode numérique, et seule la note postposée est prise en compte en mode auteur–année. Passer plusieurs clés à \citet est également signalé comme déconseillé : avec des notes, la note antéposée se répète devant chaque année tandis que la postposée ne s'attache qu'à la dernière — Daly parle de bogues reconnus dont la correction ne vaut pas l'effort, l'utilité de la fonction étant douteuse. En pratique, laissez les citations groupées à \citep et réservez \citet à une seule référence. Plusieurs travaux d'un même auteur pour une même année sont fusionnés d'office en (Jones et al., 1990a,b).

latex
The algorithm is due to \citet{knuth1986}.
It runs in linear time \citep[Theorem~3]{knuth1986}.
See the discussion of line breaking \citep[see][chap.~2]{knuth1986}.
Similar ideas appear elsewhere \citep{knuth1986,lamport1994}.
Both papers agree \citep{jon90a,jon90b}.   % -> (Jones et al., 1990a,b)

% author and year taken apart by hand
\citeauthor{jon90} first made the claim in \citeyear{jon90}.

\Citet et \Citep : capitaliser « della » ou « van der » en début de phrase

On emploie les formes capitalisées \Citet, \Citep, \Citealt, \Citealp et \Citeauthor (versions étoilées comprises). Elles servent lorsqu'un patronyme comporte une « particule » — le della de della Robbia, le van der de van der Waals. En milieu de phrase la minuscule est correcte, et \citet{dRob98} compose donc della Robbia (1998) ; mais une phrase qui s'ouvre sur ce nom doit s'ouvrir sur une majuscule. natbib ne récrit pas le patronyme dans le fichier .bib : il met en capitale la seule première lettre de la sortie, si bien qu'un même travail peut être cité en cours de phrase comme en tête de phrase sans que la bibliographie connaisse deux orthographes.

CommandeSortie
\citet{dRob98}della Robbia (1998)
\Citet{dRob98}Della Robbia (1998)
\Citep{dRob98}(Della Robbia, 1998)
\Citealt{dRob98}Della Robbia 1998
\Citealp{dRob98}Della Robbia, 1998
\Citeauthor{dRob98}Della Robbia

Passer d'auteur–année à numbers ou super sans toucher au texte

Il suffit de changer un mot dans les options. Avec \usepackage[numbers]{natbib}, \citet{jon90} devient Jones et al. [21], \citep{jon90} devient [21], et \citep[chap.~2]{jon90} avec sa note devient [21, chap. 2]. \usepackage[super]{natbib} donne les numéros en exposant qu'emploient Nature et ses semblables. Les \citet et \citep du texte ne bougent pas — et c'est exactement pour cela que Daly a écrit natbib : l'objectif était que changer de revue coûte une ligne de préambule, pas davantage. La bibliographie elle-même relève du fichier .bst, si bien que plainnat peut rester en place pendant que les citations deviennent numériques.

Le mode numérique fait entrer en jeu trois options de tri et de compression. sort remet les citations multiples dans l'ordre de la bibliographie, compress replie les suites consécutives en intervalles, et sort&compress fait les deux — c'est ce qui change \citep{a,b,c} de [21, 19, 20] en [19–21]. Deux points de vigilance. Plusieurs clés dans \citet ont ici encore moins de sens qu'en mode auteur–année, puisqu'il n'en reste qu'une liste d'auteurs devant une suite de numéros. Et en mode super, \citeyearpar se comporte exactement comme \citeyear et perd ses parenthèses ; une revue qui veut des parenthèses autour d'un exposant, à la manière de (Ref. 21), doit les fournir explicitement par \setcitestyle{open={(},close={)}}. Une commande, enfin, ruine discrètement la promesse de toute cette section : le \cite nu se comporte comme \citet en mode auteur–année, mais comme \citep en mode numérique et en exposant ; une phrase bâtie autour de lui change donc de rôle grammatical dès qu'on bascule. Avec natbib, on écrit \citet ou \citep, jamais \cite.

latex
% author-year, the mode the nat styles assume
\usepackage{natbib}

% numeric, sorted, consecutive runs folded into ranges: [19-21]
\usepackage[numbers,sort&compress]{natbib}

% superscript numbers, as used by Nature and its relatives
\usepackage[super,sort&compress]{natbib}

% the body text is identical in all three cases

Pourquoi plainnat imprime [Jones et al., 1990] : round, square, \bibpunct, \setcitestyle

Parce que \bibliographystyle{plainnat} appelle le \bibstyle@plainnat interne de natbib, défini comme \bibpunct{[}{]}{,}{a}{,}{,}. natbib embarque une table de ponctuation indexée par nom de .bstchicago reçoit parenthèses et point-virgules, agu des crochets, nature des exposants sans délimiteur — et plainnat, abbrvnat et unsrtnat y sont tous affectés aux crochets avec virgule de séparation. On lit souvent que natbib emploie par défaut des parenthèses ; ce défaut n'apparaît qu'avec un .bst dont le nom ne figure pas dans la table de natbib. À l'inverse, dès qu'une option de délimiteur, de séparateur ou de mode est nommée, natbib exécute son nobibstyle interne et coupe la ponctuation pilotée par le .bst. Ainsi \usepackage[round]{natbib} rétablit les parenthèses même avec plainnat, tandis que \usepackage[authoryear]{natbib} réactive délibérément le mécanisme.

OptionEffet
roundparenthèses (…) ; valeur par défaut quand natbib ignore le nom du .bst
squarecrochets […]
curlyaccolades {…}
anglechevrons <…>
semicolonséparer les citations multiples par un point-virgule
colonidentique à semicolon ; l'option d'origine mal nommée, corrigée en 8.0
commaséparer les citations multiples par une virgule
authoryearmode auteur–année ; réactive aussi la ponctuation pilotée par le .bst
numbersmode numérique ; exécute aussi en interne square et comma
supernuméros en exposant, délimiteurs vides (style Nature)
sortranger les citations multiples dans l'ordre de la bibliographie
compressreplier les suites consécutives en intervalles sans trier
sort&compresstrier puis replier en intervalles, ce qui donne [19–21]
longnamesfirstliste complète des auteurs à la première citation de chaque travail, et al. ensuite
sectionbibavec chapterbib, composer la bibliographie en \section*
mergefusionner sous un seul numéro les clés marquées d'un * ; la fonction de mcite

Pour modifier l'aspect une fois le package chargé, on emploie \setcitestyle{…}, ajouté dans natbib 8.0 en 2007. Il reçoit une liste de mots-clés séparés par des virgules : le mode est authoryear, numbers ou super ; les délimiteurs round, square, curly ou angle ; le séparateur semicolon ou comma. Le réglage fin passe par des paires key={value}open={(} et close={)} pour les délimiteurs eux-mêmes, citesep={;} entre citations multiples, aysep={,} entre auteur et année, yysep={,} entre années, et notesep={, } avant une note. Écrire \setcitestyle{square,aysep={},yysep={;}} répond ainsi exactement à une consigne éditoriale demandant crochets, aucune virgule entre auteur et année et point-virgule entre les années.

preamble
\usepackage[round,semicolon]{natbib}   % (Jones et al., 1990; Smith, 1989)
\bibliographystyle{plainnat}

% change it again, later in the preamble (natbib 8.0 and later)
\setcitestyle{square,aysep={},yysep={;}}

% the older equivalent: [notesep]{open}{close}{citesep}{mode}{aysep}{yysep}
% mode: n = numeric, s = superscript, anything else = author-year
\bibpunct[, ]{(}{)}{;}{a}{,}{,}

\bibpunct est la commande plus ancienne pour le même travail, et elle prend un argument optionnel et six obligatoires : dans l'ordre, le délimiteur ouvrant, le fermant, le séparateur entre citations multiples, le mode (n pour numérique, s pour exposant, tout le reste pour auteur–année), la ponctuation entre auteur et année, puis celle entre les années d'un même auteur. L'argument optionnel en tête est la chaîne placée juste avant une note, , par défaut. \setcitestyle se lit plus clairement : on le préférera dans les documents neufs et l'on gardera \bibpunct pour savoir le déchiffrer dans un vieux manuscrit ou un fichier de classe. On peut aussi n'emprunter que la ponctuation d'un .bst connu avec \citestyle{chicago} ; et pour attacher une ponctuation à un .bst maison, il suffit de placer \newcommand{\bibstyle@mystyle}{\bibpunct…} dans un fichier natbib.cfg : \bibliographystyle{mystyle} l'appliquera de lui-même.

Les classes qui chargent natbib à votre place : le nonatbib d'elsarticle et le package cite à ne pas ajouter

Si \citet fonctionne alors que vous n'avez jamais écrit \usepackage{natbib}, c'est le fichier de classe qui l'a chargé. L'elsarticle d'Elsevier exécute \RequirePackage[\@biboptions]{natbib} et fournit précisément \documentclass[nonatbib]{elsarticle} pour qu'on puisse l'en empêcher. Le revtex4-2 de l'American Physical Society le charge sous la forme \RequirePackage[sort&compress]{natbib}, version minimale comprise. Dans TeX Live 2024, 92 fichiers de classe mentionnent natbib, et Daly lui-même écrivait qu'il est soutenu — exigé — par de nombreuses revues. Un piège en découle : ajouter \usepackage{cite} pour ranger les numéros donne Package natbib Warning: The 'cite' package should not be used with natbib. Use option 'sort' instead. Le remplaçant de cite est sort ou sort&compress ; celui de mcite est l'option merge ou elide. Quant à citeref, il doit être chargé après natbib, faute de quoi une erreur survient.

natbib ou biblatex : par lequel commencer un nouveau document

Si les consignes de soumission nomment un .bst, prenez natbib ; si vous démarrez un document neuf et pouvez choisir librement, biblatex est l'option la plus solide. L'atout de natbib est que vos fichiers .bib, vos styles .bst et le programme bibtex continuent de fonctionner sans retouche — et, on vient de le voir, quantité de classes de revues le supposent présent. biblatex, associé au moteur biber qui assure le tri, gouverne l'ordre comme la mise en forme du côté LaTeX et a été conçu dès l'origine pour une sortie multilingue et localisée. natbib lui-même s'est arrêté à la version 8.31b de 2010 ; son code merge et elide a été commandé par l'American Physical Society et écrit par Arthur Ogawa — le (PWD, AO) de la chaîne de version reprend les initiales des deux auteurs. Les deux ne se combinent pas : il faut choisir. Les correspondances de commandes (\citet\textcite, \citep\parencite) figurent sur la page consacrée aux citations, et le versant biblatex sur la page biber / biblatex.