Otros sistemas de dibujo

TikZ es hoy el estándar de facto para dibujar, pero no es la única opción. Varios sistemas anteriores siguen teniendo su lugar: PSTricks, que aprovecha PostScript; el veterano Xy-pic, fuerte en diagramas; Asymptote, un lenguaje independiente para 2D y 3D; y MetaPost, descendiente de METAFONT. Esta página ordena qué es cada sistema no TikZ y cuándo usarlo, con especial atención a las peculiaridades de su canal de salida. Para trabajo nuevo, TikZ suele bastar; estos conviene conocerlos para documentos heredados, 3D o ecosistemas concretos.

TikZ primero por defecto

Antes de empezar, dejemos clara la recomendación. Si hoy empiezas a dibujar figuras en LaTeX, lo correcto es acudir primero a TikZ. TikZ se mantiene activamente, funciona con pdflatex, lualatex o xelatex sin herramientas externas extra, se integra de forma natural con las fuentes y colores del documento, y cuenta con un gran ecosistema de bibliotecas (tikz-cd, PGFPlots, circuitikz y más). TikZ en sí se trata en “Fundamentos de TikZ”.

Entonces, ¿por qué conocer otros sistemas? Por tres razones principales. Primero, documentos existentes: artículos, libros y plantillas antiguos pueden estar escritos en PSTricks o Xy-pic, y debes poder leerlos para mantenerlos o revisarlos. Segundo, 3D: para figuras tridimensionales serias, Asymptote es el más fuerte. Tercero, ecosistemas específicos: en el mundo ConTeXt, MetaPost (vía MetaFun) es el medio central de dibujo. Los vemos por orden.

PSTricks: la potencia de PostScript

PSTricks es un conjunto de macros que llaman a las capacidades de dibujo de PostScript directamente desde la fuente TeX/LaTeX. Como indica el nombre, usa PostScript internamente, así que maneja rellenos, degradados y transformaciones de coordenadas con alta calidad. Cárgalo en el preámbulo con \usepackage{pstricks} y escribe la figura dentro de un entorno pspicture. Las coordenadas se dan al abrir el entorno, esquina inferior izquierda y superior derecha, como \begin{pspicture}(0,0)(4,3).

Los comandos básicos suelen leerse por su nombre. \psline dibuja una línea o polilínea, \pscircle un círculo y \psframe un rectángulo. Las coordenadas van entre paréntesis, como \psline(0,0)(3,2), y un círculo toma centro y radio, como \pscircle(2,2){1}. Para colocar un objeto arbitrario, texto u otra imagen, en coordenadas dadas, usa \rput, escrito \rput(2,1){text}. Si quieres ángulo o desplazamiento en la colocación, también está \uput. Este es un ejemplo mínimo.

latex
\begin{pspicture}(0,0)(4,3)
  \psframe(0,0)(4,3)
  \psline{->}(0,0)(3,2)
  \pscircle(2,1.5){1}
  \rput(2,1.5){$O$}
\end{pspicture}

Esta figura dibuja un marco rectangular de ancho 4 y alto 3, dentro una línea con punta de flecha desde el origen hasta (3,2), encima un círculo de radio 1 centrado en (2,1.5), y el símbolo matemático O en el centro. El {->} en \psline{->} especifica la punta de flecha; en PSTricks das estilo de línea, puntas, color, etc. juntos como opciones en corchetes [...] (por ejemplo \psline[linewidth=2pt,linecolor=red]{->}(...)).

Aquí está la advertencia principal. Como PSTricks depende de \specials de PostScript, instrucciones especiales incrustadas en el DVI, no funciona directamente con pdflatex, que produce PDF de inmediato. La ruta clásica y fiable pasa por DVI: latex → dvips → ps2pdf. Es decir, latex crea el DVI, dvips lo convierte a PostScript y ps2pdf (Ghostscript) lo convierte en PDF.

terminal
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.ps

Si debes encajarlo en un flujo pdflatex, o quieres mezclar imágenes PNG/JPEG, hay soluciones. Los paquetes pst-pdf y auto-pst-pdf renderizan solo las partes PSTricks vía PostScript en segundo plano, las convierten en fragmentos PDF y las incorporan a la salida de pdflatex (auto-pst-pdf llama a un proceso externo, por lo que debe ejecutarse con --shell-escape; el relacionado pdftricks también necesita -shell-escape). Otra vía es compilar con XeLaTeX: con xetex-pstricks instalado, xelatex puede manejar PSTricks sin cambiar la fuente.

