Ajustar saltos de página

Entre los comandos de salto de página de LaTeX, \newpage y \pagebreak se diferencian dentro de latex.ltx por exactamente un \vfil. \newpage es \vfil \penalty -10000; \pagebreak es esa misma \penalty -10000 sin el \vfil. Ese único espacio de estiramiento infinito es toda la diferencia entre tirar el resto de la página como blanco o estirar el texto hasta el margen inferior. \clearpage va un paso más allá y coloca \penalty -10001, un valor una unidad mayor que el infinito de TeX, y ese es el truco que obliga a salir a los flotantes pendientes. Esta página cubre \pagebreak[n], \newpage, \clearpage, \cleardoublepage, \nopagebreak[n], \samepage, needspace y \enlargethispage, con los resultados de compilarlos de verdad.

Aclaremos la capa. Esta página se ocupa de los comandos que intervienen en un salto de página en un punto concreto. El ritmo del documento entero —\widowpenalty y \clubpenalty (ambos con valor por defecto 150 en las clases estándar), la elección entre \raggedbottom y \flushbottom, cuánta página pueden ocupar los flotantes y el diagnóstico de por qué una página terminó donde terminó— se trata a fondo en la página sobre el diseño de los saltos de página. Su regla central vale también aquí: ajuste los saltos de página al final. Añada un solo carácter y todos los cortes posteriores se desplazan, así que sembrar \newpage antes de fijar el texto deja huecos extraños tras cada revisión. Considere lo que sigue herramienta de la última fase.

\pagebreak frente a \newpage: estirar el resto o tirarlo

Ambos terminan la página en ese punto, pero tratan el espacio vertical sobrante de manera opuesta. \newpage coloca un \vfil antes de cortar, y ese espacio de estiramiento infinito absorbe todo lo que quede, de modo que el pie de la página se deja en blanco. \pagebreak no pone ningún \vfil, así que se estira el espacio elástico ya presente en la página —la interlínea y demás— y el texto se extiende hasta el margen inferior. El criterio: \newpage cuando quiere decir «aquí se acaba», como al final de un capítulo; \pagebreak cuando prefiere abrir ligeramente la interlínea a dejar la página corta. Un efecto secundario: \pagebreak puede cortar en mitad de un párrafo.

La n de \pagebreak[n] emplea exactamente la misma maquinaria que \linebreak[n] en el lado de las líneas: pasa por \@getpen en latex.ltx y, con los valores de article.cls, se traduce en 0, 51, 151, 301 y 10000. \pagebreak los inserta en negativo y \nopagebreak en positivo; si se omite el argumento, ambos toman 4, es decir ∓10000. Basta recordar que [0] es permiso para cortar aquí y que solo [4] es una orden. Además, en un documento bajo \flushbottom —un article con twoside, o book por defecto— \pagebreak puede dejar la página sin poder llenarse e informar Underfull \vbox (badness 10000) has occurred while \output is active. Medido: esa línea apareció en el registro en cuanto se colocó un \pagebreak a mitad de párrafo en un article con twoside. Bajo \raggedbottom el aviso nunca salta, porque se permite una página corta.

\clearpage frente a \newpage: por qué una figura queda varada en la sección siguiente

\clearpage saca todos los flotantes pendientes (figure y table) antes de cortar; \newpage no. Cuánto cambia eso lo enseña una medición. Tome un documento con texto, Figura A, Figura B y luego un \section*, y compílelo de tres maneras. Sin insertar nada, la página 1 lleva el título de sección y la Figura A, y la página 2 la Figura B. Inserte \newpage y el documento sigue teniendo dos páginas, pero el título y la Figura B comparten ahora la página 2: la sección que debía ir después de las figuras se ha adelantado a la Figura B. Inserte \clearpage y pasa a tres páginas: Figura A en la 1, Figura B en la 2 y solo entonces el título en la 3. Cuando el orden de las figuras significa algo, el límite entre secciones pide \clearpage.

latex
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure A}\end{figure}
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure B}\end{figure}

% \newpage   -> heading and Figure B end up together on page 2
% \clearpage -> Figure A p.1, Figure B p.2, heading p.3
\clearpage
\section*{This section must come after its figures}

