Diagramas conmutativos (tikz-cd / amscd)

Un diagrama conmutativo coloca objetos como puntos y las aplicaciones entre ellos como flechas, de modo que se vea de un vistazo que “todo camino de composiciones coincide”. LaTeX ofrece dos herramientas principales para componerlos: el potente tikz-cd, construido sobre TikZ, y el paquete AMS más sencillo amscd. Esta página compone un cuadrado conmutativo, el diagrama más básico de este tipo, con cada herramienta, ordena cómo asignar dirección, etiquetas y estilo de línea a las flechas, y compara cuándo conviene usar una u otra.

Qué es un diagrama conmutativo

Los diagramas conmutativos se usan en álgebra, teoría de categorías y topología para comunicar relaciones de un vistazo. El ejemplo mínimo es el cuadrado conmutativo: objetos A, B, C, D en las cuatro esquinas, una aplicación f en el borde superior de A a B, g en el inferior de C a D, una aplicación por el lado izquierdo de A a C y otra por el derecho de B a D. Decir que “el cuadrado conmuta” significa simplemente que los dos caminos de A a D, por arriba y luego bajando por la derecha frente a bajar por la izquierda y luego ir por abajo, son la misma aplicación.

Un diagrama es en sí una pieza de matemáticas, así que normalmente se coloca dentro de un entorno matemático en display (\[\] o el entorno equation). Históricamente se han escrito muchos paquetes para esto (xy/xypic, diagrams y otros), pero hoy el estándar de facto es tikz-cd, que dibuja curvas, flechas diagonales y diagramas complejos de varias filas con facilidad. Cuando basta un diagrama rectangular sencillo, el paquete AMS amscd es la opción ligera. Los vemos por turno.

tikz-cd: la opción moderna

tikz-cd adapta el paquete general de dibujo TikZ a los diagramas conmutativos. Fue escrito por Florêncio Neves y ahora lo mantiene Augusto Stoffel; la versión actual en CTAN es la 1.0 (mayo de 2021). Cárgalo en el preámbulo con \usepackage{tikz-cd} o, tras cargar TikZ, con \usetikzlibrary{cd}, y obtendrás el entorno tikzcd. Su contenido se escribe como una matriz, igual que tabular en LaTeX: las celdas se separan con & y las filas con \\. Cada celda es un nodo donde se coloca un “objeto”, y todo se compone automáticamente en modo matemático.

Las flechas entre objetos se dibujan con el comando \arrow; el alias corto \ar hace exactamente lo mismo. En la celda donde empieza la flecha, escribes \arrow[…] y especificas el destino y la decoración dentro de los corchetes. El destino se da con claves de dirección: r para derecha, l para izquierda, u para arriba, d para abajo. Se combinan como una cadena; por ejemplo, [rd] apunta a la celda una posición a la derecha y una hacia abajo, en diagonal.

Para poner una etiqueta, el nombre de una aplicación, en una flecha, escribe una cadena entre comillas entre las opciones. \arrow[r, "f"] significa “una flecha hacia la celda de la derecha, etiquetada f”. Por defecto la etiqueta queda a la izquierda de la flecha respecto a su dirección; poner un apóstrofo ' justo después de la etiqueta entre comillas la mueve al lado opuesto, como "g"'. Una flecha puede llevar varias etiquetas, y puedes ajustar su posición con opciones como "f" near start. Este es un ejemplo breve del uso típico.

latex
\[
\begin{tikzcd}
  A \arrow[r, "\phi"] \arrow[rd] & B \\
  & C
\end{tikzcd}
\]

Esto produce A arriba a la izquierda, B arriba a la derecha y C abajo a la derecha: una flecha horizontal va de A a B a la derecha con la etiqueta φ, mientras una flecha diagonal baja de A a C en la esquina inferior derecha. Observa que \arrow[r, "\phi"] y \arrow[rd] están escritas una tras otra en la misma celda A; una sola celda puede emitir cualquier número de flechas.

