standalone

standalone es una clase de LaTeX para componer una sola cosa —una figura, un dibujo TikZ, una tabla— como una página recortada al tamaño de su contenido. Su valor real está menos en el recorte que en el hecho de que un mismo archivo tiene dos caras: compila figure.tex por separado y obtienes un PDF solo con la figura; inclúyelo con \input desde un artículo y ese mismo archivo entra en el cuerpo sin cambiar un carácter. El mecanismo de recorte también tiene historia. Antes de la opción crop, hoy predeterminada, standalone usaba el paquete preview, nacido del AUCTeX de Emacs: exactamente el código que hace flotar las vistas previas de fórmulas dentro del editor. Esta página trata la clase y el paquete en sí: cómo actúa border=, multi y subpreambles, y los errores que aparecen de verdad. Convertir la figura terminada en PNG o SVG es asunto de otra página.

Usar un mismo archivo de figura solo y dentro de un artículo

En cuanto un documento crece, uno quiere las figuras en archivos propios. Pero compilar uno de esos archivos por separado obliga a escribir el armazón —\documentclass, \begin{document}— cada vez, y la salida es la figura en la esquina de una gran página blanca de texto. La clase standalone resuelve ambas cosas de una vez. Pon \documentclass{standalone} al principio del archivo de figura y compilará solo, con la salida recortada al tamaño del contenido: una página de PDF, DVI o PS, sin número de página, encabezado ni pie.

latex
% figure.tex — a figure that is its own document
\documentclass[tikz,border=2pt]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw[thick,->] (0,0) -- (3,0) node[right] {$x$};
  \draw[blue,thick] (0,0) .. controls (1,2) .. (3,1);
\end{tikzpicture}
\end{document}

standalone viene en dos mitades: la clase que se usa en el archivo de figura (\documentclass{standalone}) y el paquete que se carga en el documento principal (\usepackage{standalone}). La clase hace de «componer una pieza sola»; el paquete, de «traer esa pieza al cuerpo». Es obra de Martin Scharrer, y la versión que hay en TeX Live 2024 es la v1.3b, de octubre de 2022. La clase necesita xkeyval; el paquete, además, currfile, gincltex, filemod y adjustbox. Todos vienen con TeX Live y MiKTeX.

crop frente a preview, y dónde se fija realmente el valor por defecto

El valor por defecto es crop, con un margen de 0pt, pero ese valor vive en el archivo de configuración standalone.cfg, no en la clase. standalone.cls en sí toma como predeterminados preview y 0.50001bp, que es lo que hacía la v0.x; después, justo antes de procesar las opciones, se lee standalone.cfg y anula ambos con \standaloneconfig{crop} y \standaloneconfig{border=0pt}. Ese montaje en dos etapas es útil: coloca tu propio standalone.cfg en el directorio del proyecto o en un árbol TEXMF local y cambias el valor por defecto de todos los archivos standalone de ese entorno. El cfg de la distribución se sobrescribe en cada actualización, así que guarda tus ajustes en un archivo aparte.

crop y preview son mutuamente excluyentes: si das ambas gana la última, y cualquiera de ellas fuerza float=false. La diferencia práctica aparece al medir. Una figura que solo contiene un rectángulo de 2 cm × 1 cm, compilada en TeX Live 2024, sale a 57,09 × 28,75 bp con el crop predeterminado. Añade ahora una línea en blanco antes de \end{document}: con crop no cambia nada, pero con preview el ancho salta a 343,71 bp. La línea en blanco cuenta como fin de párrafo, así que el contenido se convierte en un párrafo del ancho completo de \linewidth. Ese es el clásico «gran espacio blanco a la derecha de mi figura», y evitarlo es justo la razón de que crop pasara a ser el valor por defecto. preview sobrevive porque es la salida de emergencia cuando los sombreados TikZ fallan bajo XeLaTeX.

Añadir margen con border= y cómo se leen los valores

La opción a la que más se recurre es border= (alias margin=). Un valor se aplica a los cuatro lados, dos a horizontal y vertical, cuatro a izquierda, abajo, derecha y arriba en ese orden. Para pasar varios valores separados por espacios, encierra todo entre llaves: border={10pt 5pt}. Un número desnudo, sin unidad, se lee en bp, el punto PostScript. Medido sobre la misma figura de 57,09 × 28,75 bp, border=5pt da 67,05 × 38,71 bp (5 pt, unos 4,98 bp, por lado) y border={10pt 5pt} da 77,02 × 38,71 bp. Como border y varwidth no son ajustes globales, pueden cambiarse después con \standaloneconfig{...}: en el preámbulo, o incluso a mitad del documento cuando multi está activo.

