Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4014 / 1341 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Лекция 3:

Набор текста

Между абзацами

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

Понятие о режимах TeX'а

Несколько упрощая ситуацию, можно сказать, что в процессе обработки исходного текста TeX в каждый момент находится в одном из трех режимов: горизонтальном, вертикальном или математическом.

  • В процессе обработки текста (от появления первой же буквы до команды "закончить абзац", например, пустой строки) TeX находится в горизонтальном режиме.
  • Между абзацами, а также в начале работы (например, в процессе обработки преамбулы к LaTeX'овскому файлу) TeX находится в вертикальном режиме.
  • При обработке математических формул TeX находится в математическом режиме.

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

В качестве команды "закончить абзац" можно использовать, наряду с известной вам пустой строкой, команду \par:

\parindent.6em

Это~--- абзац, который
мы не намерены завершать
пустой строкой, как
раньше.\par А это
другой
абзац
.
Это — абзац, который
мы не намерены завершать
пустой строкой, как
раньше.\par А это
другой
абзац.

Иногда для ясности, когда в исходном файле присутствует сложная комбинация из TeX'овских команд, имеет смысл обозначить конец абзаца именно таким способом.

Идущие подряд несколько команд \par, команда \par, за или перед которой следует пустая строка, и т.п. — все это равносильно одной пустой строке или одной команде \par (точно так же, как несколько пустых строк равносильны одной); дополнительный промежуток между абзацами вы таким образом не создадите. В разд. "Вертикальные промежутки" рассказывается, как получить на печати дополнительные вертикальные промежутки.

Сказанное в предыдущем абзаце можно с помощью понятия режима сформулировать так: в вертикальном режиме команда \par ничего не делает.

Подавление абзацного отступа

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

\parindent.0em

В этом абзаце
отступа не будет.
\par 
\parindent.6em
В этом абзаце отступ
будет  присутствовать.
\par
\noindent В этом абзаце
отступа не будет.\par
В этом абзаце отступ
будет \noindent
присутствовать.

Команда \noindent действует только на тот абзац, который с нее начинается; если ее поместить внутри абзаца, то вообще ничего не произойдет (что и иллюстрирует второй из абзацев в нашем примере). Стало быть, между \noindent и абзацем, к которому она относится, не должно быть пустой строки (иначе получится, что \noindent относится к "пустому абзацу", заканчивающемуся этой пустой строкой).

В большинстве случаев, когда разумно сделать абзац без отступа, LaTeX заботится об этом сам, так что вам не придется пользоваться командой \noindent чересчур часто.

Пользуясь понятием режима, можно сказать так: в вертикальном режиме команда \noindent означает "начать новый абзац без абзацного отступа", а в горизонтальном (и математическом, коль на то пошло) режиме она означает "ничего не делать".

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

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

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

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

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

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

Команда \cleardoublepage делает то же, что и \clearpage, но при этом в некоторых классах документов (в тех, которые предусматривают разное оформление страниц с четными и нечетными номерами — см. разд."Классы, пакеты и классовые опции" "Оформление текста в целом" по поводу классовой опции 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.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров