physics / braket / tensor

Quand on compose des formules de physique ou de mécanique quantique, les mêmes formes reviennent sans cesse : la dérivée d/dx, la dérivée partielle ∂/∂x, les barres verticales d’une valeur absolue ou d’une norme, les bras et kets, et les indices empilés d’un tenseur. Les écrire à la main avec \frac ou \left| à chaque fois est fastidieux. Cette page présente trois paquets qui regroupent ces notations en commandes faciles à mémoriser : physics, qui fournit tout un ensemble de dérivées et de délimiteurs à taille automatique ; braket, dédié à la notation bra-ket de Dirac ; et tensor, qui aligne proprement indices supérieurs et inférieurs. Ils sont pratiques, mais physics en particulier comporte des pièges, comme la redéfinition silencieuse de certaines commandes standard ; nous verrons donc à la fois les avantages et les précautions.

Ce qu’est le paquet physics

physics, de Sergio C. de la Barrera, est un paquet destiné à composer les mathématiques de la physique rapidement et lisiblement. Il s’active par une seule ligne de préambule, \usepackage{physics}. En interne, il requiert xparse et amsmath ; physics charge amsmath pour vous, il n’est donc pas nécessaire de le nommer séparément. Son objectif est simple : des noms de commandes explicites, qui remplacent de longs patrons comme \frac{\mathrm{d}}{\mathrm{d}x} par des commandes courtes.

latex
\usepackage{physics}

Les commandes proposées se répartissent en grands groupes : délimiteurs à taille automatique (\qty, \abs, \norm, \eval), calcul vectoriel (\grad, \div, \curl, \laplacian), dérivées et différentielles (\dv, \pdv, \dd), notation de Dirac (\bra, \ket, \braket) et macros de matrices. Nous parcourons ci-dessous les plus courantes en pratique. Le paquet a aussi quelques particularités de conception, rassemblées à la fin.

Dérivées et différentielles dans physics

La fonction phare de physics est la notation des dérivées. \dv représente la dérivée ordinaire et sa forme varie selon le nombre d’arguments. Avec un seul argument, comme \dv{x}, il compose l’opérateur d/dx ; avec deux, comme \dv{f}{x}, il compose df/dx. Les ordres supérieurs passent dans un argument optionnel : \dv[2]{f}{x} donne d²f/dx² et \dv[n]{f}{x} donne dⁿf/dxⁿ. Le d est droit (romain) par défaut au numérateur comme au dénominateur ; \usepackage[italicdiff]{physics} le remplace par un d italique.

La dérivée partielle est \pdv, sur le même modèle que \dv. \pdv{f}{x} compose ∂f/∂x et \pdv[2]{f}{x} compose ∂²f/∂x². Une dérivée partielle mixte prend trois arguments : \pdv{f}{x}{y} donne ∂²f/∂x∂y. L’élément différentiel lui-même est \dd : \dd{x} compose dx avec un espacement adapté au contexte, et \dd[3]{x} compose d³x ; on l’emploie dans une intégrale comme \int f(x) \dd{x}.

latex
\[
  \dv{f}{x}, \qquad \dv[2]{f}{x}, \qquad
  \pdv{f}{x}{y}, \qquad \int_0^1 f(x) \dd{x}
\]

De gauche à droite, cet exemple compose df/dx, la dérivée seconde d²f/dx², la dérivée partielle mixte ∂²f/∂x∂y et une intégrale de 0 à 1 avec l’élément différentiel dx après l’intégrande. Pour une fraction barrée en ligne, la forme étoilée \dv*{f}{x} produit df/dx sous la forme côte à côte \flatfrac.

Délimiteurs automatiques et bra-ket dans physics

physics fournit aussi des délimiteurs qui grandissent automatiquement pour épouser leur contenu. \abs{a} compose la valeur absolue |a| et \norm{a} la norme ‖a‖, chacun à la taille du contenu, en effectuant en interne le travail de \left\right. Pour fixer la taille à la main, insérez \big, \Big et variantes, comme dans \abs\Big{a} ; pour conserver la taille inchangée, utilisez la forme étoilée \abs*{a}. La barre d’évaluation est \eval : \eval{x}_0^\infty donne une barre avec bornes inférieure et supérieure. Le délimiteur général est \qty(...), avec \qty(...), \qty[...] et \qty{...} pour parenthèses, crochets et accolades.

