Figuras de química y física

Ecuaciones químicas, esqueletos moleculares, diagramas de Feynman de la física de partículas: las figuras científicas tienen cada una su propia "gramática" de dibujo. Podrías construirlas desde cero con TikZ de propósito general, pero los paquetes específicos de cada dominio permiten escribir la misma notación que un químico o un físico pondría en papel y obtener una figura correcta con un fragmento breve. Esta página repasa las herramientas de química mhchem, chemfig y XyMTeX; las de física tikz-feynman y feynmf; y modiagram para diagramas de orbitales moleculares, organizadas según para qué sirve realmente cada una.

Primero, una vista general. Incluso dentro de las "figuras de química y física", la herramienta adecuada depende con claridad de lo que quieras crear. La tabla siguiente relaciona cada paquete con su dominio antes de revisarlos uno por uno.

PaqueteDominioQué produce
mhchemQuímicaFórmulas y ecuaciones (H₂O, 2H₂+O₂→2H₂O como texto)
chemfigQuímicaFórmulas estructurales/esqueléticas y esquemas de reacción
XyMTeXQuímicaFórmulas estructurales (paquete antiguo basado en comandos)
tikz-feynmanFísicaDiagramas de Feynman (basados en TikZ, disposición automática)
feynmf / feynmpFísicaDiagramas de Feynman (METAFONT/MetaPost, dos pasadas)
modiagramQuím./Fís.Diagramas de orbitales moleculares (niveles de energía)

Fórmulas y ecuaciones — mhchem

mhchem compone fórmulas y ecuaciones químicas como texto. No sirve para dibujar estructuras, sino para la notación química que se escribe dentro de prosa o matemáticas, como H2O o 2 H2 + O2 -> 2 H2O. Cárgalo en el preámbulo con \usepackage[version=4]{mhchem} y escribe la expresión dentro de su comando central, \ce{...} (chemical equation).

Lo inteligente de \ce{} es que al escribir de forma natural se obtiene química bien compuesta. Un dígito justo después de un símbolo de elemento se convierte en subíndice (\ce{H2O} → H₂O), y un número o signo escrito con ^ se convierte en superíndice de carga (\ce{SO4^2-} → SO₄²⁻). Las flechas se escriben literalmente: -> (directa), <=> (equilibrio), <- (inversa), y + se compone como suma de reactivos con el espaciado correcto. Los estados se añaden entre paréntesis, como \ce{H2O(l)}; un precipitado es v y un gas desprendido es ^, separados por espacios (\ce{BaSO4 v}).

document.tex
\usepackage[version=4]{mhchem}
% ...
\ce{2 H2 + O2 -> 2 H2O}
\ce{CO2 + C ->[\Delta] 2 CO}
\ce{H2O <=> H+ + OH-}
\ce{Ba^2+ + SO4^2- -> BaSO4 v}

Estos ejemplos componen, en orden: la formación de agua (los coeficientes 2 y los subíndices se alinean automáticamente); el calentamiento (->[\Delta] coloca la etiqueta de condición Δ encima de la flecha); la autoionización del agua (una flecha de equilibrio de doble sentido); y la precipitación de sulfato de bario (la v final se convierte en una flecha hacia abajo ↓). Una flecha puede tomar dos etiquetas, ->[arriba][abajo], para anotar condiciones encima y debajo. \ce{} funciona tanto en texto corrido como dentro de matemáticas $...$.

mhchem no puede dibujar estructuras: las líneas de enlace y los anillos quedan fuera de su alcance. Los símbolos breves de enlace, como enlaces simples o dobles, pueden mostrarse con \bond, por ejemplo \ce{C\bond{-}C}, pero para una figura esquelética real conviene usar chemfig, que viene a continuación. (Un paquete más nuevo con objetivos parecidos, chemformula, ofrece la misma idea mediante el comando \ch{...}.)

Estructuras y esquemas — chemfig

chemfig es el paquete habitual para dibujar fórmulas estructurales o esqueléticas de moléculas. Basado en TikZ, describe una molécula casi de un solo trazo mediante un minilenguaje de enlaces y ramas. Se carga simplemente con \usepackage{chemfig}. El comando central es \chemfig{...}, y dentro de las llaves se colocan átomos y enlaces.

La gramática se apoya en símbolos de enlace y ángulos. Los enlaces son - (simple), = (doble) y ~ (triple), colocados entre átomos. La dirección de cada enlace se fija en los corchetes que lo siguen. Un dígito de 0 a 7 como [2] es una dirección predefinida en pasos de 45°: [0] es este (derecha, 0°), y en sentido antihorario [2] es hacia arriba (90°), [4] oeste (180°), [6] hacia abajo (270°). Un ángulo arbitrario se escribe con dos puntos como valor absoluto en grados, por ejemplo [:30]. Una rama es un grupo entre paréntesis (...) que se separa de la cadena principal.

