physics quizá sea el paquete más entusiastamente recomendado y a la vez más ruidosamente desaconsejado de LaTeX. \dv{f}{x} para una derivada, \qty(...) para paréntesis de tamaño automático, \ket{\psi} para un ket: se escribe francamente bien. Pero el paquete reescribe en silencio comandos que el documento ya usa. \div deja de ser el signo de división ÷ y pasa a ser una divergencia; \Re deja de ser el ℜ de fraktur y pasa a ser un «Re» recto. Esta página trata physics, su rediseño physics2, el especialista en notación de Dirac braket, y tensor para alinear índices, y responde a «¿con qué empezar hoy?» a partir de resultados realmente compilados y medidos.
Qué aporta realmente \usepackage{physics}
Una línea, y las formas que se repiten en física se convierten en comandos cortos. physics, de Sergio C. de la Barrera, requiere internamente xparse y amsmath, y carga amsmath por su cuenta, así que no hace falta nombrarlo. Lo que ofrece se agrupa en cinco bloques: delimitadores de tamaño automático (\qty, \abs, \norm, \eval, \order); análisis vectorial (\grad, \div, \curl, \laplacian, el producto escalar \vdot, el producto vectorial \cross); derivadas (\dv, \pdv, \fdv, \dd); notación de Dirac (\bra, \ket, \braket, \ketbra, \dyad, \expectationvalue, \matrixelement); y abreviaturas de matrices y paréntesis (\mqty, \smqty, \pqty, \bqty, \Bqty, \vqty, el conmutador \comm, el anticonmutador \acomm, el corchete de Poisson \pb, y los vectores en negrita \vb, \va, \vu).
\usepackage{physics}
\[
\dv{f}{x}, \qquad \dv[2]{f}{x}, \qquad \pdv{f}{x}{y},
\qquad \int_0^1 f(x) \dd{x}
\]
\[
\abs{\frac{a}{b}}, \qquad \norm{\vb{v}}, \qquad
\eval{x^2}_0^\infty, \qquad \qty( \frac{1}{2} )
\]Las derivadas son el escaparate. \dv cambia de forma según el número de argumentos: \dv{x} compone el operador d/dx y \dv{f}{x} compone df/dx. El orden va en un argumento opcional: \dv[2]{f}{x} da d²f/dx² y \dv[n]{f}{x} da dⁿf/dxⁿ. La d es recta (redonda) por omisión; \usepackage[italicdiff]{physics} la cambia a una d cursiva. El \dv*{f}{x} con estrella produce la fracción oblicua de \flatfrac. La parcial \pdv sigue el mismo modo, salvo que la parcial mixta toma tres argumentos: \pdv{f}{x}{y} da ∂²f/∂x∂y. El elemento diferencial es \dd: \dd{x} compone dx con el espaciado arreglado y \dd[3]{x} compone d³x. En cuanto a delimitadores, \qty(...), \qty[...] y \qty{...} dan paréntesis, corchetes y llaves, y todos crecen hasta la altura de su contenido.
Lo que physics redefine en silencio: \div, \Re, \sin
Ni aviso, ni error. Solo cambia la salida. Leer \meaning bajo TeX Live 2024 lo confirma: antes de cargar physics, \div es \mathchar"2204, el signo de división ÷. Después, \div es una divergencia, y el ÷ original queda apartado bajo el nombre \divisionsymbol. Componga ambos en el mismo documento y extraiga el texto del PDF: $a \div b$ sale como «a∇ · b» y $a \divisionsymbol b$ sale como «a ÷ b». También difieren las anchuras: 26,79959 pt frente a 21,79968 pt. Añadir \usepackage{physics} a un documento existente que usaba \div para dividir cambia en silencio lo que significan sus fórmulas.
\Re e \Im cambian de forma visible. La línea correspondiente de physics.sty dice \let\real\Re \DeclareDocumentCommand\Re{g}{…\operatorname{Re}…}: el ℜ de fraktur queda sustituido por un operador recto «Re». Componga ambos en el mismo documento: $\Re z$ sale como «Re z» y el apartado $\real z$ sale como «ℜz». A las funciones con nombre les pasa lo mismo: \sin, \cos, \tan, \log, \ln, \exp y \det se sustituyen por versiones que ponen paréntesis a su argumento automáticamente, y las originales sobreviven con nombres más largos: \sine, \cosine, \tangent, \logarithm, \naturallogarithm, \exponential, \determinant. Solo el cambio trigonométrico puede desactivarse, con \usepackage[notrig]{physics}.
| Comando | Sin physics | Con physics (adónde fue el original) |
|---|---|---|
\div | ÷, el signo de división | divergencia ∇·; el viejo ÷ pasa a \divisionsymbol |
\Re | ℜ, fraktur | el \operatorname{Re} recto; el original pasa a \real |
\Im | ℑ, fraktur | el \operatorname{Im} recto; el original pasa a \imaginary |
\sin | sin, los paréntesis los pone usted | pone paréntesis a su argumento automáticamente; original en \sine; se desactiva con notrig |
\det | det | igualmente con paréntesis automáticos; original en \determinant |
Si escribe \dv{f}{x}(g), el (g) desaparece
Una parte de la fórmula desaparece de la salida, sin error ni aviso. Eso pesa mucho más que «se ve mal», así que aquí va la medición. Con TeX Live 2024, \sbox0{$\dv{f}{x}$} mide 11,50076 pt de ancho, y \sbox0{$\dv{f}{x}(g)$} mide también 11,50076 pt: exactamente lo mismo. Al extraer el texto del PDF, ambos dan solo «df/dx»; el (g) no aparece por ninguna parte.
La causa está en la declaración de argumentos. \derivative en physics.sty se declara con la signatura { s o m g d() }, y ese d() final se traga como argumento un grupo entre paréntesis que venga detrás. Existe para la «forma larga» \dv{x}(\Psi), donde d/dx actúa sobre el contenido de los paréntesis. Pero en la rama que se toma cuando se ha dado g (aquí, x), el cuerpo de la macro no hace referencia alguna al argumento d(). Así que el (g) se lee y luego se descarta. Hay dos rodeos: poner un grupo vacío {} en medio, o un espacio explícito. Medido, $\dv{f}{x}{}(g)$ da 24,40703 pt y $\dv{f}{x}\,(g)$ da 26,07365 pt, y en ambos el (g) sobrevive en la salida. El mismo d() está unido a \grad, \div, \curl, \laplacian, \dd, \pdv y \fdv, así que un paréntesis a continuación exige cuidado en todos ellos.
% the (g) is read as the trailing d() argument and then thrown away:
% this prints df/dx and nothing else
$\dv{f}{x}(g)$
% either of these keeps the (g)
$\dv{f}{x}{}(g)$
$\dv{f}{x}\,(g)$Este comportamiento reaparece una y otra vez en tex.stackexchange, hasta el punto de que existe un paquete llamado physics-patch para corregirlo. Que haga falta un parche desde hace tanto ya cuenta a la hora de elegir.
El choque de \qty con siunitx: el orden de carga no lo arregla
El resultado es idéntico en cualquiera de los dos órdenes, y gana physics. siunitx, el estándar para componer unidades, introdujo \qty como su comando de cantidad en versiones recientes, chocando de nombre con el \qty de physics. Cargue ambos y compile, y siunitx anuncia: Package siunitx Warning: Detected the "physics" package: omitting definition of \qty. Incluso le entrega el rodeo, indicándole que añada \AtBeginDocument{\RenewCommandCopy\qty\SI} al preámbulo. En ese estado, escribir una unidad como \qty{2}{\metre} lo recoge el \qty de physics y se cae con ! Missing $ inserted. Poner \usepackage{physics} antes o después no cambió nada: el aviso y los errores salieron palabra por palabra iguales.
Hay aquí un detalle difícil de pasar por alto. Abra siunitx.sty y encontrará la línea \@ifpackageloaded{physics}: siunitx nombra a physics por su nombre de paquete y se aparta. Que un paquete principal de varios miles de líneas lleve una concesión codificada a nombre de otro paquete es una escena rara en el ecosistema de LaTeX, y dice mucho de lo extendido que fue este choque.
\abs en physics y en mathtools: la estrella significa lo contrario
Cargue ambos y \abs pasa a ser el de physics, y además la estrella invierte su significado. Declarar \DeclarePairedDelimiter\abs{\lvert}{\rvert} con mathtools y escribir después \usepackage{physics} no produjo ni un error: physics lo sobrescribe en silencio. Pero el comportamiento es exactamente el inverso. Medido, la versión de mathtools da a \abs{\frac ab} una altura de 7,5 pt (fija) y a \abs*{\frac ab} 8,50006 pt (estirada automáticamente). La versión de physics da a \abs{\frac ab} 8,50006 pt (estirada) y a \abs*{\frac ab} 7,5 pt (fija). Dicho de otro modo: mathtools estira con la estrella y physics deja de estirar con la estrella.
La sintaxis para elegir tamaño también difiere. mathtools la toma entre corchetes, \abs[\big]{x}; physics la toma directamente, \abs\big{x}. Use la sintaxis de mathtools con physics cargado y obtendrá ! Missing delimiter (. inserted)., con la salida rota «[] ||x» en la página. Si piensa mezclar los dos, esta incompatibilidad es inevitable. En la práctica la respuesta es elegir uno.
physics2: el rediseño que no sobrescribe nada
Haga la misma inspección con physics2 y no se ha reescrito ni un solo comando estándar. Cargue physics2, de Zhang Tingxuan, relea \meaning: \div sigue siendo \mathchar"2204 (÷), \Re es \mathchar"23C e \Im es \mathchar"23D (siguen en fraktur), \sin conserva su definición estándar y \qty está sin definir. Al componer, $a\div b$ da «a ÷ b», $\Re z$ da «ℜz» y $\sin(x)$ da «sin(x)»: salida idéntica al LaTeX puro. Usado junto a siunitx produjo cero avisos y cero errores, y \qty{2}{\metre} se compuso correctamente como «2 m». La versión incluida en TeX Live 2024 es la v1.0.1, con fecha 2024-01-10.
La diferencia de diseño se ve al cargarlo. Donde physics lo trae todo de golpe, physics2 hace activar módulos de uno en uno. Tras \usepackage{physics2} se escribe algo como \usephysicsmodule{ab,braket} y solo se trae lo que se quiere. Los módulos incluidos en TeX Live 2024 son ab (delimitadores de tamaño automático), ab.braket, braket, diagmat (matrices diagonales), xmat (matrices generales), doubleprod, más ab.legacy, bm-um.legacy, nabla.legacy, op.legacy y qtext.legacy para quien migra desde physics. El precio de no ensuciar el espacio de nombres son nombres menos escuetos que los de physics: los delimitadores se escriben \ab(...), \ab[...], \ab\{...\}, \ab|...|, \ab<...>; una matriz diagonal es \pdiagmat{1,2,3}; una matriz es \pxmat{a}{2}{2}.
\usepackage{physics2}
\usephysicsmodule{ab,braket,diagmat,xmat}
\[
\ab(\frac{a}{b}), \quad \ab[\frac{a}{b}], \quad \ab|\frac{a}{b}|
\]
\[
\bra{\phi}, \quad \ket{\psi}, \quad \braket{a}{b}, \quad \ketbra{a}{b}
\]
\[
\pdiagmat{1,2,3}, \qquad \pxmat{a}{2}{2}
\]Una advertencia práctica: los módulos ab.braket y braket no pueden cargarse juntos. Liste ambos en \usephysicsmodule y obtendrá Package physics2 Warning: You cannot load 'ab.braket' and 'braket' modules together., quedando activo solo uno. Ambos ofrecen notación de Dirac: ab.braket se apoya en la maquinaria de ajuste de ab, mientras que braket se basta a sí mismo. Resumiendo el juicio práctico: para un documento que empieza hoy, physics2 es la opción segura; para un documento existente con physics, hay que sopesar el coste de reescribir frente a los efectos secundarios sobre \div, \Re y \qty. Si solo le interesan las derivadas, el paquete derivative trata con limpieza los órdenes altos y las varias variables, y fixdif ordena la composición de los operadores diferenciales.
El paquete braket: las mayúsculas estiran, las minúsculas no
Si solo se necesita notación de Dirac, el braket de Donald Arseneau es la respuesta mínima. Una línea, \usepackage{braket}, y solo hay dos familias de comandos: las minúsculas de tamaño fijo \bra{ }, \ket{ }, \braket{ }, \set{ }, y las mayúsculas de estiramiento automático \Bra{ }, \Ket{ }, \Braket{ }, \Set{ }. La ventaja de las mayúsculas es que una barra vertical | escrita directamente dentro del argumento se estira junto con los delimitadores exteriores. En \Braket cada | interior crece hasta la altura de los argumentos; en \Set crece el primer |. Para una barra doble use \|, o su alias local ||.
% braket: one argument, the bars written inside it
\Braket{ \phi | \frac{\partial^2}{\partial t^2} | \psi }
\Set{ x \in \mathbf{R}^2 | 0 < {|x|} < 5 }Observe que los argumentos se cuentan de otro modo que en physics. El \braket{a}{b} de physics toma dos argumentos, mientras que el \braket{a|b} de braket toma uno, y la barra separadora la escribe usted. En el ejemplo anterior, el primero compone el elemento de matriz ⟨φ| ∂²/∂t² |ψ⟩, con los ángulos exteriores y ambas barras interiores estirados a la altura del operador. El segundo compone el conjunto { x ∈ R² | 0 < |x| < 5 }, estirando las llaves exteriores y la barra divisoria mientras el |x| interior, envuelto como {|x|}, se mantiene a tamaño fijo. Note además que braket no define un \ketbra para el producto exterior; el autor recomienda escribir \ket{ }\bra{ }.
El paquete tensor: índices altos y bajos en el orden correcto
En los tensores, la posición horizontal de un índice tiene por sí misma significado. En Γ^μ_{νρ} o R^μ_ν{}^ρ_σ los índices altos y bajos deben ir en el orden correcto desde la izquierda. Pero escribir ^ y _ seguidos sin más los apila en la misma posición y ya no se distingue qué índice va primero. El paquete que resuelve esto es el tensor de Philip G. Ratcliffe (una revisión completa del original de Mike Piff, v2.2). No necesita paquetes externos; basta \usepackage{tensor}.
\[
M\indices{^a_b^{cd}_e}, \qquad
\tensor{M}{^a_b^{cd}_e}, \qquad
\tensor[^a_b^c_d]{M}{^e_f^g_h}
\]
% works in text mode as well as math mode
\nuclide[14][6]{C}Hay dos comandos centrales. El ligero \indices va justo tras el cuerpo del tensor y toma solo la cadena de índices: M\indices{^a_b^{cd}_e} da M seguido de una a alta, una b baja, un cd alto y una e baja, cada uno en su posición horizontal correcta. Dentro de la cadena se usan ^ y _ directamente, agrupando los índices de varios caracteres con llaves, como ^{cd} (\sp y \sb hacen lo mismo). El otro comando, \tensor, es retrocompatible con el original de Mike Piff y toma el cuerpo y la cadena de índices como argumentos separados. \tensor{M}{^a_b^{cd}_e} produce la misma salida que el ejemplo con \indices, pero la fuerza de \tensor es que también puede colocar índices antes del cuerpo, pasando una cadena de preíndices en el primer argumento opcional. Ambos tienen formas con estrella, \indices* y \tensor*, que comprimen el espaciado entre índices hacia un aspecto más estándar. Además, un * al principio de la cadena de índices alinea a la izquierda los pares alto/bajo sucesivos.
Como extra se define \nuclide, que funciona tanto en modo texto como en modo matemático. \nuclide[14][6]{C} compone ¹⁴₆C, colocando el número másico 14 arriba a la izquierda y el número atómico 6 abajo a la izquierda del símbolo C (ambos números son opcionales). Advierta que dentro de la cadena de índices un índice de varios tokens debe ir siempre agrupado entre llaves, y construcciones como \mathrm también han de encerrarse por completo: escriba \indices{_{\mathrm{H}}^x}.
Entonces, ¿cuál usar?
La conclusión de las mediciones es: no arranque un documento nuevo sobre physics. Un argumento descartado en silencio, \div y \Re cambiando de significado, un choque con siunitx que el orden de carga no resuelve: los tres ocurren sin aviso. Dicho esto, physics sigue muy usado, y un manuscrito entregado por un coautor bien puede estar escrito con él. En ese caso lo realista no es reescribirlo, sino trabajar con él sabiendo que existen \divisionsymbol, \real e \imaginary y que la trampa del (g) está ahí. La tabla siguiente ordena la elección según el uso.
| Paquete | Para qué sirve | ¿Reescribe comandos estándar? |
|---|---|---|
physics | derivadas, delimitadores, análisis vectorial y bra-ket, de golpe | sí: \div, \Re, \Im, \sin, \det y más |
physics2 | el mismo terreno, módulo a módulo con \usephysicsmodule | no: medido, \div, \Re y \sin quedaron intactos |
braket | solo notación de Dirac y de conjuntos | no; minúsculas de tamaño fijo, mayúsculas extensibles |
tensor | mantiene correcta la posición horizontal de índices altos y bajos | no; solo añade \indices, \tensor y \nuclide |
mathtools | definir uno mismo \abs y \norm con \DeclarePairedDelimiter | no; usted elige los nombres, así que nada choca |