2010-02-07 1 views
6

Как я рекомендую/заставляю Latex набирать некоторую часть текста, чтобы он отображался на последовательной странице страниц с нечетной страницей с четными страницами?Создание латексного набора заданного текста на двух лицевых страницах

С пробкой и ошибкой \nopagebreak можно уговорить это сделать, но есть ли стратегия, которая работает только? Что-то вроде samepage среды было бы идеально, но один, что:

  1. Заставляет перенос страницы на нечетных страницах, если это необходимо, чтобы получить весь текст на развороте;
  2. Позволяет выполнять разрывы на одной странице в любом месте тела окружающей среды, и шумно возникает, если это невозможно.

ответ

6

Вы можете собрать такую ​​среду, как

 
\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 
} 

Если вы хотите шумную неудачу, изменение \PackageWarning в \PackageError, The \unvbox эсы должны позволять для заметок/поплавков работать должным образом - если вам не нужно что, возможно, вы можете изменить их все на \box es (хотя я немного ржавый по поведению \vsplit относительно глубин ящиков и пропусков, так что это может вызвать забавное поведение, но это гарантирует, что вы взяли только две страницы путем пропускания чего-либо дополнительного со дна второй страницы).

+0

Принято: Это кажется совершенным. Правильно ли, что точка \ unvbox заключается в том, чтобы остановить ложное пространство, потому что иначе \ vsplit будет гарантировать, что поле 1 было точно \ textheight высоким? –

+0

'\ unvbox' имеет два основных эффекта, оба из которых должны делать weith, чтобы он вел себя так, как если бы среда окружения отсутствовала. Во-первых, любые ifsits/'\ vadjust' (используемые '\ mark',' \ footnote', '\ marginpar' и т. Д.) Не работают должным образом внутри ящиков, так как они хотят быть« топ-уровнями », на отгруженной странице (поля не повторяются). Другое дело в пространстве - я не вспоминаю поведение '\ vsplit', но я считаю, что существует разница между' foo \ par \ vbox {bar \ par baz} \ par qux' и ' foo \ par bar \ par baz \ par qux', и мне показалось, что мы хотели последнего. – Steve

3

a distinction between \clearpage and \cleardoublepage. Используя \cleardoublepage перед тем, как вы хотите с левой стороны, и \clearpage, прежде чем материал, который вы хотите с правой стороны, вы можете заставить макет, который вы ищете.

Конечно, опция twoside обязательна.

+0

Технически, да, это отвечает на вопрос, который я задал, но на самом деле я нахожусь после чего-то похожего на ту же страницу: я не хочу никаких перерывов, если они не нужны, чтобы сохранить текст на лицевых страницах. Ваше предложение гарантирует, что текст находится на лицевых страницах, но он очень хочет сделать разрывы страниц. –

Смежные вопросы