document.tex
\usepackage{chemfig}
% ...
% メタン CH4:中心 C に H を 4 方向へ
\chemfig{H-C(-[2]H)(-[6]H)-H}

% ベンゼン環(交互の二重結合)
\chemfig{*6(=-=-=-)}

En el metano anterior, H-C coloca primero un hidrógeno al oeste del carbono; las dos ramas (-[2]H) y (-[6]H) añaden hidrógenos hacia arriba y hacia abajo; y el -H final extiende otro hacia el este (la dirección predeterminada), dando el CH₄ en forma de cruz. En el benceno de abajo, *6(...) significa un anillo de seis miembros, y =-=-=- dentro alterna enlaces simples y dobles, dibujando el anillo aromático hexagonal familiar. * crea un anillo ordinario; ** da la forma aromática con un círculo inscrito.

chemfig también dibuja esquemas de reacción, figuras que enlazan varias moléculas con flechas. Envuélvelos en \schemestart ... \schemestop, coloca dentro las moléculas (\chemfig{...}) e inserta flechas con \arrow. Puedes etiquetar una flecha con reactivos o condiciones, como en \arrow{->[condición]}, y \arrow{<=>} produce una flecha de equilibrio. El siguiente fragmento es un esquema simple A → B.

latex
\schemestart
  \chemfig{H-C(-[2]H)(-[6]H)-H}
  \arrow{->[\small oxidation]}
  \chemfig{O=C(-[2]H)-[6]H}
\schemestop

Esto produce un esquema de reacción de izquierda a derecha que va desde la fórmula estructural del metano, pasa por una flecha etiquetada que marca la oxidación y llega a la fórmula estructural del formaldehído. chemfig funciona con pdfLaTeX, LuaLaTeX o XeLaTeX y, como se basa en TikZ, normalmente no necesita configuración adicional de controlador (con pLaTeX basado en DVI, especifica dvipdfmx).

Otra herramienta estructural — XyMTeX

Un paquete veterano para fórmulas estructurales es XyMTeX (de Shinsaku Fujita). Mientras chemfig piensa en "dibujar enlaces de un solo trazo", XyMTeX piensa en invocar anillos y esqueletos completos como comandos. Para un derivado de benceno, por ejemplo, se pasan las posiciones y tipos de sustituyentes como argumentos a un comando dedicado. Su fortaleza es componer de forma estable policiclos fusionados complejos y patrones de sustitución mediante comandos fijos y estructurados.

Se carga con \usepackage{xymtex}; ofrece comandos para formas verticales y horizontales de anillos de benceno, entre muchos otros. Para trabajos nuevos, la mayoría elige chemfig, cuya notación es más intuitiva y se mantiene activamente, pero XyMTeX sigue siendo útil para manuscritos heredados basados en él o cuando su sistema de comandos ya resulta familiar. Admite el modo de salida estándar de LaTeX, además de modos PostScript y PDF.

Diagramas de Feynman — tikz-feynman y feynmf

Pasemos a la física. Para los diagramas de Feynman, las figuras de interacciones entre partículas, hay dos familias principales de herramientas. La moderna es tikz-feynman, basada en TikZ: declaras vértices y propagadores, y el paquete los dispone automáticamente. La carga recomendada usa una clave de compatibilidad: \usepackage[compat=1.0.0]{tikz-feynman}.

Para una figura rápida, usa el comando directo \feynmandiagram. Fijas el estilo de cada línea con [fermion] (fermión: línea recta con flecha), [photon] (fotón: línea ondulada), [gluon] (gluón: espiral), etc., y los vértices se crean implícitamente con solo nombrarlos. Para una colocación precisa, abre el entorno feynman dentro de un tikzpicture, coloca vértices con \vertex y conéctalos con \diagram*.

document.tex
\usepackage[compat=1.0.0]{tikz-feynman}
% ...
% 一発命令:e+ e- → μ+ μ-(光子交換)
\feynmandiagram [horizontal=a to b] {
  i1 -- [fermion] a -- [fermion] i2,
  a -- [photon] b,
  f1 -- [fermion] b -- [fermion] f2,
};

