Comandos de tamaño de fuente

En un documento de 12 pt, el \Huge y el \huge de LaTeX son el mismo comando. No de tamaño parecido: la línea 86 de size12.clo dice \let\Huge=\huge, lo que los convierte literalmente en una sola cosa. Ocurre porque los diez comandos de tamaño, de \tiny a \Huge, denotan escalones relativos al texto corrido y no tamaños absolutos: el mismo \large da 12 pt en un documento de 10 pt y 14,4 pt en uno de 12 pt. Y la escalera de escalones no es un invento de LaTeX: los números son exactamente los valores de \magstep que Knuth escribió en plain TeX. Esta página ofrece una tabla medida de lo que dan los diez comandos a 10 pt, 11 pt y 12 pt, la famosa trampa en la que {\Large ...} cambia las letras pero no el interlineado, y qué está pasando de verdad cuando \fontsize no hace nada sin decir nada.

De \tiny a \Huge: las diez declaraciones

Los comandos de tamaño no toman argumento. No son comandos como \textbf{...} sino declaraciones que conmutan todo a partir de ese punto, así que el alcance lo delimita usted con un grupo o un entorno. De menor a mayor son diez: \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge, \Huge. Lo único que separa los escalones es la caja de la inicial y el LARGE todo en mayúsculas, así que vigile la ortografía más que el aspecto. Escribir \Large{texto} no pasa ningún argumento: declara \Large y luego deja un grupo con {texto}, y salir de ese grupo no restaura el tamaño. Para limitar el alcance escriba {\Large texto}: la declaración va dentro de las llaves. \normalsize es el tamaño del cuerpo y coincide con la opción de tamaño de su \documentclass (10 pt por defecto).

latex
% right: the declaration is inside the braces
Ordinary text. {\Large only this part is large.} Ordinary again.

% wrong: nothing is passed as an argument, and the size never comes back
Ordinary text. \Large{this is large} and so is everything after it.

Los tamaños reales dependen del tamaño base (10 pt, 11 pt, 12 pt)

El mismo comando produce un tamaño distinto según se haya pasado 10pt, 11pt o 12pt a \documentclass. \large vale 12 pt tanto en una clase de 10 pt como en una de 11 pt, pero 14,4 pt en una de 12 pt. La tabla siguiente recoge lo que los diez comandos produjeron realmente en las clases estándar (article, report, book) al escribir \f@size y \baselineskip durante una compilación. Cada celda se lee tamaño de fuente / interlineado, siendo el interlineado la distancia entre las líneas de base de dos renglones consecutivos. Se incluye porque así la tabla muestra de un vistazo que un comando de tamaño mueve el interlineado junto con las letras.

Comandoclase de 10 ptclase de 11 ptclase de 12 pt
\tiny5 pt / 6 pt6 pt / 7 pt6 pt / 7 pt
\scriptsize7 pt / 8 pt8 pt / 9,5 pt8 pt / 9,5 pt
\footnotesize8 pt / 9,5 pt9 pt / 11 pt10 pt / 12 pt
\small9 pt / 11 pt10 pt / 12 pt10,95 pt / 13,6 pt
\normalsize10 pt / 12 pt10,95 pt / 13,6 pt12 pt / 14,5 pt
\large12 pt / 14 pt12 pt / 14 pt14,4 pt / 18 pt
\Large14,4 pt / 18 pt14,4 pt / 18 pt17,28 pt / 22 pt
\LARGE17,28 pt / 22 pt17,28 pt / 22 pt20,74 pt / 25 pt
\huge20,74 pt / 25 pt20,74 pt / 25 pt24,88 pt / 30 pt
\Huge24,88 pt / 30 pt24,88 pt / 30 pt24,88 pt / 30 pt (idéntico a \huge)

Recorriendo la escalera —12, 14,4, 17,28, 20,74, 24,88— cada escalón es unas 1,2 veces el anterior. No es casualidad. La línea 391 de plain TeX dice \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}: los factores de ampliación que definió Knuth son 1200, 1440, 1728, 2074 y 2488, es decir, las potencias primera a quinta de 1,2 expresadas en milésimas. LaTeX toma esos mismos números para sus cinco escalones mayores. El extraño 10,95 pt tiene el mismo origen, en la línea justo anterior: \def\magstephalf{1095 }, la raíz cuadrada de 1,2, unos 1,0954, redondeada. Siga hasta los nombres de macro a partir de la línea 8915 de latex.ltx y encontrará \@xivpt, llamado «catorce puntos», definido como 14.4, y \@xxvpt, llamado «veinticinco puntos», definido como 24.88. Los nombres son una abreviatura para humanos; los valores son la escalera de las ampliaciones.

