«PSTricks es cosa del pasado, TikZ es lo que se usa.» Es el resumen habitual, y mirar dentro de TeX Live 2024 lo pone del revés. El PSTricks que incluye es la versión 3.19c, del 2 de febrero de 2024, y sigue recibiendo lanzamientos. En cambio Xy-pic, célebre como herramienta clásica para diagramas conmutativos, se actualizó por última vez el 6 de octubre de 2013, y escribe esa fecha en el registro en cada compilación. Esta página recorre los cuatro sistemas de dibujo disponibles en LaTeX además de TikZ —PSTricks, que recurre a PostScript; el veterano Xy-pic; Asymptote, un lenguaje autónomo; y MetaPost, descendiente de METAFONT— organizados en torno a su ruta de salida. Porque lo que los separa en la práctica no es tanto la expresividad como qué motor puede componerlos y de qué modo.
Si empiezas una figura nueva, ¿sigue siendo TikZ la opción por defecto?
Sí, casi con seguridad TikZ. La razón no está en las funciones sino en la ausencia de fricción. TikZ funciona con pdflatex, lualatex o xelatex, sin programa externo y sin una fase de compilación adicional. Cada uno de los cuatro sistemas de esta página rompe al menos una de esas condiciones: PSTricks no funciona directamente con pdfLaTeX, Asymptote exige un binario externo y una compilación en tres pasos, MetaPost presupone LuaLaTeX o un programa dedicado, y Xy-pic funciona pero dejó de actualizarse en 2013. Aun así vale la pena conocer los demás por tres motivos: mantener documentos existentes, 3D de verdad y ecosistemas concretos como ConTeXt.
PSTricks: treinta años y sigue publicando versiones
PSTricks es un conjunto de macros que llaman a las capacidades de dibujo de PostScript directamente desde la fuente TeX/LaTeX. Las líneas de copyright al comienzo de pstricks.tex cuentan toda la historia del sistema: Timothy Van Zandt (1993, 1994, 1999), Denis Girou (2000–2003) y Herbert Voß (desde 2004). Transmitida por tres mantenedores, la versión incluida en TeX Live 2024 es la 3.19c, del 2 de febrero de 2024. Lo antiguo de PSTricks es su premisa de diseño, no su estado de mantenimiento.
La sintaxis suele leerse en los propios nombres. \psline traza una línea o polilínea, \pscircle un círculo, \psframe un rectángulo. Las coordenadas van entre paréntesis, como \psline(0,0)(3,2), y un círculo toma centro y radio: \pscircle(2,2){1}. Toda la figura vive en un entorno pspicture, cuya apertura lleva las esquinas inferior izquierda y superior derecha: \begin{pspicture}(0,0)(4,3). Para colocar cualquier cosa en una coordenada se usa \rput; si además quieres ángulo o desplazamiento, \uput. Estilo de línea, puntas de flecha y color se dan juntos como opciones entre corchetes.
\begin{pspicture}(0,0)(4,3)
\psframe(0,0)(4,3)
\psline[linewidth=1pt]{->}(0,0)(3,2)
\pscircle(2,1.5){1}
\rput(2,1.5){$O$}
\end{pspicture}Esto traza un marco de cuatro unidades de ancho y tres de alto, tira un segmento con flecha del origen a (3,2), superpone un círculo de radio 1 centrado en (2,1.5) y pone una O en el centro. La familia de complementos también es rica: pst-plot para gráficas de funciones, pst-node para nodos y conexiones, pst-3dplot para 3D y muchos más. En expresividad sigue siendo del todo potente. El problema se reduce al único punto de la sección siguiente.
El error de PSTricks con pdfLaTeX y cómo esquivarlo
Aparece ! Undefined control sequence. en la primera orden de dibujo. Al pasar por pdflatex, en TeX Live 2024, un documento con \usepackage{pstricks}, se detuvo en la línea del \psframe con: "! Undefined control sequence. \c@lor@to@ps ->\PSTricks _Not_Configured_For_This_Format". A mitad de la expansión aparece un testigo llamado \PSTricks_Not_Configured_For_This_Format, dejado sin definir a propósito, que grita en su propio nombre que ese formato no está soportado. Lo molesto es que en nonstopmode lanza el error decenas de veces y aun así produce un PDF hasta el final: un PDF al que sencillamente le falta la figura.
La causa está en el propio mecanismo de salida. PSTricks está diseñado para emitir su dibujo como \specials de PostScript —instrucciones especiales incrustadas en el DVI— y pdflatex, que produce PDF directamente, no tiene dónde alojarlas. Hay tres salidas, y las tres se comprobaron funcionando en TeX Live 2024.
# route 1: the classic DVI path
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.ps
# route 2: stay in pdflatex, let auto-pst-pdf shell out
pdflatex --shell-escape figure.tex
# route 3: just use xelatex - no extra package needed
xelatex figure.texLa ruta 1 es la clásica y la más fiable: latex genera el DVI, dvips lo convierte en PostScript y ps2pdf (de Ghostscript) lo pasa a PDF. Una advertencia medida: Ghostscript 10.03.0 imprimió por el camino "WARNING: Transparency operations ignored - need to use -dALLOWPSTRANSPARENCY". Eso significa que la transparencia de PSTricks (la familia opacity) se descarta en silencio, así que si usas rellenos translúcidos comprueba el resultado con tus propios ojos.
La ruta 2 conserva el flujo de pdflatex y confía el trabajo entre bastidores a auto-pst-pdf. El mecanismo es sencillo: durante la ejecución de pdflatex, auto-pst-pdf lanza un segundo LaTeX como proceso hijo, renderiza solo las partes de PSTricks a través de PostScript en <nombre>-pics.pdf y lo incorpora. Al ejecutarlo, el registro muestra "auto-pst-pdf: Auxiliary LaTeX compilation": la ruta 1 girando entre bastidores. Como lanza un proceso externo, --shell-escape es obligatorio; si lo olvidas te lo dicen sin rodeos: "! Package auto-pst-pdf Error: auto-pst-pdf will not work!" Es la ruta indicada cuando necesitas mezclar imágenes PNG o JPEG en el mismo documento.
La ruta 3 es la más sorprendente y la más sencilla: pasa la misma fuente, sin cambiar un solo carácter, por xelatex. No hay ningún paquete extra que instalar: el propio conjunto PSTricks de TeX Live 2024 incluye un archivo de configuración en tex/generic/pstricks/config/xdvipdfmx.cfg, que se carga automáticamente cuando la ejecución es XeLaTeX (su nombre aparece efectivamente en el registro). Como XeLaTeX pasa internamente por un formato intermedio de la familia DVI, los \specials de PostScript circulan sin trabas. Si tu documento ya se compone con XeLaTeX, puedes decir con razón que PSTricks no necesita rodeo alguno.
Xy-pic y \xymatrix: sigue funcionando, congelado desde 2013
Xy-pic (paquete xy) es un paquete de propósito general para componer grafos y diagramas, y funciona igual bajo plain TeX, LaTeX o AMS-LaTeX. No necesita ruta de salida especial: pdflatex lo procesa directamente. Lo curioso es que escribe sus propios datos en el registro en cada compilación; en TeX Live 2024 imprime " Xy-pic version 3.8.9 <2013/10/06>". El copyright de xy.tex va de 1991 a 2013, Kristoffer H. Rose y otros. Más de veinte años de uso y más de diez sin actualización, condensados en una línea.
En la práctica, la parte que se usa es \xymatrix, para diagramas conmutativos. Es un modo que dispone el diagrama como una matriz: igual que en tabular, & separa las entradas y \\ las filas. Las flechas entre objetos se trazan con \ar, cuyo destino es una tecla de dirección: [r] derecha, [l] izquierda, [u] arriba, [d] abajo, y combinaciones como [rd] para la celda un paso a la derecha y abajo. Las etiquetas reutilizan la notación de sub y superíndices: ^ coloca la etiqueta encima de la flecha (a la izquierda, mirando en su sentido) y _ debajo (a la derecha). La carga habitual es \usepackage[all]{xy}, donde [all] activa el conjunto estándar.
\usepackage[all]{xy}
% ...
\[
\xymatrix{
A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
C \ar[r]_{g} & D
}
\]Esto da un cuadrado conmutativo con A, B, C y D en las esquinas: f a la derecha arriba, α hacia abajo a la izquierda, β hacia abajo a la derecha, g a la derecha abajo. Un diagrama es en sí una pieza matemática, así que va dentro de un entorno de matemática en display. Para un diagrama conmutativo nuevo, la elección moderna hoy es tikz-cd, basada en TikZ: más cómoda con curvas, puntas de flecha elaboradas y diagramas complejos de varias filas, y con mensajes de error legibles. El valor de esta sección está en poder leer y editar manuscritos ya escritos en Xy-pic. La comparación entre ambos corresponde a la página de diagramas conmutativos.
Asymptote: un lenguaje cuyo compilador viene dentro de TeX Live
Oír que hace falta un programa externo pone en guardia, pero el asy de Asymptote forma parte de TeX Live. Mira en el directorio de binarios de TeX Live 2024 y verás un asy de unos 45 MB junto a mpost y mf; asy --version responde "Asymptote version 2.88" y enumera entre sus opciones activas "V3D 3D vector graphics output". Es decir, instalar TeX Live ya te da Asymptote sin nada más que buscar. Esa es la diferencia decisiva con gnuplot, que no está en TeX Live y hay que instalar por cuenta propia.
Asymptote no es un conjunto de macros de TeX sino un lenguaje autónomo de gráficos vectoriales. Con sintaxis parecida a C++, describe figuras como un lenguaje de programación de verdad, con variables, funciones, bucles y tipos. Su intención de diseño también es interesante: el manual oficial presenta Asymptote como un lenguaje inspirado en MetaPost, al tiempo que reivindica una sintaxis más limpia, de estilo C++. Lo más singular es cómo fija las dimensiones. Cuando un tamaño global como size(6cm) choca con elementos que no escalan —etiquetas y puntas de flecha—, Asymptote resuelve las restricciones con el método símplex, es decir, con programación lineal. No abundan los lenguajes de dibujo que resuelven un programa lineal para decidir el tamaño de una figura.
Para incrustarlo en LaTeX, carga \usepackage{asymptote} y escribe el código de la figura dentro de un entorno asy. Por su diseño, compilar lleva tres pasos, y al ejecutarlo en TeX Live 2024 ocurrió así. Primero, pdflatex escribe el contenido del entorno asy como <nombre>-1.asy y a la vez informa "Package asymptote Warning: file ... not found on input line 11.", lo cual es natural porque la figura aún no existe. Después asy <nombre>-1.asy produce <nombre>-1.pdf, y un segundo pdflatex incorpora ese PDF. Girar los tres pasos a mano es pesado, así que en la práctica se deja a latexmk.
pdflatex document # writes document-1.asy
asy document-1.asy # produces document-1.pdf
pdflatex document # includes it
# or, in one go:
latexmk -pdf document// a standalone .asy file, run with: asy figure.asy
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);Este código importa el módulo three (sus funciones 3D), dibuja un cubo unitario y tira flechas tridimensionales roja, verde y azul desde el origen a lo largo de los ejes x, y y z. Las figuras no tienen por qué ir incrustadas: escritas como archivo .asy autónomo y ejecutadas solas con asy figure.asy, pueden salir en PDF, EPS, SVG, WebGL o formatos 3D incrustables en un PDF. Como TeX compone las etiquetas, las matemáticas de la figura coinciden con la tipografía del cuerpo. Para 3D de verdad —sólidos y superficies con ejes de coordenadas— Asymptote se escribe con mucha más naturalidad que TikZ. También lo acompaña una interfaz gráfica, xasy, para dibujar de forma interactiva y exportar la fuente .asy.
MetaPost: con LuaLaTeX no hace falta ningún programa externo
MetaPost es la reelaboración de John Hobby del METAFONT de Knuth —un lenguaje para describir fuentes— con PostScript como salida. Hereda la notación de METAFONT que resuelve curvas suaves a partir de puntos y direcciones (el algoritmo de Hobby) y permite enunciar coordenadas de forma declarativa, como ecuaciones. El uso clásico lo trata como lenguaje autónomo: se entrega un archivo .mp al programa dedicado mpost y se obtiene EPS.
Ahora bien, en el LaTeX actual esa llamada externa es innecesaria. Carga el paquete luamplib y podrás escribir MetaPost directamente dentro de un entorno mplibcode. LuaTeX lleva incorporado el motor de MetaPost como biblioteca mplib, así que no hay que lanzar un mpost aparte ni activar --shell-escape. Al pasar el ejemplo siguiente por lualatex en TeX Live 2024 salió un PDF en una sola pasada sin invocar ningún proceso externo. De los cuatro sistemas de esta página, solo MetaPost a través de LuaLaTeX no exige herramienta externa alguna.
% compile with lualatex
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
draw fullcircle scaled 2cm withpen pencircle scaled 1pt;
draw (-1cm,0)--(1cm,0);
draw (0,-1cm)--(0,1cm);
endfig;
\end{mplibcode}
\end{document}El contenido de mplibcode es MetaPost puro. beginfig(1) … endfig delimitan una figura; dibuja el círculo unitario escalado a 2 cm de diámetro con una pluma de 1 pt y luego traza un diámetro horizontal y otro vertical. fullcircle, pencircle y scaled pertenecen todos al vocabulario incorporado de MetaPost. La pieza clave de su ecosistema es MetaFun, un formato potente a través del cual el sistema de composición ConTeXt integra MetaPost en profundidad. Si trabajas en ConTeXt, MetaPost es el medio central de dibujo; si trabajas sobre todo en LaTeX, la posición es TikZ por defecto y MetaPost cuando quieras su descripción de curvas heredada de METAFONT.
Los cuatro comparados: cuál elegir y cuándo
Ordenados por ruta de salida y motor, los criterios de elección se hacen visibles. Para mantener un documento existente, hazte capaz de leer y escribir el sistema que ya emplea. Si necesitas figuras 3D, Asymptote. Si trabajas en ConTeXt, MetaPost vía MetaFun. Para un diagrama conmutativo nuevo, tikz-cd antes que Xy-pic. Y para la gran mayoría de dibujos que no encajan en ninguno de esos casos, el juicio más sólido es TikZ: sin herramienta externa y sin ruta de salida especial.
| Sistema | Ruta de salida / motor | Herramienta externa | Fortaleza / uso principal |
|---|---|---|---|
PSTricks | latex → dvips → ps2pdf, o pdfLaTeX con auto-pst-pdf, o XeLaTeX por su cuenta | dvips y Ghostscript; la ruta auto-pst-pdf necesita además --shell-escape | Rellenos y efectos PostScript de calidad; muchos documentos heredados; sigue mantenido (v3.19c, 2024) |
Xy-pic | Funciona con LaTeX ordinario; sin ruta especial | Ninguna | Veterano de los diagramas conmutativos; tikz-cd lo sustituye hoy; congelado en 3.8.9 (2013) |
Asymptote | latex/pdflatex → asy → latex de nuevo; o un .asy autónomo | asy viene con TeX Live; latexmk automatiza las pasadas | 2D y 3D serios; sólidos y superficies con ejes; salidas a SVG, WebGL e incluso PDF 3D |
MetaPost | Procesar .mp con mpost; o LuaLaTeX con el mplibcode de luamplib | Ninguna vía LuaLaTeX: mplib va incorporado en LuaTeX | Curvas heredadas de METAFONT y coordenadas como ecuaciones; núcleo de ConTeXt (MetaFun) |