PSTricks tiene una rica familia de paquetes añadidos: pst-plot (gráficas de funciones), pst-node (nodos y conexiones), pst-3dplot (gráficas 3D), y muchos más; su expresividad sigue siendo alta. Pero dada la restricción de su ruta de salida, TikZ suele ser más cómodo para documentos nuevos.

Xy-pic: el veterano de los diagramas

Xy-pic (paquete xy) es un paquete general de larga tradición para componer grafos y diagramas. Funciona con plain TeX, LaTeX y AMS-LaTeX, y se ha usado para diagramas en muchos campos: teoría de categorías, álgebra y topología, pero también autómatas, bases de datos, química y genealogía. En LaTeX se suele cargar con \usepackage[all]{xy}, donde [all] activa el conjunto estándar de funciones.

La parte más usada, especialmente para diagramas conmutativos, es \xymatrix. Es un modo que dispone el diagrama como una matriz: igual que en tabular, las entradas se separan con & y las filas con \\. Las flechas entre objetos se dibujan con el comando \ar, cuyo destino se da mediante teclas de dirección: [r] derecha, [l] izquierda, [u] arriba, [d] abajo, y combinaciones como [rd] para una diagonal (la celda un paso a la derecha y abajo). Para poner una etiqueta en una flecha se reutiliza la notación de subíndices y superíndices matemáticos: ^ coloca la etiqueta encima (a la izquierda) de la flecha, y _ debajo (a la derecha).

latex
\[
\xymatrix{
  A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
  C \ar[r]_{g}                  & D
}
\]

Esto produce un cuadrado conmutativo con A, B, C y D en las esquinas: f apunta a la derecha en el lado superior, α hacia abajo en el izquierdo, β hacia abajo en el derecho, y g a la derecha en el inferior. La etiqueta f queda encima de la flecha superior y g debajo de la inferior. Como el diagrama es en sí una pieza matemática, se coloca dentro de un entorno de matemática en display (\[\]).

Xy-pic es históricamente importante y aún aparece en muchos documentos, pero para diagramas conmutativos la alternativa moderna es tikz-cd, basada en TikZ. tikz-cd maneja con más facilidad curvas, puntas de flecha elaboradas y diagramas complejos de varias filas, con mensajes de error más amables. Una buena división es usar tikz-cd para trabajos nuevos y los conocimientos de esta sección para mantener documentos Xy-pic existentes. La comparación detallada está en la página “Diagramas conmutativos”.

Asymptote: un lenguaje para 2D y 3D

Asymptote no es un conjunto de macros TeX, sino un lenguaje autónomo de gráficos vectoriales. Con sintaxis parecida a C++, describe figuras como un lenguaje de programación completo, con variables, funciones, bucles y tipos. Su objetivo es dar a las figuras la misma calidad tipográfica que LaTeX aporta al texto científico, y su rasgo sobresaliente es que dibuja figuras tanto 3D como 2D con alta calidad. Como usa TeX para componer las etiquetas, las matemáticas de la figura coinciden con las fuentes del texto principal.

Para incrustarlo en LaTeX, carga \usepackage{asymptote} en el preámbulo y escribe el código de la figura dentro de un asy environment (\begin{asy}\end{asy}). Por su diseño, la compilación tiene tres pasos. Primero, ejecutar latex (o pdflatex) escribe el contenido de cada entorno asy en archivos temporales .asy. Después se ejecuta el programa externo asy sobre ellos para generar las figuras (PDF para pdflatex, EPS para latex/dvips). Por último, ejecutar latex/pdflatex una vez más incorpora las figuras ya generadas.

terminal
pdflatex document
asy document-*.asy
pdflatex document

Ejecutar estos tres pasos a mano es tedioso, así que en la práctica normalmente se deja que latexmk lo automatice. Las figuras de Asymptote también pueden escribirse como archivos .asy autónomos, en vez de incrustarse en el documento, y ejecutarse por separado con asy figure.asy para producir PDF, EPS o formatos que incluyan 3D interactivo. Este es un ejemplo mínimo de .asy.

latex
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);

Este código de Asymptote importa el módulo three (sus funciones 3D), dibuja un cubo unitario y luego traza flechas tridimensionales roja, verde y azul desde el origen a lo largo de los ejes x, y y z. size(6cm) fija el tamaño final. Así, la fortaleza de Asymptote es que permite escribir de forma relativamente natural 3D serio, como sólidos con ejes de coordenadas o superficies, que en TikZ resultaría laborioso. También existe una interfaz gráfica, xasy, que permite dibujar de forma interactiva y exportar el resultado como fuente .asy para editarlo a mano.

MetaPost: la línea de METAFONT

MetaPost es la reelaboración de John Hobby de METAFONT de Knuth (un lenguaje para describir fuentes), con PostScript como salida. Hereda la notación característica de METAFONT para resolver curvas suaves a partir de puntos y direcciones (el algoritmo de Hobby) y permite declarar coordenadas como ecuaciones, de forma declarativa. Clásicamente es un lenguaje autónomo: se procesa un archivo .mp con el programa dedicado mpost para obtener EPS.

En la práctica moderna, lo más cómodo es escribirlo en línea dentro de LuaLaTeX. Al cargar el paquete luamplib (\usepackage{luamplib}), puedes escribir código MetaPost directamente dentro de un mplibcode environment. Esto compone la figura usando la mplib library incorporada en LuaTeX, así que no necesita una llamada separada a mpost ni --shell-escape. Funciona en modo PDF o DVI (la salida DVI presupone dvipdfmx). Este es un ejemplo mínimo.

document.tex
% lualatex で処理する / 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 este mplibcode es código MetaPost. beginfig(1)endfig delimitan una figura; dibuja un círculo de radio 1cm (el círculo unitario escalado a un diámetro de 2cm) con una pluma de 1pt, y luego traza un diámetro horizontal y otro vertical. Compilada con LuaLaTeX, la figura se incorpora directamente al PDF sin herramienta externa. fullcircle, pencircle y scaled forman parte del vocabulario incorporado de MetaPost.

Una parte clave del ecosistema MetaPost es MetaFun, un formato potente para MetaPost; el sistema de composición ConTeXt integra MetaPost profundamente a través de MetaFun. Para usuarios de ConTeXt, MetaPost (mediante MetaFun) es la herramienta central de dibujo. En cambio, si trabajas principalmente en LaTeX, normalmente usas TikZ y mantienes MetaPost en reserva para cuando quieras su descripción de curvas al estilo METAFONT o para trabajar con ConTeXt.

Comparar los sistemas y elegir

Si se comparan los cuatro sistemas por ruta de salida, motor y fortaleza, se obtiene la tabla siguiente. La idea común es: para trabajos nuevos, empieza con TikZ, y recurre a los sistemas de aquí solo cuando haya una razón concreta: un documento heredado, 3D o un ecosistema particular.

SistemaRuta de salida / motorFortaleza / uso principal
PSTrickslatex → dvips → ps2pdf; o pst-pdf/auto-pst-pdf (requiere --shell-escape), o XeLaTeXRellenos y efectos PostScript de alta calidad; muchos documentos heredados
Xy-picFunciona con LaTeX ordinario (sin ruta especial)Diagramas conmutativos (el veterano); tikz-cd es la alternativa moderna
Asymptotelatex/pdflatex → asy externo → latex de nuevo (automatizar con latexmk); o .asy autónomo2D y 3D serios; sólidos y superficies con ejes
MetaPostProcesar .mp con mpost; o LuaLaTeX + mplibcode de luamplib (sin herramienta externa)Curvas al estilo METAFONT; central en ConTeXt (MetaFun)

Como regla práctica: para mantener un documento existente, conviene poder leer y escribir el sistema que ya usa, PSTricks o Xy-pic. Si necesitas figuras 3D, Asymptote es el primer candidato. Si trabajas con ConTeXt, MetaPost (MetaFun) encaja de forma natural. Para nuevos diagramas conmutativos, elige tikz-cd antes que Xy-pic. Y para la gran mayoría de dibujos que no encajan en esos casos, la opción más sólida es TikZ, sin herramienta externa adicional ni ruta de salida especial.