La escalera se detiene en 24,88 pt porque ese es el mayor tamaño de diseño que trae Computer Modern. Los tamaños que enumera el fichero de definición ot1cmr.fd son <5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>: doce peldaños, exactamente la escalera que suben los comandos de tamaño. Por eso, en una clase de 12 pt \huge ya toca el techo de 24,88 pt, y la línea 86 de size12.clo escribe sin más \let\Huge=\huge, convirtiendo ambos en un solo comando. En una clase de 11 pt son distintos: \huge da 20,74 pt y \Huge, 24,88 pt. Si se topa con el síntoma «pasar a \Huge no cambia nada», compruebe antes si la opción de clase es 12pt. Todo lo anterior vale para las clases estándar; las clases japonesas como jsarticle, y también extsizes o KOMA-Script, usan sus propios escalones y techos, así que no traslade esta tabla a ellas.

{\Large ...} agrandó las letras pero no el interlineado

Porque el final de párrafo —la línea en blanco o el \par— queda fuera de la llave de cierre. Muévalo dentro del grupo. TeX fija el interlineado no cuando compone las letras, sino cuando parte el párrafo en líneas. Si el final del párrafo cae fuera del grupo, para ese momento \baselineskip ya ha vuelto al valor del cuerpo, así que un cuerpo grande se compone con el interlineado del texto normal. Medido en un párrafo \Large de dos líneas (14,4 pt) en una clase de 10 pt: con \par fuera del grupo el interlineado fue de 12 pt; dentro, de 18 pt. Seis puntos menos por línea.

latex
% right -- \par is inside the group, so the leading is 18pt
{\Large
A long paragraph that will wrap onto a second line and keep its leading.
\par}

% wrong -- the paragraph ends after the group, so the leading falls back to 12pt
{\Large A long paragraph that will wrap onto a second line and lose its leading.}

The next paragraph.

Esos 6 pt se manifiestan en la página como líneas que chocan. Un glifo \Large llega a 9,99998 pt por encima de la línea de base y a 2,79999 pt por debajo, valores tomados con \sbox. Sumados dan 12,79997 pt, que rebasan en 0,8 pt el interlineado erróneo de 12 pt. Así que en cuanto una línea lleve un rasgo descendente (g, y, p) y la siguiente uno ascendente (h, k, l), ambos se solaparán con seguridad sobre el papel. Con pocas líneas es fácil no verlo, y suele aflorar cuando alguien imprime el PDF de la entrega.

Dos apostillas. Primera: añadir \selectfont no arregla nada: {\Large\selectfont ...} seguía midiendo 12 pt. El problema no es la selección de fuente sino el valor de \baselineskip en el momento en que se cierra el párrafo, así que la única cura es corregir la posición del \par. Segunda: el síntoma aparece con \centering pero no con el entorno center. Escribir {\centering \Large ... } con la línea en blanco fuera da 12 pt, mientras que \begin{center} \Large ... \end{center} midió unos correctos 18 pt, porque \end{center} termina el párrafo antes de cerrar el grupo. Si un título grande centrado tiene un interlineado raro, sospeche de un grupo desnudo alrededor de \centering.

Un tamaño cualquiera: \fontsize y \selectfont

Si ninguno de los diez escalones es el tamaño que quiere, \fontsize{tamaño}{interlineado}\selectfont permite nombrar directamente un cuerpo en puntos. El primer argumento es el tamaño de fuente; el segundo, el interlineado. El título de un cartel, o una única línea apretada dentro de una tabla, son motivos razonables para salirse de la escalera. Lo esencial aquí es que \fontsize solo anota los valores: no selecciona nada. Medido, la x de \fontsize{20}{24}x medía 5,2778 pt de ancho, exactamente el ancho de una x a \normalsize. Añádale \selectfont y pasa a 10,05351 pt: solo entonces aparece el cuerpo de 20 pt. Y olvidar \selectfont no produce ni error ni advertencia. La mayoría de los «fijé el tamaño y no cambió nada» son esto.