Con esto, compongamos el cuadrado conmutativo descrito al comienzo. Coloca las cuatro esquinas A, B, C, D como una matriz 2×2 y dibuja cuatro flechas: f desde A hacia la derecha, el lado izquierdo desde A hacia abajo, el lado derecho desde B hacia abajo y g desde C hacia la derecha.

latex
\[
\begin{tikzcd}
  A \arrow[r, "f"] \arrow[d, "\alpha"] & B \arrow[d, "\beta"] \\
  C \arrow[r, "g"]                      & D
\end{tikzcd}
\]

Esto da un cuadrado con A, B, C, D en las esquinas: f apunta a la derecha en el borde superior, g a la derecha en el inferior, α hacia abajo en el lado izquierdo y β hacia abajo en el derecho. Cada etiqueta queda en su lado predeterminado, a la izquierda de la dirección de la flecha. Para mover la β del lado derecho al lado opuesto, exterior, escribe por ejemplo \arrow[d, "\beta"']. Como el interior de tikzcd está en modo matemático, usa \text{…} de amsmath dentro de la opción de etiqueta cuando quieras palabras normales.

La gran fortaleza de tikz-cd es lo mucho que permite ajustar la apariencia de una flecha. El estilo de línea, la punta y la curvatura se cambian simplemente añadiendo claves de estilo a las opciones de \arrow. La tabla reúne las comunes. Se pueden dar varias a la vez, como en \arrow[r, tail, two heads, dashed], y combinarlas libremente.

ClaveEfecto
hookUn gancho (⊂) en la cola, para una inclusión o inyección
two headsPunta doble, para una sobreyección
tailAñade una cola al inicio, otra marca de inyección
dashedHace la línea discontinua, a menudo para una aplicación determinada de forma única
dottedHace la línea punteada, una clave de TikZ
equalDibuja una línea doble, una igualdad, en lugar de una flecha
bend leftCurva la flecha hacia la izquierda; bend left=20 fija el ángulo
bend rightCurva la flecha hacia la derecha

Es común colocar una marca de isomorfismo como \sim o \simeq sobre una flecha como etiqueta. Por ejemplo, \arrow[r, dashed, "\simeq"] coloca el signo ≃ sobre una flecha discontinua. Para dibujar dos arcos distintos entre el mismo par de objetos, usa bend left y bend right. Como tikz-cd también acepta claves de TikZ directamente (color=…, dotted, in=…/out=…, etc.), su rango expresivo es en la práctica el de todo TikZ.

Una advertencia: los diagramas tikzcd no se muestran correctamente en visores DVI. Compila con pdflatex, lualatex o xelatex, que producen PDF directamente, o mediante una ruta de DVI a PDF/PS. Ten en cuenta también que \arrow tiene una forma antigua anterior a la sintaxis con comillas, \arrow[…]{direction}labels, por ejemplo \arrow{r}{f}. Sigue disponible por compatibilidad, pero para trabajo nuevo se recomienda la sintaxis con comillas por ser más legible.

amscd: el entorno CD sencillo de AMS

amscd porta a LaTeX la función de diagramas conmutativos de AMS-TeX; se carga en el preámbulo con \usepackage{amscd}. Proporciona un único entorno CD. Como con tikz-cd, se escribe el contenido como una matriz usando & y \\, pero amscd no depende de paquetes externos, no usa TikZ, y funciona solo con la composición de TeX, así que es ligero. Su diseño, sin embargo, es deliberadamente austero: solo puede dibujar flechas horizontales y verticales.

Cada flecha se escribe como un token especial que empieza con @. Las flechas horizontales son @>>> hacia la derecha y @<<< hacia la izquierda; las verticales son @VVV hacia abajo, con V de vertical, y @AAA hacia arriba, leyendo la A como una flecha ascendente. La igualdad, línea doble, es @= en horizontal y @| o @\vert en vertical. Para un punto de la retícula que no debe llevar flecha, coloca @., un punto. Las flechas horizontales van entre objetos, en la posición & de la misma fila; las verticales van en la fila justo debajo de su objeto.

Las etiquetas se escriben entre los caracteres que forman una flecha. El @>>> horizontal tiene tres delimitadores > y por tanto dos ranuras: el texto en la primera, justo después de @>, va encima de la flecha; el texto en la segunda va debajo. Así, @>f>> pone f encima, @>>g> pone g debajo y @>f>g> pone f encima y g debajo. El @VVV vertical funciona igual: @VfVV pone f a la izquierda de una flecha hacia abajo y @VVfV lo pone a la derecha; @AAA sigue la misma regla.

Este es el ejemplo de cuadrado conmutativo del manual AMS de amscd. Supone que \End se ha definido como nombre de operador, de forma similar a \operatorname.

latex
\[
\begin{CD}
  S^{{\mathcal{W}}_\Lambda}\otimes T  @>j>>  T \\
  @VVV                                @VV{\End P}V \\
  (S\otimes T)/I                     @=  (Z\otimes T)/J
\end{CD}
\]

En este diagrama, la fila superior traza una flecha horizontal desde el objeto izquierdo hasta T a la derecha, con la etiqueta j encima. La fila central (@VVV y @VV{\End P}V) crea las flechas verticales: una flecha descendente sin etiqueta en la columna izquierda y una flecha descendente con la etiqueta End P a su derecha en la columna derecha. La fila inferior une sus dos objetos con @=, una igualdad de doble línea. Las llaves en {\End P} agrupan una etiqueta de varios tokens en una sola unidad.

El cuadrado conmutativo f/g/α/β del inicio de la página se compone así en amscd. Las etiquetas de las flechas verticales izquierda y derecha se colocan en la primera ranura, el lado izquierdo, como se explicó arriba.

latex
\[
\begin{CD}
  A    @>f>>    B \\
  @VV\alpha V   @VV\beta V \\
  C    @>g>>    D
\end{CD}
\]

Esto produce un cuadrado con A, B, C, D en las esquinas: una flecha f hacia la derecha en el borde superior, una flecha g hacia la derecha en el inferior, una flecha α hacia abajo en el lado izquierdo y una flecha β hacia abajo en el derecho. Es exactamente el mismo diagrama que el ejemplo de tikz-cd; solo cambia la notación con @. Como el entorno CD de amscd está en modo matemático, también se coloca dentro de matemáticas en display; arriba usamos \[\].

Cuál usar

Los dos paquetes tienen alcances claramente distintos. El entorno CD de amscd maneja solo diagramas en retícula, rectangulares; el propio manual AMS afirma que soporta “solo diagramas rectangulares sencillos, sin flechas diagonales ni funciones más exóticas”. Esa es su principal limitación. Si necesitas flechas diagonales, curvas o diagramas complejos de varias filas, amscd no puede dibujarlos y debes usar tikz-cd o la familia xy.

  • Necesitas flechas diagonales o curvastikz-cd. amscd solo es horizontal/vertical y no puede inclinar.
  • Quieres control fino de puntas y estilos de línea (inyección hook, sobreyección two heads, discontinuas, líneas dobles, etc.) → tikz-cd.
  • Basta un diagrama rectangular simple / quieres dependencias ligerasamscd. No carga TikZ y es ligero y rápido.
  • Gusto de notación: la escritura @>>> de amscd es breve pero peculiar; \arrow[r, "f"] de tikz-cd es más larga, pero clara para quien lee.
  • Ruta de salida: tikz-cd no se muestra correctamente en visores DVI, así que presupone un motor que produzca PDF, como pdfLaTeX; amscd no tiene esa restricción.

Como regla práctica: si tu artículo tiene algún diagrama rectangular ocasional, amscd basta; no añade dependencias y se compone rápido. Si los diagramas son centrales y necesitas aplicaciones inclinadas, curvas o puntas elaboradas, elige tikz-cd. Y recuerda que para algo tan simple como “A → B” a menudo no necesitas ningún entorno de diagrama: un comando en línea como \xrightarrow{f} de amsmath es suficiente.