Управление разрывами страниц

Как вы могли убедиться, TeX предоставляет широкие возможности для управления видом абзаца, местами разрывов строк и т.п. С разрывами страниц все обстоит не столь хорошо. Дело в том, что при верстке абзаца TeX сначала читает его целиком, а затем перебирает различные способы разбиения на строки и выбирает из них оптимальный. При разбиении на страницы такой подход невозможен: если читать сразу весь текст, а затем перебирать различные варианты разбиения его на страницы, то компьютеру не хватит памяти. Поэтому разбиение на страницы в TeX'е — процесс " одноразовый". Обработав очередной абзац, TeX проверяет, набралось ли уже достаточно строк, чтоб заполнить страницу. Если оказывается, что достаточно, он производит разрыв страницы, и при этом выбор обычно невелик (часто бывает возможно сместить место разрыва страницы на строчку - другую за счет того, что некоторые интервалы между строками можно слегка растягивать или сжимать; таковы обычно интервалы между абзацами, между текстом и выключными формулами, но не между строками внутри абзаца). Имея все это в виду, рассмотрим, какие команды предоставляет LaTeX для управления разрывами страниц.

Запрет разрыва страницы. Чтобы запретить разрыв страницы, используется команда \nopagebreak. Если поставить ее после конца абзаца, то разрыв страницы после этого абзаца будет запрещен. Если после конца абзаца присутствуют совместно как команда \nopagebreak, так и команда для дополнительных вертикальных промежутков, то команда \nopagebreak должна идти первой, в противном случае она не подействует.

Команда \nopagebreak может принимать необязательный аргумент — целое число от 0 до 4. Будучи снабжена этим аргументом, она не запрещает разрыв страницы в указанном месте, но делает его менее выгодным с точки зрения TeX'а (тем менее выгодным, чем больше аргумент). Команда \nopagebreak[4] означает полный запрет разрыва, как если бы команда была дана вообще без аргумента. Если аргумент равен 0, это означает только, что в данном месте страницу в принципе можно разорвать.

Принудительный разрыв страницы. Для принудительного разрыва страниц в LaTeX'е существует несколько способов. Первый и самый простой — команда \newpage. Под действием этой команды текущая страница завершается и дополняется снизу пустым пространством, если высота страницы получается меньше, чем надо.

Команда \clearpage также предназначена для принудительного разрыва страницы. Если пользоваться только теми средствами LaTeX'а, которые были описаны до этого момента в нашей книге, то она будет работать в точности так же, как \newpage. В том же случае, если к моменту подачи этой команды остались так называемые "плавающие" иллюстрации или таблицы , то перед выдачей новой страницы они будут, скорее всего, напечатаны.

Команда \cleardoublepage делает то же, что и \clearpage, но при этом в некоторых классах документов (в тех, которые предусматривают разное оформление страниц с четными и нечетными номерами — см. разд."Классы, пакеты и классовые опции" лекции 4 по поводу классовой опции twoside) новая страница обязательно имеет нечетный номер (если необходимо, при этом создается дополнительная пустая страница).

Если поставить подряд две команды \newpage (или \clearpage), то в печатном тексте чистая страница не получится. Чтобы создать чистую страницу, надо LaTeX немного обмануть: между двумя командами для разрыва страницы дать команду \mbox{}.

Наконец, существует команда \pagebreak, формально аналогичная команде \linebreak. Если дать ее без аргументов, то страница в этом месте будет разорвана; при этом не исключено, что будет сделана попытка выровнять ее по высоте с остальными страницами за счет растяжения тех вертикальных интервалов, которые можно растянуть — как правило, это интервалы между абзацами. (Команда \newpage такой попытки не делает.) Если дать команду \pagebreak с необязательным аргументом (целым числом от 0 до 4), то этот аргумент будет выражать степень желательности разрыва страницы в данном месте: если 0, то это всего лишь разрешение разорвать страницу, если 4, то разрыв обязателен, в остальных случаях степень желательности растет с ростом аргумента от 1 до 3.

Каждую из названных команд можно дать не только между абзацами, но и внутри абзаца; при этом разрыв страницы произойдет (или будет запрещен) после той строки, в которую попадает текст, соседствующий с этой командой.

Изменение высоты отдельной страницы. Иногда при окончательной отделке текста бывает необходимо немного увеличить или уменьшить размер отдельно взятой страницы (чтобы, например, втиснуть в нее еще одну строку, которая иначе окажется в одиночестве на следующей полосе). Для этого есть следующее средство: на той странице, размер которой надо увеличить на одну строку, поместить между абзацами команду

\enlargethispage{\baselineskip}

Если надо увеличить размер на две строки, а не на одну, напишите в фигурных скобках 2\baselineskip вместо \baselineskip; можно также в аргументе команды \enlargethispage написать \baselineskip, -2\baselineskip, и т. п. В этом случае высота полосы уменьшится на одну, две и т.д. строки.

Добавим несколько TeX'нических подробностей. Во-первых, если текст набирается в две колонки, то команда \enlargethispage действует только на одну из них — на ту, в которую она попала. Во-вторых, при действии команды \enlargethispage увеличенная полоса может наложиться на строку с колонцифрой, если таковая предусмотрена стилем оформления документа. И наконец, в аргументе команды \enlargethispage может стоять не только кратное \baselineskip, но и любая длина, выраженная в TeX'овских единицах (скажем, 5mm).

Подробности о параметре \baselineskip и колонцифре — в следующей лекции. О двухколонном наборе будет рассказано в разд. "Набор в две колонки".

Висячие строки. Вообще говоря, не следует допускать, чтобы на страницу попадала только первая или только последняя строка абзаца. В TeX'е предусмотрены два параметра, влияющие на вероятность появления разрывов страницы в этих местах. Именно, параметр \clubpenalty определяет нежелательность разрыва страницы после первой строки абзаца, а \widowpenalty — перед последней. Чем выше значение этих параметров, тем с меньшей охотой TeX будет допускать такие разрывы (если, конечно, есть возможность выбора); значение 10000 означает, что разрыв полностью запрещен. По умолчанию и \clubpenalty, и \widowpenalty равны 150.

3. Лекция: Набор текста Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | вопросы | » | для печати и PDA Если Вы заметили ошибку - сообщите нам, или выделите ее и нажмите Ctrl+Enter Вертикальные промежутки Большинство вертикальных промежутков (например, между заголовком раздела и его текстом) LaTeX устанавливает самостоятельно, и вам об этом можно не заботиться. Иногда возникает необходимость сделать дополнительный вертикальный промежуток между абзацами. Как вы помните, как внутри абзацев для задания промежутков вручную разумнее пользоваться не командами, явно задающими размер промежутка, а командами вроде \, или \quad; аналогичным образом, для задания промежутков между абзацами рекомендуются такие команды:
  • \smallskip задает такой,
промежуток;
  • \medskip задает такой,
промежуток. Проще всего поставить эти команды непосредственно после пустой строки или команды \par, завершающей абзац:
После этого абзаца мы оставим дополнительный пробел. \par\smallskip А теперь начнем новый абзац.

Конкретная величина промежутков, задаваемых этими командами, зависит от класса документа. Эти размеры совпадают со значениями параметров \smallskipamount\ldots\bigskipamount, о которых шла речь на с. .

Если вы хотите задать размер вертикального промежутка в явном виде, можно воспользоваться командой \vspace. Подобно команде \hspace, у нее есть один обязательный аргумент — величина промежутка. Например, можно написать

\vspace{2ex}

Команду \vspace удобнее всего ставить после конца абзаца (подобно таким командам, как \smallskip).

Можно поставить команду \vspace (или \smallskip и т.п.) не после пустой строки или \par, а непосредственно перед ними, после всего текста абзаца. Если поставить какую-либо из этих команд внутри абзаца, то дополнительный вертикальный пробел получится не между абзацами, а между строками абзаца.

Если дать команду \vspace сразу же после \newpage или \clearpage, то вертикального отступа в начале новой страницы не получится; вертикальный отступ, создаваемый \vspace, пропадет и в том случае, если он оказывается в начале новой страницы, получившейся "естественным образом". Чтобы вертикальный отступ в начале страницы не пропадал, надо воспользоваться вариантом со звездочкой после имени команды: если написать \vspace*{1cm}, то будет создан вертикальный промежуток в 1cm, не пропадающий даже в том случае, если команда дана сразу после \newpage или \clearpage или в этом месте произошел разрыв страницы.

Можно заставить команду \vspace создать промежуток не фиксированной, а переменной длины. Именно, в самом общем виде эта команда записывается так:

\vspace{x plus y minus z}

Здесь , и - длины, выраженные в TeX'овских единицах, а plus и minus — так называемые "ключевые слова" TeX'а (в отличие от команд, перед ними не надо ставить backslash). При этом обозначает "естественную" величину отступа: если при верстке страницы вертикальные интервалы не приходится растягивать или сжимать (например, в случае, когда, мы разрешили TeX'у оставлять внизу страницы пустое место; в дальнейшем мы обсудим, как это делать), то будет сделан пробел размером ровно . При необходимости, однако (например, ради того, чтобы все страницы имели одинаковую высоту), этот интервал можно будет и изменить: указывает степень растяжимости, а — степень сжимаемости интервала. Говоря TeXническим языком, команда \vspace вставляет в страницу "клей"1); расстояния, указанные после plus и minus, называются соответственно plus- и minus-компонентами этого клея. Если plus- или minus-компонента в аргументе команды \vspace не указана, то соответствующий интервал не сможет растягиваться (сжиматься). Большинство вертикальных интервалов, автоматически вставляемых LaTeX'ом, обладают растяжимостью и/или сжимаемостью, что помогает при нахождении оптимальных разрывов страниц.

Один частный случай растяжимых промежутков настолько важен, что в LaTeX'е для него предусмотрена специальная команда. Именно, в аргументе \vspace или \vspace* можно вместо длины, заданной в TeX'овских единицах, написать \fill. Это задает промежуток нулевого размера, но обладающий способностью бесконечно растягиваться. Если, например, написать

\clearpage\vspace*{\fill}

\begin{center}

Заголовок

\end{center}

\vspace*{\fill}\clearpage

то слово "заголовок" будет расположено точно по центру отдельной страницы, созданной командами \clearpage.

Перед командой \fill в аргументе \vspace или \vspace* можно поставить коэффициент — целое число или десятичную дробь, и тогда растяжимость умножится на этот коэффициент. Например, если написать

\clearpage\vspace*{0.5\fill}

\begin{center}

Заголовок

\end{center}

\vspace*{\fill}\clearpage

то перед словом "заголовок" будет оставлено ровно в два раза меньше места, чем после него, так как 0.5\fill растяжим в два раза меньше, чем \fill.

Теперь можно признаться, что горизонтальные промежутки, создаваемые командой \hspace, также могут быть растяжимыми; чтобы этого добиться, надо задать в аргументе команды \hspace не только " естественную длину", но еще и plus- и/или minus-компоненту. Например, если сказать

\hspace{1cm plus 2mm minus 1em}

то при верстке абзаца соответствующий интервал сможет растягиваться или сжиматься. Можно также, вместо длин с plus- или minus-компонентами, написать \fill (возможно, с коэффициентом). В простых приложениях такие конструкции, как правило, не встречаются. Мы еще будем говорить о них в лекции 8.