latex
% \fontsize alone changes nothing and says nothing
{\fontsize{20}{24}Still 10pt.}

% \selectfont is what commits the change
{\fontsize{20}{24}\selectfont 20pt type on 24pt leading.}

El segundo argumento no es opcional, así que elíjalo con la convención habitual de unas 1,2 veces el tamaño de fuente: alrededor de 24 pt para un cuerpo de 20. La tabla de arriba muestra que las clases estándar se mantienen a grandes rasgos en ese rango: 10 pt sobre 12 pt, 14,4 pt sobre 18 pt. Mientras que declaraciones como \tiny ajustan el interlineado por usted, \fontsize se lo deja a usted, y esa es la diferencia práctica que más importa. Si lo fija demasiado pequeño, las líneas chocan exactamente por la razón descrita en la sección anterior. Ensanchar el interlineado de todo un documento —pasar a espacio y medio, por ejemplo— no es tarea de los comandos de tamaño; consulte la página dedicada al interlineado.

Los comandos de tamaño no funcionan dentro de las matemáticas

Escriba un comando de tamaño dentro del modo matemático y LaTeX lo ignora, dejando una línea en el registro. Componer $ \large x $ produce LaTeX Font Warning: Command \large invalid in math mode on input line 9. Es una advertencia, no un error: la compilación continúa y la x sale al tamaño normal. Los tamaños dentro de una fórmula pertenecen a otro sistema —el tamaño del texto circundante combinado con el estilo matemático (\displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle)— que no se mezcla con los comandos de tamaño del cuerpo. Si solo quiere una fracción o un sumatorio en grande, use \displaystyle. Para agrandar la fórmula entera, declare el tamaño fuera de las matemáticas: {\Large $ ... $} funciona.

log
LaTeX Font Warning: Command \large invalid in math mode on input line 9.

El orden en que decidir los tamaños

El tamaño de fuente se sostiene cuando se decide de arriba abajo, no parcheándolo localmente mientras se escribe. Elija primero el tamaño base de todo el documento, como en \documentclass[11pt]{...}. Después, para todo lo que se repite —títulos, pies de figura, notas al pie, notas de tabla—, fije el tamaño en la configuración de la clase o del paquete y no a mano en cada aparición. Solo lo que quede, los casos realmente únicos como el título de un cartel o una nota dentro de una tabla, recibe un {\small ...} local. Siga ese orden y cambiar más tarde el tamaño base de 11 pt a 12 pt arrastrará todo el documento en proporción. Salpique en cambio el cuerpo de declaraciones locales y esos serán justo los puntos que se queden atrás en cuanto cambie la base. Para carteles y diapositivas, cuyo cuerpo de texto ya es distinto, no lo fuerce con comandos locales: elija una clase hecha para ese género.

  • Fije el tamaño base como opción de clase. Envolver todo el cuerpo en {\small ...} suele romper la relación con notas al pie, títulos e interlineado, y no responde en absoluto a una norma de entrega que diga «texto del cuerpo, 11 pt».
  • No agrande los títulos de sección en el cuerpo. Cambie el aspecto de \section mediante la configuración de la clase o un paquete como titlesec. Un título fingido con \Large en el cuerpo no aparece ni en el índice ni en ninguna referencia cruzada.
  • Cambie los elementos recurrentes en su definición. Si todas las notas de tabla deben ser más pequeñas, defina una macro o un entorno de nota en lugar de hacerlo a mano en el texto.
  • Cierre el dimensionado local en los límites de párrafo. Para un párrafo largo en cuerpo pequeño, mantenga \par dentro del grupo para que el interlineado se fije en el mismo tamaño.
  • Sospeche de la estructura antes de encoger una tabla. Antes de forzar una tabla entera a \scriptsize, valore quitar columnas, girarla o partirla en dos.
  • Compruebe el PDF en su tamaño de página final. Lo que se lee en pantalla puede ser demasiado pequeño en un PDF de revisión impreso en A4. Mírelo a tamaño real, sin ampliar.