OpciónEfectoPredeterminado
cropEncajar el contenido y recortar la página a su tamaño más el margentrue, fijado por standalone.cfg
previewRecortar mediante el paquete preview (cargado con active y tightpage): el método antiguo; excluyente con cropoff
border / marginMargen añadido al recorte: 1 valor todos los lados, 2 horizontal/vertical, 4 izquierda/abajo/derecha/arriba0pt
varwidthEnvolver el contenido en un entorno varwidth para que un párrafo tome su ancho natural; varwidth=6cm lo limitaoff
tikz / pstricksCargar el paquete de dibujo y recortar cada una de sus imágenes en su propia página (fija multi=tikzpicture, varwidth=false)off
multi / ignorerestPermitir varias páginas, cada una recortada por separado; ignorerest descarta lo que quede fuera de los entornos declaradosoff
classElegir la clase subyacente; también vale una clase japonesa como class=jsarticlearticle
beamerDesactivar el recorte y componer el contenido en un marco beamer en blancooff

Sacar varias figuras de un solo archivo (multi)

Por defecto, todo lo que hay dentro del entorno document se convierte en una página. Activa multi y cada aparición de un entorno declarado se recorta en su propia página. Por eso \documentclass[tikz]{standalone} resulta tan cómodo: internamente, la opción tikz fija multi=tikzpicture y varwidth=false, así que dos entornos tikzpicture seguidos dan un PDF de dos páginas. (pstricks hace lo mismo para PSTricks.) Para apuntar a tu propio entorno, declara \standaloneenv{myfig} y no pongas nada fuera; añade ignorerest solo si de veras necesitas material intercalado. También existe una opción math, que recorta fórmulas de una en una y fija multi e ignoreempty junto con un margen de 0.50001bp.

Los errores y síntomas que realmente aparecen

Todo error de standalone tiene una causa clara y se puede remontar desde el síntoma. El más común es meter un entorno figure dentro del archivo standalone: con crop o preview activos aparece ! LaTeX Error: Not in outer par mode. o un mensaje «Float(s) lost». El recorte funciona metiendo el contenido en una caja, y un flotante no puede flotar dentro de una caja. Como crop y preview fijan por su cuenta float=false, este error solo puede aparecer si después escribiste float=true a mano. Deja los flotantes en el documento principal y en el archivo standalone solo el dibujo.

  • Gran espacio blanco a la derecha de la figura. El contenido se convirtió en párrafo. Borra la línea en blanco o un \par sobrante antes de \end{document}, añade varwidth, o declara el entorno con multi y \standaloneenv.
  • El lado derecho queda cortado. El máximo de varwidth (por defecto \linewidth) es demasiado estrecho. Amplíalo, como en varwidth=15cm, o desactívalo con varwidth=false.
  • Se rechaza el valor de una opción. Cualquier cosa distinta de true o false en una clave booleana detiene la compilación, por ejemplo con ! Class standalone Error: Invalid value 'maybe' for boolean key 'crop'.
  • Aparece una página sobrante en un archivo de varias páginas. Estás usando multi y hay algo que se compone fuera de los entornos declarados. Quítalo o activa ignorerest.
  • El recorte falla en la ruta DVI. En modo DVI, crop emite órdenes PostScript, y el propio manual califica ese código de experimental. Con latex a secas, preview resulta a veces más estable.

El lado del paquete: traer la figura con \input

Carga \usepackage{standalone} lo antes posible en el preámbulo del documento principal y el paquete redefine \documentclass para que, en un archivo de figura incluido con \input, se salte todo desde su \documentclass hasta su \begin{document}. El entorno document del archivo de figura se trata como un simple grupo TeX, y también se ignora lo que venga tras \end{document}; así, al cuerpo solo llega el contenido del archivo. Hay un requisito: el documento principal debe cargar todos los paquetes que necesiten los archivos de figura. Como su preámbulo se omite, tikz y compañía solo puede cargarlos el archivo principal.