latex
\[
  \abs{\frac{a}{b}}, \qquad \norm{\vb{v}}, \qquad
  \eval{x^2}_0^\infty, \qquad \qty( \frac{1}{2} )
\]

Ici, les barres de valeur absolue s’étirent à la hauteur de la fraction a/b, les doubles barres de la norme entourent le vecteur v, la barre d’évaluation se dresse à droite avec 0 et ∞, et les dernières parenthèses grandissent à la hauteur de la fraction 1/2.

Pour la notation de Dirac, la paire fondamentale est \bra{\phi} et \ket{\psi}. Par conception, écrire \bra{\phi}\ket{\psi} sans espace entre les deux fait « contracter » le bra et le ket en un unique produit scalaire ⟨φ|ψ⟩. On dispose aussi de \braket{a}{b} pour le produit scalaire directement (→ ⟨a|b⟩), de la forme à un argument \braket{a} (→ ⟨a|a⟩, une norme) et de \ketbra{a}{b} pour le produit extérieur (→ |a⟩⟨b|, alias de \dyad). Chaque forme adapte sa taille au contenu, et une étoile désactive cette adaptation.

Les opérateurs de calcul vectoriel sont également présents. \grad est le gradient ∇, \div la divergence ∇·, \curl le rotationnel ∇×, et \laplacian le laplacien ∇². Ils prennent une fonction en argument, si bien que \grad{\Psi} compose ∇Ψ. La redéfinition de \div demande toutefois de la prudence ; elle est abordée dans la section suivante.

Précautions avec physics et solutions de rechange

physics est pratique, mais il faut l’utiliser avec soin car il redéfinit silencieusement des commandes standard. L’exemple classique est \div. En LaTeX standard, \div est le signe de division ÷, mais physics le remplace par la divergence ∇· et déplace le ÷ d’origine vers \divisionsymbol. Les fonctions trigonométriques sont elles aussi redéfinies : \sin et les autres ajoutent automatiquement des parenthèses ; on peut désactiver cela avec \usepackage[notrig]{physics}, les définitions originales restant disponibles sous des noms plus longs comme \sine. \Re et \Im sont également remplacés. Sans le savoir, on peut être surpris de ne pas voir « le symbole habituel ».

Un autre piège connu est que les dérivées absorbent comme argument un groupe parenthésé qui suit immédiatement. Dans physics, écrire une parenthèse après la dérivée, comme \dv{x}(\Psi), est défini comme une « forme longue » où d/dx agit sur le contenu des parenthèses. Ainsi \dv{f}{x}(g) attire (g) comme argument de \dv au lieu de le traiter comme un facteur séparé, ce qui produit une sortie non voulue. Ce comportement revient souvent sur tex.stackexchange, au point qu’un paquet correctif physics-patch existe. Pour l’éviter, mettez une espace avant le facteur suivant, insérez {}, ou écrivez les parenthèses autrement.

Des conflits entre paquets existent aussi. En particulier, siunitx, référence pour la composition des unités, a introduit dans ses versions récentes une commande de quantité \qty, dont le nom entre en conflit avec le \qty de physics ; le comportement dépend de l’ordre de chargement. Pour ces raisons, on choisit de plus en plus des paquets spécialisés plutôt que d’adopter physics en bloc. Pour les dérivées, derivative gère bien les ordres élevés et les cas multivariés ; pour de beaux opérateurs différentiels, il existe fixdif ; et physics2 de Zhang Tingxuan, publié initialement en 2022, divise le même domaine en modules par fonctionnalité — ab pour les parenthèses automatiques, ab.braket, diagmat, xmat, etc. — que l’on active séparément avec \usephysicsmodule{...}.

Pour les délimiteurs à taille automatique aussi, on peut définir ses propres délimiteurs nommés au lieu de s’appuyer sur physics. Avec \DeclarePairedDelimiter de mathtools, une seule déclaration comme \DeclarePairedDelimiter{\abs}{\lvert}{\rvert} fournit votre propre \abs, avec le choix entre \abs{x} (taille par défaut) et \abs*{x} (étirement automatique par \left\right). Comme aucune commande standard n’est écrasée et que le comportement est prévisible, cette approche est préférée dans les documents où la robustesse compte ; voir la page mathtools pour les détails.

Le paquet braket

