Lo primero que casi todo el mundo teclea para encuadrar texto en LaTeX es \fbox{...}. Funciona, hasta que el contenido ocupa más de una línea. Entrégale un párrafo entero y el marco se niega a plegarse, se sale del papel y el registro muestra Overfull \hbox. Esa única limitación es la razón de ser de los paquetes de encuadre framed, mdframed y tcolorbox. Esta página va del \fbox y el \framebox incorporados hasta los marcos que atraviesan páginas y los paneles de color con título, sostenida por una sola pregunta: ¿por qué un marco no se puede cortar por la mitad?
\fbox y \framebox: el marco incorporado y dónde se detiene
\fbox{...} no necesita ningún paquete y traza una línea fina ajustada a su argumento. Cuando quieras fijar anchura y alineación, usa \framebox[width][position]{...}: el primer argumento opcional fija la anchura de la caja y el segundo elige cómo se sitúa el contenido dentro — c (centrado, por defecto), l (izquierda), r (derecha), s (estirado a ambos bordes). Sin argumentos opcionales, \framebox se comporta igual que \fbox. Ambas son cajas en línea apoyadas en la línea base, así que se alinean de forma natural con \hspace y las palabras vecinas.
\fbox{a framed word}
% width 5cm, content flush left inside the box
\framebox[5cm][l]{flush left}
% multi-line: frame a \parbox, not the text itself
\fbox{\parbox{0.8\linewidth}{%
Several lines of text. The inner box wraps them
first, and only then does the frame go around.}}Y aquí está el muro. Ni \fbox ni \framebox pliegan su contenido. Dale un párrafo largo y seguirá creciendo hacia la derecha en una sola línea, empujando el marco fuera del papel y produciendo el aviso Overfull \hbox (... too wide). No es un fallo, sino la definición funcionando tal como está escrita: \fbox compone su argumento en una única caja horizontal, una \hbox, y una \hbox no contiene ningún punto de corte de línea. Para encuadrar varias líneas, construye antes el párrafo con \parbox o minipage, como arriba, y encuadra esa caja. \parbox y minipage se tratan en la página “Cajas”. Aun así, el truco se agota en cuanto el marco tiene que cruzar un salto de página; el motivo llega enseguida.
\fboxrule y \fboxsep: línea más gruesa, más margen interior
Dos longitudes deciden el aspecto del marco. \fboxrule es el grosor de la línea, 0.4pt por defecto en las clases estándar, y \fboxsep el margen interior entre la línea y el contenido, 3pt por defecto. Ambas se cambian con \setlength. Los 0.4pt por defecto son tan finos como el texto corriente, así que rara vez bastan cuando la caja debe destacar como advertencia. Eso sí, son longitudes globales corrientes: cambiarlas en el preámbulo cambia todas las \fbox del documento. Para engrosar solo una caja, mete el \setlength en un grupo {...}, como abajo. Cargar color o xcolor añade además \fcolorbox{color del marco}{fondo}{...}, que obedece exactamente a esas mismas dos longitudes; los nombres de color y las mezclas están en la página “Colores (xcolor)”.
% global: every \fbox in the document becomes thicker
\setlength{\fboxrule}{1pt}
\setlength{\fboxsep}{8pt}
% local: the group limits the change to this one box
{\setlength{\fboxrule}{2pt}\fbox{a heavy frame}}
% same two lengths, plus colour (needs color or xcolor)
\fcolorbox{red}{yellow!20}{warning}Por qué una caja enmarcada no puede partirse entre páginas
La respuesta es simple: el material rodeado por una línea se convierte en una sola caja, y el constructor de páginas de TeX solo puede cortar entre los elementos de una lista vertical, nunca dentro de una caja. En cuanto encierras algo, desaparece de la lista de sitios por donde la página puede cortarse. Eso también revela qué es en realidad un “marco divisible”. Ningún marco se corta jamás en dos. El paquete parte primero el contenido en trozos del tamaño de una página, dibuja un marco distinto alrededor de cada trozo y los apila para que la costura resulte invisible.
El paquete framed de Donald Arseneau deja ese mecanismo a la vista en su propio diseño. Su documentación indica que el primer trozo de un entorno partido recibe \FirstFrameCommand, los trozos intermedios \MidFrameCommand y el último \LastFrameCommand. Por eso justamente su entorno oframed puede dejar el marco abierto arriba y abajo en el punto de corte: usa comandos distintos para los extremos y para las costuras, y no dibuja línea horizontal donde la caja se partió. El aviso de copyright de framed.sty arranca en 1992, lo que revela que el problema es más antiguo que el propio LaTeX2e. Y como el principio es “partir primero, decorar después”, las limitaciones se siguen solas: las notas al pie, los flotantes y el material a varias columnas dentro de un marco divisible son frágiles, y los manuales tanto de tcolorbox como de mdframed lo recogen entre sus advertencias.
El paquete framed: framed, shaded y leftbar
Basta con \usepackage{framed} para obtener tres entornos que sobreviven a un salto de página. framed traza una línea a la anchura completa del texto, shaded rellena un fondo en vez de trazar una línea, y leftbar dibuja una sola línea vertical gruesa en el margen izquierdo, marca habitual de citas y apartes. Todo lo de la familia shaded exige que exista antes un color llamado shadecolor: defínelo directamente con \definecolor{shadecolor}{gray}{0.9}, o carga xcolor y escribe \colorlet{shadecolor}{gray!15}. Si lo olvidas, la compilación se detiene con un error de color indefinido, sin más pistas.
\usepackage{framed}
\usepackage{xcolor}
\colorlet{shadecolor}{gray!15}
% these lengths are the framed counterparts of
% \fboxrule and \fboxsep
\setlength{\FrameRule}{1pt}
\setlength{\FrameSep}{10pt}
\begin{framed}
A long note. If it reaches the bottom of the page the
frame is split and continues on the next one, which is
precisely what \fbox cannot do.
\end{framed}
\begin{shaded}
Filled background instead of a rule.
\end{shaded}
\begin{leftbar}
A single vertical rule in the left margin.
\end{leftbar}Las dimensiones se ajustan con \FrameRule y \FrameSep; la documentación del paquete dice sin rodeos que son las longitudes que sustituyen a \fboxrule y \fboxsep dentro de un entorno framed. El espacio vertical antes y después del entorno es \OuterFrameSep, que por defecto vale \topsep. Vienen además algunos entornos derivados: shaded* alinea el borde del relleno con la anchura del texto (el shaded simple se desborda ligeramente hacia el margen), snugshade y snugshade* se ciñen al contenido, y oframed es el marco abierto en el corte de la sección anterior. Más allá, definir tu propio \FrameCommand y envolver el material en \MakeFramed ... \endMakeFramed permite construir cualquier decoración divisible; la documentación considera que ese es el propósito más general del paquete. Lo que framed no da son esquinas redondeadas, sombras ni títulos. Para eso hay que subir un nivel.
Enmarcar una fórmula con \boxed, que por dentro es una \fbox
Para encuadrar un resultado final, carga \usepackage{amsmath} y usa \boxed{...} dentro del modo matemático: compone el argumento como matemáticas y luego lo enmarca. Lo interesante es su definición: dentro de amsmath, \boxed está escrito en esencia como \fbox{\m@th$\displaystyle#1$}. No es un mecanismo de dibujo aparte en absoluto: envuelve la fórmula en $...$ y se la pasa a \fbox. De ahí salen tres consecuencias prácticas. \fboxrule y \fboxsep se le aplican sin cambios. No puede partirse entre páginas, como es lógico. Y como \displaystyle viene forzado, un \boxed escrito dentro de un subíndice sale a tamaño completo mientras todo lo demás se encoge.
\usepackage{amsmath}
\[
\boxed{E = mc^2}
\]
% \fbox inside math sets its argument in TEXT mode:
% upright roman letters, not math italic
$\fbox{x+y}$ \quad versus \quad $\boxed{x+y}$Ponlos uno al lado del otro y la diferencia salta a la vista. $\fbox{x+y}$ compone su argumento en modo texto, así que x e y salen en redonda romana y el espaciado alrededor de + no es en absoluto matemático. $\boxed{x+y}$ conserva la cursiva y los espacios matemáticos. Dentro de las matemáticas, recurre siempre a \boxed. Para peticiones más elaboradas —englobar también el número de ecuación, o abarcar varias líneas de un align— el paquete empheq que viene con mathtools es la herramienta adecuada. El modo matemático en sí se trata en la página “Fundamentos del modo matemático”.
tcolorbox: color, título y breakable
Cuando se quieren color, título y salto de página a la vez, la respuesta es tcolorbox. Cárgalo con \usepackage[most]{tcolorbox} y pasa al entorno tcolorbox las claves colback= (color de fondo), colframe= (color del marco), title= (barra de título) y breakable (permitir saltos de página). La sutileza con la que tropieza casi todo el mundo es para qué sirve most. tcolorbox se divide en un núcleo y un gran conjunto de bibliotecas, y breakable es el nombre de una opción y de una biblioteca. Escribe un \usepackage{tcolorbox} a secas, añade breakable, y la caja seguirá sin partirse, porque la biblioteca nunca se cargó; hace falta [most], o un \tcbuselibrary{breakable} explícito. En el código fuente, most se expande a many (es decir raster, skins, breakable, hooks, theorems, fitting) más listingsutf8, external, magazine, vignette y poster: todo salvo minted, que depende de una herramienta externa.
\usepackage[most]{tcolorbox}
\begin{tcolorbox}[colback=blue!5, colframe=blue!60!black,
title=Remarks, fonttitle=\bfseries, breakable]
A coloured box with a title bar. Because breakable was
given, a long body is split across the page boundary.
\end{tcolorbox}
% inline, fitted to its content, no page breaks
\tcbox[colback=red!5, colframe=red!60!black]{inline box}La forma se ajusta con claves numéricas: boxrule= es el grosor de la línea (por defecto 0.5mm) y arc= el radio de las esquinas (por defecto 1mm), con sharp corners para esquinas rectas y rounded corners para las redondeadas por defecto. El fondo de la barra de título es colbacktitle= y la fuente del encabezado fonttitle= (se le pasa \bfseries o similar). Para un único marco pequeño dentro de una línea, usa \tcbox{...} en vez del entorno: se ajusta al contenido como \fbox y, como \fbox, no se parte. Debajo de todo está pgf: el núcleo exige pgf, y la biblioteca skins incluida en most exige tikz en persona. Por eso pedir enhanced saca a primer plano la capacidad de dibujo de TikZ: sombras, marcos dobles, transparencias y títulos decorados. Hay además una biblioteca theorems para cajas de tipo teorema, un modo de dos partes en el que \tcblower divide la caja para colocar la fuente sobre la salida, y mucho más.
“Mucho más” no es una figura retórica. El manual de tcolorbox que acompaña a TeX Live 2024, y que abre texdoc tcolorbox, tiene 548 páginas: una pequeña monografía, para un paquete que dibuja cajas. Su autor es Thomas F. Sturm, que escribió también csvsimple, para leer archivos CSV desde LaTeX, y genealogytree, para componer árboles genealógicos. El consejo práctico es no intentar leerse esas 548 páginas. Cuatro claves —colback, colframe, title, breakable— cubren casi todo lo que necesita un documento; el índice del manual basta cuando de verdad quieras algo más elaborado.
Reutilizar un mismo aspecto con \newtcolorbox
Repetir el mismo juego de opciones a lo largo del texto es algo de lo que te arrepientes el día que decides cambiar el color. Define la caja una sola vez en el preámbulo con \newtcolorbox. La forma es \newtcolorbox[init options]{name}[número de argumentos][valor por defecto]{options} y, como \newenvironment, puede crear entornos que aceptan argumentos. Si prefieres un comando en vez de un entorno, usa \newtcbox; para mover de golpe los valores por defecto de todo el documento, \tcbset{...}. Merece la pena adoptar una costumbre: nombra la caja por su significado —note, warning, definition— y no por su aspecto, como blueroundbox. Así, cambiar el estilo más adelante son unas líneas del preámbulo en vez de un buscar-y-reemplazar por todo el texto.
\usepackage[most]{tcolorbox}
% one argument: the heading text
\newtcolorbox{note}[1]{%
colback=yellow!10, colframe=orange!70!black,
fonttitle=\bfseries, title=#1, breakable}
\begin{document}
\begin{note}{Careful}
The note environment is now defined; its heading
arrives as an argument.
\end{note}
\end{document}mdframed: el término medio entre framed y tcolorbox
mdframed ocupa justo el hueco entre un marco más vistoso que framed y otro menos costoso que tcolorbox. Cárgalo con \usepackage{mdframed} y pasa al entorno mdframed claves opcionales como backgroundcolor=, roundcorner=, linecolor= y linewidth=. Por qué se escribió el paquete está dicho con las palabras del propio autor al comienzo de su código fuente: trabajar con \fbox o \fcolorbox obliga a gestionar los saltos de página a mano, mientras que el entorno mdframed los resuelve automáticamente. La misma limitación con la que arrancó esta página queda así consignada como razón de ser de otro paquete; y el código fuente dice con igual claridad que la implementación parte de la idea de framed.sty.
\usepackage{mdframed}
\begin{mdframed}[backgroundcolor=gray!10, roundcorner=5pt,
linecolor=gray!60, linewidth=1pt]
An mdframed box. It breaks across pages.
\end{mdframed}
% a named environment of your own, and a framed theorem
\newmdenv[linecolor=red, linewidth=1.5pt]{alert}
\newmdtheoremenv{prop}{Proposition}Su rasgo distintivo es poder elegir el motor de dibujo. framemethod=default dibuja con comandos LaTeX simples, mientras que framemethod=TikZ o framemethod=pstricks habilitan decoraciones más elaboradas. Los ajustes de uso frecuente se agrupan en \mdfsetup{...}. Un entorno enmarcado propio se define con \newmdenv{...}, y un entorno de teorema enmarcado con \newmdtheoremenv{...}. Conviene saber una cosa: la versión actual de mdframed es la 1.9b, con fecha del 1 de julio de 2013, y su código fuente aún conserva una línea que dice que el paquete está en estado beta. Aun así lleva más de una década en TeX Live y funciona. Para un documento nuevo que vaya a personalizarse mucho, sin embargo, el tcolorbox en mantenimiento activo es la apuesta más segura.
¿\fbox o tcolorbox? Cómo elegir
En realidad solo hay un criterio: el tamaño del material que quieres encerrar. Una palabra o una línea, \fbox / \framebox. Una fórmula, \boxed. Un marco sobrio alrededor de varios párrafos, framed. Color y esquinas redondeadas, mdframed. Título, saltos de página y decoración, tcolorbox. Ante la duda, pregúntate primero si la caja debe sobrevivir a un salto de página: esa sola pregunta separa limpiamente a los candidatos en dos grupos. Un consejo práctico más: framed y tcolorbox conviven sin problemas en el mismo documento, pero si te importa la coherencia visual, el resultado mejora cuando te decides por uno solo.
| Comando / paquete | Qué enmarca | ¿Parte páginas? | Mejor para |
|---|---|---|---|
\fbox / \framebox | Contenido que cabe en una línea | No | Una palabra o línea corta, rápido |
\boxed | Matemáticas, en modo matemático | No | Destacar un resultado final |
framed | Bloques de párrafos | Sí | Un marco ligero, sin decoración |
mdframed | Bloques de párrafos | Sí | Color y esquinas redondeadas, a bajo coste |
tcolorbox | Bloques, texto en línea, teoremas | Sí (breakable) | Títulos, paleta, kit completo |