El truco está en la propia definición. \clearpage llama a \newpage y coloca después \write\m@ne{}, una \vbox{} vacía y \penalty -\@Mi. \@Mi vale 10001 —una unidad más que el infinito de TeX—, lo que hace que la rutina de salida se ejecute otra vez y vacía la cola de flotantes aplazados. Una advertencia: en modo de dos columnas \newpage solo termina la columna. Medido: en un article con twocolumn, el texto posterior a un \newpage cayó en la columna derecha de la misma página y la página no cambió; el \clearpage del mismo documento fue lo primero que pasó a la página siguiente. Si quiere página nueva a dos columnas, use \clearpage o \cleardoublepage.

\cleardoublepage: abrir siempre un capítulo en página derecha

\cleardoublepage ejecuta \clearpage y luego, solo bajo twoside, inserta una página en blanco para que el texto siguiente empiece en página impar (derecha). La definición es tan corta que se lee de un vistazo: tras \clearpage, si twoside está en vigor y el número de página es par, haz \hbox{}\newpage. Ese \hbox{} sirve para que la página no parezca vacía; sin él, la página en blanco se descartaría en lugar de imprimirse. En dos columnas el paso se repite dos veces. Este es el mecanismo de los libros encuadernados cuyos capítulos abren siempre en recto, y \chapter de la clase book lo llama por defecto. En impresión a una cara la condición nunca se cumple, así que se comporta igual que \clearpage.

Prohibir aquí el salto de página: \nopagebreak funciona, \samepage no

\samepage no puede mantener juntos párrafos consecutivos. La medición es implacable, así que va primero. En un documento con seis párrafos de una línea cerca del pie de página, la versión sin retoques deja BLOCK1–4 en la página 1 y BLOCK5–6 en la 2. Envuelva esos seis párrafos en \begin{samepage}\end{samepage}, o agrúpelos como {\samepage …}, y el corte es exactamente el mismo. La definición lo explica: \samepage es una declaración que fija nueve parámetros —\interlinepenalty, \predisplaypenalty, \postdisplaypenalty, \interdisplaylinepenalty, \@beginparpenalty, \@endparpenalty, \@itempenalty, \@secpenalty e \interfootnotelinepenalty— en \@M (10000), y ninguno de esos nueve gobierna la junta entre un párrafo y el siguiente. Protege el interior de un párrafo, los huecos entre elementos de lista y el entorno de una fórmula centrada; un cambio de párrafo normal pasa de largo.

Para proteger una junta concreta, \nopagebreak[n] es la respuesta. En el mismo experimento, colocar un \nopagebreak en la frontera BLOCK4/BLOCK5 desplazó el corte a entre 3 y 4, y BLOCK4 se marchó a la página siguiente con BLOCK5 y 6. Ponerlo justo antes o justo después del párrafo dio igual. \nopagebreak se limita a colocar una penalización en ese punto —vía \vadjust en modo horizontal, directamente en modo vertical—, lo que lo convierte en la herramienta más fiable cuando se sabe exactamente qué costura no debe romperse: entre un título y el texto que le sigue, o entre una figura y su explicación. Para la petición distinta de «mantener juntas estas N líneas», encaja mejor el needspace de abajo.

latex
% Measured: six one-line paragraphs at the foot of a page split 4 | 5.
% \samepage around all six changes nothing.
% \nopagebreak at the seam moves the split to 3 | 4.
BLOCK4\par\nopagebreak
BLOCK5\par

% Reserve room instead of forbidding a break:
\usepackage{needspace}
\needspace{6\baselineskip}

% Or make just this one page one line taller:
\enlargethispage{\baselineskip}

El paquete needspace: «página nueva salvo que aún quepan seis líneas»

\needspace{6\baselineskip} es un condicional: «si de aquí al pie de página no queda altura para seis líneas, corta ahora». Añada \usepackage{needspace} al experimento en que \samepage fracasó y ponga \needspace{6\baselineskip} antes de los seis párrafos: BLOCK1 a 6 se trasladaron enteros a la página 2. Como reserva espacio en lugar de prohibir el corte, nunca falla en silencio como \samepage. Escribir la longitud como múltiplo de \baselineskip es lo más intuitivo, aunque pt o cm también valen. Existen además \Needspace{...}, que reserva el espacio con más exactitud, y \Needspace*{...}, que bajo \flushbottom deja el pie de una página corta alineado; ambos se usan entre párrafos. Es la manera más directa de evitar que un título quede solo al final de la página.

\enlargethispage: hacer esta página una línea más alta