Si vous n’avez besoin que d’un usage léger de la notation de Dirac, le paquet braket de Donald Arseneau est un bon choix. Plutôt qu’une grande boîte à outils comme physics, c’est un petit paquet limité aux notations bra-ket et ensemblistes, chargé par \usepackage{braket}. Il propose deux familles de commandes : les versions minuscules à taille fixe \bra{ }, \ket{ }, \braket{ }, \set{ }, de taille constante quel que soit le contenu, et les versions majuscules à étirement automatique \Bra{ }, \Ket{ }, \Braket{ }, \Set{ }, qui enveloppent leur contenu avec \left\right en interne.

L’avantage des versions majuscules est qu’une barre verticale | écrite directement dans l’argument s’étire avec les délimiteurs extérieurs. Dans \Braket, chaque | intérieur grandit à la hauteur des arguments ; dans \Set, c’est le premier | qui grandit. Pour une double barre, utilisez \| ou son alias local ||.

latex
\Braket{ \phi | \frac{\partial^2}{\partial t^2} | \psi }

\Set{ x \in \mathbf{R}^2 | 0 < {|x|} < 5 }

Dans cet exemple, le premier code compose l’élément de matrice ⟨φ| ∂²/∂t² |ψ⟩ autour d’un opérateur de dérivée partielle du second ordre, avec les chevrons extérieurs et les deux barres intérieures étirés à la hauteur de l’opérateur. Le second compose l’ensemble { x ∈ R² | 0 < |x| < 5 }, en étirant les accolades extérieures et la barre de séparation ; le |x| intérieur est enveloppé dans {|x|} pour rester à taille fixe. Notez que, contrairement à physics, braket ne définit pas de \ketbra pour le produit extérieur ; l’auteur recommande d’écrire \ket{ }\bra{ }.

Le paquet tensor

Dans les tenseurs mêlant indices supérieurs et inférieurs, la position horizontale et l’espacement des indices portent du sens. Dans Γ^μ_{νρ} ou R^μ_{ν}{}^ρ_σ, par exemple, les indices supérieurs et inférieurs doivent apparaître dans le bon ordre de gauche à droite. Écrire simplement ^ et _ à la suite les empile au même endroit, si bien qu’on ne voit plus quel indice vient d’abord. Le paquet qui résout cela est tensor de Philip G. Ratcliffe, révision complète de l’original de Mike Piff, v2.2. Il ne requiert aucun paquet externe et se charge avec \usepackage{tensor}.

Deux commandes sont centrales. La commande légère \indices se place juste après le corps du tenseur et ne prend que la chaîne d’indices. Par exemple, M\indices{^a_b^{cd}_e} compose M suivi d’un a supérieur, d’un b inférieur, d’un cd supérieur et d’un e inférieur, tous conservés à leur bonne position horizontale. Dans la chaîne d’indices, on utilise directement ^ pour les exposants et _ pour les indices, en regroupant les indices de plusieurs caractères avec des accolades comme ^{cd} ; \sp et \sb font le même travail.

L’autre commande, \tensor, est compatible avec l’original de Mike Piff et prend le corps du tenseur et la chaîne d’indices comme arguments séparés. \tensor{M}{^a_b^{cd}_e} produit exactement le même résultat que l’exemple avec \indices. L’avantage de \tensor est qu’il peut placer des indices avant le tenseur : une chaîne de pré-indices dans le premier argument optionnel permet d’aligner des indices avant et après le corps M, comme dans \tensor[^a_b^c_d]{M}{^e_f^g_h}.

latex
\[
  M\indices{^a_b^{cd}_e}, \qquad
  \tensor{M}{^a_b^{cd}_e}, \qquad
  \tensor[^a_b^c_d]{M}{^e_f^g_h}
\]

Dans les trois cas, les indices supérieurs et inférieurs ne se chevauchent pas : ils se décalent dans le bon ordre depuis la gauche. Seul le dernier exemple porte aussi des indices avant M. \indices et \tensor ont tous deux des formes étoilées : \indices* et \tensor* resserrent l’espacement entre indices pour revenir à un aspect plus standard. De plus, placer un * au début de la chaîne d’indices aligne à gauche les paires supérieures/inférieures successives, utile pour limiter les dérives de position.

En prime, \nuclide est défini pour le mode texte comme pour le mode mathématique. \nuclide[14][6]{C} compose ¹⁴₆C, en plaçant le nombre de masse 14 et le numéro atomique 6 en haut et en bas à gauche du symbole C ; les deux nombres sont optionnels. Les indices composés de plusieurs jetons doivent être groupés entre accolades, et les constructions comme \mathrm doivent être entièrement incluses, par exemple \indices{_{\mathrm{H}}^x}.