latex
\documentclass{article}
% load the standalone package early
\usepackage{standalone}
% and everything the sub-files need
\usepackage{tikz}

\begin{document}
\begin{figure}
  \input{figure}%  the standalone file from above
  \caption{A sub-file}
\end{figure}
\end{document}

Si copiar preámbulos a mano resulta tedioso, \usepackage[subpreambles=true]{standalone} los recoge por ti: el preámbulo de cada archivo de figura se reúne en un archivo auxiliar y se incorpora al documento principal en la siguiente pasada. Añade sort y los paquetes que cada figura carga, con sus opciones, se acumulan sin duplicados y se cargan mediante \PassOptionsToPackage, lo que evita choques de opciones. Si prefieres transcribirlos tú, print escribe la lista, pero es un modo de solo recolección y, como dice sin rodeos el mensaje Package standalone Warning: Running 'standalone' package in sub-preamble print mode. All body content of file 'figure.tex' is ignored!, el cuerpo no se compone.

\includestandalone y mode=: fuente o imagen

Escribe \includestandalone{figure} en lugar de \input y la opción de paquete mode= decide cómo llega la figura. Los valores son tex (incluir la fuente, el predeterminado), image (incluir un PDF o EPS existente con \includegraphics), image|tex (imagen si la hay, fuente si no), build (construirla siempre), buildmissing (construir solo si falta la imagen) y buildnew (construir solo si la fuente es más reciente; no funciona bajo XeLaTeX). La idea es la velocidad: una figura compleja no tiene por qué recomponerse en cada pasada del documento principal. Solo los tres modos de construcción llaman a un comando externo, y esos necesitan -shell-escape. El manual dice claramente que, si la construcción falla, se emite una advertencia y se incluye la fuente en su lugar.

Todo lo que viene después —convertir el PDF recortado en PNG o SVG, recortar un PDF existente con pdfcrop, manejar dvisvgm, los ajustes que se pasan a convert=— corresponde a la página sobre exportar figuras como imágenes. Del lado de la clase solo hay que recordar una cosa: no crear el margen es más rápido y más exacto que cortarlo después.

Encajar standalone en un proyecto

En un artículo real, tratar cada archivo standalone como la fuente de una figura, en una forma que pueda comprobarse aparte del texto, sale a cuenta. El archivo principal se llama paper.tex, las figuras viven en figures/ y el texto solo dice \input{figures/energy-flow}. Quien revise una figura compila entonces figures/energy-flow.tex por su cuenta, mientras el documento principal gestiona solo leyendas, numeración y referencias. En la revisión, adjunta ese PDF de una página y haz una pasada dedicada solo a figuras: el dibujo mejora sin esperar a que se reconstruya todo el manuscrito.

terminal
paper.tex
standalone.cfg          # optional: your own defaults for every figure
figures/
  energy-flow.tex
  apparatus-layout.tex
  timing-diagram.tex

Cuando el contenido de una figura deba seguir las mismas reglas de composición que el cuerpo, ajusta la clase subyacente con class=. Para una figura con rótulos japoneses, \documentclass[class=jsarticle,border=5pt]{standalone} bajo upLaTeX —o class=ltjsarticle bajo LuaLaTeX— alinea el espaciado entre caracteres y las tipografías con el texto principal. La clase y el paquete comparten además \ifstandalone, \IfStandalone{cuando va solo}{cuando se incluye} y \onlyifstandalone{...}, que permiten mostrar una escala o un marco de depuración solo en el archivo de figura, en una sola línea.

En qué se diferencian subfiles y TikZ external

Dos mecanismos persiguen fines parecidos, y ambos van en sentido contrario. Con subfiles, un subarchivo importa el preámbulo del documento principal; standalone hace lo inverso y permite reunir los preámbulos de los subarchivos en el documento principal. Por eso standalone encaja con reutilizar una figura en varios documentos —artículo, charla, tesis—, mientras que subfiles encaja con una división por capítulos donde principal y subarchivo se corresponden uno a uno. La biblioteca external de TikZ escribe imágenes temporales desde el archivo principal, otra vez en sentido opuesto. Dicho eso, \includestandalone[mode=buildnew] da en esencia el mismo efecto de cachear los dibujos costosos, y mantiene la figura como archivo independiente.