2010-02-07 16 views
6

¿Cómo animo/hago que Latex comprenda una parte del texto para que aparezca en un par de páginas pares e impares de páginas consecutivas?Hacer que el tipo de texto de Látex se muestre en dos páginas enfrentadas

Con prueba y error, \nopagebreak puede ser persuadido a hacer esto, pero ¿hay una estrategia que Just Works? Algo así como un entorno samepage sería lo ideal, pero que:

  1. forzará un salto de página en las páginas impares, si lo que se necesita para obtener todo el texto en páginas opuestas;
  2. Permite hasta un salto de página en cualquier parte del cuerpo del entorno, y falla ruidosamente si eso no puede garantizarse.

Respuesta

6

Se puede poner juntos un entorno como

 
\newenvironment{twopage}{% 
    \begingroup\setbox0\vbox\bgroup 
}{% 
    \egroup 
    \ifdim\ht0>\textheight 
    \setbox1\vsplit0 to \textheight 
    \cleardoublepage\unvbox1\clearpage 
    \ifdim\ht0>\textheight 
     \PackageWarning{twopage}{Overflow in twopage environment}% 
    \fi 
    \unvbox0\clearpage 
    \else 
    \clearpage\unvbox0\clearpage 
    \fi\endgroup 
} 

Si desea un fracaso ruidoso, cambie \PackageWarning en \PackageError, Los \unvbox ES deberían permitir notas/flotadores para que funcione correctamente - si no es necesario eso, podría considerar cambiarlos todos a \box es (aunque estoy un poco oxidado sobre el comportamiento de \vsplit con respecto a las profundidades y saltos de las cajas, por lo que podría producir un comportamiento extraño, pero garantizaría que solo tomó dos páginas fluyendo algo extra de la parte inferior de la segunda página).

+0

Aceptado: Esto parece ser perfecto. ¿Tengo razón en que el punto de \ unvbox es detener el espacio espurio, porque de lo contrario \ vsplit se aseguraría de que el cuadro 1 fuera exactamente \ textheight alto? –

+0

El '\ unvbox' tiene dos efectos principales, los cuales tienen que ver con hacer que se comporte como si no hubiera un entorno envolvente. La primera es que cualquier whatsits/'\ vadjust's (usado por' \ mark', '\ footnote',' \ marginpar', etc.) no funciona correctamente dentro de los cuadros, ya que ellos quieren ser de "alto nivel" en la página enviada (los recuadros no son recursados). El otro tiene que ver con el espacio. No recuerdo el comportamiento de la mano de obra '\ vsplit', pero creo que hay una diferencia entre' foo \ par \ vbox {bar \ par baz} \ par qux' y ' foo \ par bar \ par baz \ par qux', y me pareció que queríamos lo último. – Steve

3

Hay a distinction between \clearpage and \cleardoublepage. Al utilizar \cleardoublepage justo antes de las cosas que desea en el lado izquierdo y \clearpage antes de las cosas que desea en el lado derecho puede forzar el diseño que está buscando.

Por supuesto, la opción twoside es obligatoria.

+0

Técnicamente, sí, esto responde la pregunta que hice, pero en realidad estoy buscando algo análogo a la misma página: no quiero ningún descanso a menos que sea necesario para mantener el texto en las páginas opuestas. Su sugerencia asegurará que el texto esté en las páginas opuestas, pero está bastante ansioso por hacer saltos de página. –

Cuestiones relacionadas