LaTeX compone todo, texto, matemáticas y figuras, colocando primero el material en cajas y luego distribuyendo esas cajas en la página. Una caja es un rectángulo rígido con tres dimensiones (anchura, altura y profundidad); el algoritmo de salto de línea no mira dentro de ella y la trata como una unidad indivisible. Una vez entendida esta idea de “meterlo en una caja”, desplazar, superponer, enmarcar y construir columnas pasan a ser variantes de un mismo mecanismo.
El modelo de cajas
Dentro de TeX, todo material ya compuesto es una caja con dimensiones. Un carácter es una caja, una palabra es una caja, una línea es una caja y una página completa también lo es. Para formar líneas y párrafos, LaTeX une esas cajas con espacios elásticos y corta líneas y páginas en los puntos más adecuados. La idea clave es esta: una vez que el material queda empaquetado en una sola caja, su contenido ya no se divide. Dentro de la caja no hay saltos de línea; la caja completa pasa a la línea siguiente como una unidad.
Las cajas de LaTeX se dividen en dos grandes clases. La primera es la caja LR (left-to-right box): coloca su contenido en una sola fila y nunca introduce saltos de línea; si se vuelve demasiado ancha, sobresale del margen. \mbox, \makebox y la caja enmarcada \fbox son cajas LR. La segunda es la caja de párrafo: ajusta su contenido dentro de una anchura fijada de antemano, por lo que puede contener varias líneas e incluso varios párrafos. \parbox y el entorno minipage son cajas de párrafo.
Esta división corresponde a los modos de TeX. El interior de una caja LR está en modo LR, que solo hace fluir la entrada de izquierda a derecha y nunca corta la línea. Una caja de párrafo cambia al modo de párrafo (interno), donde los saltos de línea funcionan como en el texto normal. Tener presente qué comando crea cada modo hace evidente por qué algo no se ajusta, o por qué una caja crece hacia abajo.
Cajas LR: empaquetar una línea
La caja LR más básica es \mbox{...}. Encierra su contenido en una sola caja y prohíbe tanto los saltos de línea como la partición silábica. Si envuelves en \mbox una frase que nunca quieres dividir, como un producto llamado Mac OS X, un número de teléfono o un nombre químico largo, siempre permanecerá en una línea. También sirve para ajustes pequeños, como mantener un valor unido a su unidad.
Cuando quieras elegir la anchura tú mismo, usa \makebox[width][position]{text}. [width] fija la anchura de la caja y [position] decide dónde queda el contenido dentro de ella: l alineado a la izquierda, c centrado (predeterminado), r alineado a la derecha y s estira los espacios entre palabras para justificar la línea en toda la anchura. Además de longitudes normales como \textwidth, la anchura puede usar longitudes especiales que representan el tamaño natural del contenido: \width (su anchura), \height y \depth, y \totalheight (altura más profundidad). Así, \makebox[2\width]{word} crea una caja con el doble de anchura que la palabra.
Especialmente potente es la caja de anchura cero \makebox[0pt][position]{text}. Como la caja tiene anchura 0, LaTeX compone el contenido pero no avanza la posición horizontal, de modo que puede sobreimprimirse sobre lo que viene después. Con [c] el contenido se extiende a ambos lados del punto actual; con [r] cuelga hacia la izquierda, y con [l] hacia la derecha. Esto permite tachados, sobreimpresiones y notas en el margen; los atajos \rlap y \llap (cajas de anchura cero que sobresalen a la derecha y a la izquierda) funcionan igual.
Para dibujar un marco, usa \fbox{text} y \framebox[width][position]{text}, que trazan líneas en los cuatro lados de la caja. Los argumentos [width][position] de \framebox son exactamente los de \makebox. El aspecto del marco lo gobiernan dos longitudes: el grosor de la línea \fboxrule (0.4pt de forma predeterminada) y la separación entre marco y contenido \fboxsep (3pt de forma predeterminada). Se cambian con \setlength; por ejemplo, \setlength{\fboxsep}{0pt} hace que el marco abrace el contenido. Son cajas LR de una sola línea, así que para enmarcar varias líneas se combinan con las cajas de párrafo de abajo (para marcos más elaborados, consulta “Marcos”).
Do not break \mbox{Mac OS X} here.
% a 4cm box, contents flush right, then framed
\framebox[4cm][r]{right} \\[1ex]
% zero-width box: the word overprints what follows
X\makebox[0pt][l]{\,/} Y % prints an X/ over the gap before YEn el ejemplo, la frase envuelta en \mbox siempre permanece en una línea, \framebox[4cm][r] coloca su contenido alineado a la derecha dentro de un marco de 4 cm, y la caja de anchura cero sobreimprime una barra justo después de la X.
Cajas de párrafo: parbox y minipage
Cuando quieres fijar una anchura y dejar que el contenido se ajuste, entran en juego las cajas de párrafo. La opción ligera es \parbox[position]{width}{text}, que ajusta su contenido como un solo párrafo dentro de la {width} indicada. [position] dice dónde se alinea la caja respecto a la línea que la rodea: c (predeterminado, el centro de la caja se alinea con el centro de la línea), t (la línea base de la primera línea de la caja se alinea con la línea base exterior) o b (la línea base de su última línea). Puedes ir más lejos con \parbox[position][height][inner-pos]{width}{text} para fijar una altura y una alineación vertical interna (t/c/b/s), pero \parbox solo maneja un único párrafo: nada de varios párrafos ni listas.
La caja de párrafo más flexible es el entorno minipage: \begin{minipage}[position][height][inner-pos]{width} … \end{minipage}. Sus argumentos significan lo mismo que en \parbox, pero el contenido se comporta como una pequeña página propia. Puede contener varios párrafos, listas como itemize e incluso verbatim; es la herramienta principal entre las cajas de párrafo. Conviene recordar que dentro de ella la sangría de párrafo (\parindent) se reinicia a 0; ajústala tú mismo con \setlength{\parindent}{1em} si la necesitas.
Una minipage también tiene su propio manejo de notas al pie. Una \footnote usada dentro de ella no aparece al pie de la página, sino justo debajo de la minipage, marcada con letras minúsculas a, b, … (se usa el contador dedicado mpfootnote). Es útil cuando quieres que una nota quede autocontenida dentro de una tabla o un recuadro. En cambio, una minipage no puede contener flotantes (figure/table) y nunca se parte entre páginas: debe caber en la página como una sola caja.
El uso más común de las minipages son las columnas lado a lado. Coloca dos minipages una tras otra con un espacio como \hfill entre ellas y obtendrás una disposición sencilla de dos columnas, ideal para poner una figura junto a su leyenda o dos imágenes una al lado de la otra. Si ambas usan [t], las partes superiores de dos cajas de distinta altura quedan bien alineadas (para colocación más avanzada, consulta “Flotantes y colocación”).
\noindent
\begin{minipage}[t]{0.48\textwidth}
Left column. This minipage wraps text within 48\%
of the text width, and can hold several paragraphs,
lists, and even its own footnote.\footnote{Local note.}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\textwidth}
Right column, top-aligned with the left one because
both use the optional \verb|[t]| argument.
\end{minipage}Cada minipage ocupa el 48% de la anchura del texto, y el \hfill entre ellas absorbe el resto para que cubran toda la medida. Como ambas llevan [t], sus partes superiores se alinean aunque tengan distinto número de líneas. La \footnote de la caja izquierda aparece debajo de la minipage con una marca en minúscula, no al pie de la página.
Desplazar y trazar: raisebox y rule
Para desplazar una caja verticalmente, usa \raisebox{lift}[height][depth]{text}. Un {lift} positivo eleva el contenido; uno negativo lo baja. Lo interesante son los argumentos opcionales [height] y [depth]: le dicen a LaTeX que finja que la caja tiene esa altura y esa profundidad, de modo que el interlineado exterior se calcula con los valores declarados y no con lo que realmente se dibuja. Por ejemplo, \raisebox{0pt}[0pt][0pt]{a big symbol} dibuja algo grande pero declara altura y profundidad cero, lo que permite insertar un adorno sin alterar el interlineado. Las longitudes especiales \height, \depth y \totalheight también funcionan aquí.
\rule[lift]{width}{height} dibuja un rectángulo relleno sólido, una caja negra. {width} y {height} fijan sus dimensiones, y el [lift] opcional lo desplaza por encima de la línea base o por debajo si es negativo. Es perfecto para líneas horizontales: \rule{0.5\linewidth}{0.4pt} produce una línea fina de media anchura de línea.
La otra cara de \rule es el strut. Una \rule{0pt}{height} de anchura cero es una caja invisible que no imprime nada pero reserva esa altura. Sirve para imponer una altura mínima de línea o para dar más aire a las celdas de una tabla. Si pones \rule{0pt}{2.6ex} al comienzo de una línea, esa línea tendrá al menos 2.6 ex de altura. El comando estándar \strut de LaTeX es exactamente \rule[-0.3\baselineskip]{0pt}{\baselineskip}: un strut de anchura cero que cubre todo el interlineado actual por encima y por debajo de la línea base. Es el truco clásico para evitar que el texto quede demasiado pegado a una línea de tabla.
% a centered horizontal rule
\noindent\hfil\rule{0.5\linewidth}{0.4pt}\hfil
% a strut forces a taller line / roomier table cell
\begin{tabular}{|l|}
\hline
\rule{0pt}{2.6ex}Tall, uncramped row \\
\hline
\end{tabular}
% align two differently sized boxes on a common baseline
big \raisebox{-0.4ex}{\Huge A} smallGuardar y reutilizar cajas
Si reutilizas el mismo material varias veces, puedes componerlo una sola vez, guardarlo en una caja y después limitarte a recuperarlo. Primero declara una caja de almacenamiento, o registro, con \newsavebox{\boxname}. Después rellénala con \sbox{\boxname}{text} o \savebox{\boxname}[width][position]{text}; el contenido se compone realmente solo en ese momento. Donde lo necesites, \usebox{\boxname} emite la caja guardada tal cual. Para material costoso, como una tabla larga o una figura compleja usada en varios lugares, esto acelera el procesamiento y garantiza que el aspecto coincida exactamente.
Una caja de almacenamiento es una caja LR, así que para guardar material de varias líneas primero debes envolverlo en una \parbox o una minipage. También existe la forma de entorno \begin{lrbox}{\boxname} … \end{lrbox}, que conviene más para guardar contenido con verbatim. Ten en cuenta que \sbox es robusto mientras que \savebox es frágil, así que usa este último con cuidado dentro de un “argumento móvil”, como el título de una sección.
Para medir una caja, usa \settowidth{\len}{text}, \settoheight{\len}{text} y \settodepth{\len}{text}. Guardan la anchura, la altura o la profundidad del contenido compuesto en el registro de longitud indicado. Son útiles para ajustes precisos, como dibujar un marco o un subrayado exactamente del tamaño de una caja.
\newsavebox{\mylogo}
\sbox{\mylogo}{\fbox{\textbf{Draft}}} % typeset once
% reuse the identical box as many times as you like
Header: \usebox{\mylogo} \dots\ Footer: \usebox{\mylogo}
% measure a box into a length, then rule under it
\newlength{\w}
\settowidth{\w}{Signature}
Signature\par\rule{\w}{0.4pt}La línea \sbox encierra “Draft” en un marco y lo compone una sola vez; las dos llamadas a \usebox recuperan esa misma caja. En la mitad inferior, \settowidth mide la anchura de “Signature” y \rule dibuja un subrayado exactamente de esa anchura.
Comandos de caja de un vistazo
| Comando | Tipo | Función |
|---|---|---|
\mbox | Caja LR | Mantiene el contenido en una línea; sin salto ni partición |
\makebox | Caja LR | Fija anchura y posición; [0pt] sobreimprime con anchura cero |
\framebox | Caja LR | Un \makebox enmarcado (\fbox es la forma sin anchura) |
\parbox | Caja de párrafo | Un solo párrafo ajustado a una anchura fija |
minipage | Caja de párrafo | Una página pequeña para párrafos, listas y notas |
\raisebox | Transformación | Desplaza contenido arriba o abajo; puede simular altura y profundidad |
\rule | Caja rellena | Un rectángulo sólido; anchura cero para un strut |
\usebox | Almacenamiento | Emite una caja guardada con \newsavebox + \sbox |