Este es un ejemplo clásico de dispersión de canal s: un par electrón-positrón a la izquierda se encuentra en el vértice a, una línea ondulada (un fotón) une a y b, y a la derecha se separa en otro par. horizontal=a to b es una pista de disposición que significa "colocar a y b horizontalmente". Importante: la disposición automática necesita LuaTeX, porque tikz-feynman usa internamente un algoritmo en Lua. Funciona con pdfLaTeX, pero la disposición se degrada a una forma rudimentaria y emite una advertencia. En la práctica, trata LuaLaTeX como requisito.

La otra familia es la clásica feynmf / feynmp. Cada diagrama se compone por separado en METAFONT (feynmf) o MetaPost (feynmp) y luego se incluye el resultado: un flujo de dos pasadas. Los diagramas se agrupan por nombre de archivo en un entorno fmffile; dentro de fmfgraph (o fmfgraph*) se dan las patas externas con \fmfleft y \fmfright, y las líneas con \fmf{...}. La primera ejecución de LaTeX escribe los archivos de definición del diagrama; mf/mpost los convierte en una fuente o figura; y la segunda ejecución los incorpora.

document.tex
\usepackage{feynmp-auto}
% ...
\begin{fmffile}{myfd}
  \begin{fmfgraph*}(120,80)
    \fmfleft{i1,i2}
    \fmfright{o1,o2}
    \fmf{fermion}{i1,v1,o1}
    \fmf{photon}{v1,v2}
    \fmf{fermion}{i2,v2,o2}
  \end{fmfgraph*}
\end{fmffile}

Esto dibuja la misma dispersión con feynmp. Con feynmp-auto se puede automatizar el paso de MetaPost, facilitando las dos pasadas manuales. feynmf/feynmp son maduros, producen una salida bella y aún se usan mucho en artículos antiguos y entornos TeX, pero implican el paso adicional de invocar MetaFont/MetaPost. Como regla: para trabajos nuevos, el cómodo tikz-feynman; para material heredado o dependencias mínimas, la familia feynmf.

Diagramas OM y niveles de energía — modiagram

En la frontera entre química y física está el diagrama de orbitales moleculares (diagrama OM): una figura que muestra cómo los orbitales atómicos (OA) se combinan en orbitales moleculares (OM) enlazantes y antienlazantes, apilados verticalmente según la energía. El paquete creado para esto es modiagram, también basado en TikZ. Se carga con \usepackage{modiagram} y, dentro del entorno MOdiagram, se describen los orbitales atómicos izquierdo y derecho con \atom y los orbitales moleculares que los conectan con \molecule.

document.tex
\usepackage{modiagram}
% ...
\begin{MOdiagram}
  \atom{left}{ 1s = {0; up} }
  \atom{right}{ 1s = {0; up} }
  \molecule{ 1sMO = {1; pair, } }
\end{MOdiagram}

Este es el diagrama OM más simple, para la molécula de hidrógeno H₂. \atom{left} y \atom{right} colocan cada uno un electrón con espín hacia arriba en un orbital 1s ({0; up}, donde 0 es el nivel de energía), y \molecule los combina en un orbital enlazante que contiene un par de electrones (pair). Con solo dar la ocupación (up, down, pair) y las alturas de nivel como argumentos, se obtiene un diagrama de niveles formado por líneas horizontales y flechas de espín. Estos diagramas de niveles de energía también pueden dibujarse con TikZ puro, pero como modiagram está especializado en las convenciones OM, compone estas figuras estándar de forma más breve y correcta.

Elección y notas de compilación

Por último, una guía práctica. Puedes elegir directamente según lo que quieras crear. Para fórmulas y ecuaciones químicas en prosa, mhchem; para estructuras y esquemas de reacción, chemfig (o XyMTeX cuando un enfoque basado en comandos convenga a anillos fusionados complejos); para diagramas de Feynman, tikz-feynman (o feynmf/feynmp en entornos antiguos y manuscritos heredados); para diagramas OM, modiagram. mhchem y chemfig son complementarios, y un patrón común es usar ambos en un mismo documento: mhchem para ecuaciones en línea y chemfig para esqueletos mostrados aparte.

Ten en cuenta también los requisitos de motor y pasadas. La disposición automática de tikz-feynman supone LuaLaTeX; con otros motores, la disposición se degrada. feynmf/feynmp necesitan una ejecución de dos pasadas que invoca MetaFont/MetaPost por separado (lo que feynmp-auto puede automatizar). chemfig y modiagram se basan en TikZ y funcionan con pdfLaTeX, LuaLaTeX o XeLaTeX, pero las figuras TikZ son pesadas de calcular y muchas de ellas hacen que la compilación sea lenta. Almacenar figuras en caché con tikzexternalize, o compilarlas aparte con la clase standalone, mantiene cómoda la edición.