\enlargethispage{\baselineskip} agranda temporalmente el \textheight solo de la página actual, para que quepa una línea más. El efecto se puede contar. En un article alimentado con 120 párrafos de una línea, la última línea de la página 1 era LINE46 sin tocar nada. Añada \enlargethispage{\baselineskip} y pasa a LINE47; {2\baselineskip} da LINE48; una longitud negativa {-\baselineskip} la encoge hasta LINE45. Exactamente lo pedido. La implementación es de una sinceridad refrescante: latex.ltx engaña a la altura objetivo de la página metiendo un \vskip negativo en una inserción llamada \@kludgeins —el propio LaTeX bautiza el mecanismo como un kludge, un apaño, lo que dice bastante del carácter del comando—. Cuando haya que meter una línea aunque sea apretando el espaciado, use la forma con asterisco \enlargethispage*{\baselineskip}.

La ocasión habitual de este comando es recoger una línea varada. Cuando la última línea de un párrafo queda sola en lo alto de la página siguiente —una viuda—, hacer esa página una línea más alta con \enlargethispage{\baselineskip} la trae de vuelta y la viuda desaparece. También puede prohibirlas en todo el documento subiendo \widowpenalty a 10000, pero el precio —pies de página que dejan de alinearse y un Underfull \vbox bajo \flushbottom— se compara con mediciones en la página sobre el diseño de los saltos de página. La regla de la última pasada es: resuelva la mayoría con un ajuste global y trate luego uno a uno los pocos supervivientes con \enlargethispage. Deje siempre un comentario junto a una línea añadida a mano. Tras revisar el texto, solo ese comentario le dirá si el arreglo se ha vuelto dañino.

ComandoQué haceCuidado
\pagebreak[n]Inserta la penalización −(0/51/151/301/10000); sin \vfil, el texto se estira hasta el piePuede cortar a mitad de párrafo; bajo \flushbottom puede dar Underfull \vbox
\newpage\vfil \penalty -10000; deja en blanco el resto de la páginaA dos columnas solo termina la columna; no descarga los flotantes
\clearpage\newpage más \penalty -10001; saca todos los flotantes pendientes antes de cortarVa en el límite entre secciones; en mitad del texto deja un hueco grande
\cleardoublepage\clearpage y, bajo twoside, reanuda en página impar (derecha), insertando una en blanco si hace faltaIdéntico a \clearpage con oneside; a dos columnas el paso se ejecuta dos veces
\nopagebreak[n]Inserta la penalización +(0/51/151/301/10000) en ese puntoLo más fiable cuando hay una costura concreta: un título y su texto
\samepageDeclaración que pone nueve penalizaciones a 10000 (también usable como entorno)No actúa entre párrafos. Medido: no impidió el corte BLOCK4/5
\needspace{N\baselineskip}Corta ya si no quedan N líneas de espacio (paquete needspace)Reserva en vez de prohibir: ideal para mantener un título con sus primeras líneas
\enlargethispage{\baselineskip}Agranda temporalmente solo el \textheight de esta página; medido, LINE46 pasó a LINE47Una longitud negativa la encoge; la forma con asterisco encaja una línea a presión

La pasada de paginación: qué revisar y en qué orden

Empiece la pasada de paginación solo cuando el cuerpo, los flotantes y la bibliografía estén todos en su sitio. Hay un orden. Primero, mire si los flotantes se están acumulando y descárguelos con \clearpage donde haga falta. Después proteja con needspace cualquier título que fuera a quedar varado al pie de página. Por último, trate una a una las líneas varadas más visibles con \enlargethispage. Siembre \newpage solo donde la estructura de los capítulos realmente lo exija. Deje un comentario con el motivo allí donde intervino: dentro de seis meses no recordará por qué está ahí ese \enlargethispage.

  • Use \clearpage o \cleardoublepage en los límites de capítulo y apéndice. Evita que las figuras se cuelen en la parte siguiente; a dos columnas \newpage no basta.
  • Reserve unos \needspace{3\baselineskip} antes de un título. Reserve espacio en lugar de prohibir el corte, y no cuente con \samepage.
  • Si lo que importa es una costura concreta, \nopagebreak. Una figura y su explicación; un título y su primer párrafo.
  • Para una sola línea varada, \enlargethispage{\baselineskip}. Mire tanto la cantidad de blanco como la alineación de los pies antes de aplicarlo.
  • Comente todo salto de página puesto a mano. Esa línea será lo único que le diga si hay que quitarlo tras cambiar el texto.