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

Набор текста

Вертикальные промежутки

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

  • \smallskip задает такой,
    \def\hhrule{\hrule width 1em\relax}
\,\vbox{\hhrule\smallskip\hhrule}\
    , промежуток;
  • \medskip задает такой,
    \def\hhrule{\hrule width 1em\relax}\vbox{\hhrule\medskip\hhrule}\
    промежуток;
  • \bigskip задает такой,
    \def\hhrule{\hrule width 1em\relax}\vbox{\hhrule\bigskip\hhrule}\
    промежуток.

Проще всего поставить эти команды непосредственно после пустой строки или команды \par, завершающей абзац:

После этого абзаца 
мы оставим
дополнительный пробел.
\par\smallskip
А теперь начнем новый
абзац
.
После этого абзаца 
мы оставим
дополнительный пробел.
\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}

Здесь x, y и z - длины, выраженные в TeX'овских единицах, а plus и minus — так называемые "ключевые слова" TeX'а (в отличие от команд, перед ними не надо ставить backslash). При этом x обозначает "естественную" величину отступа: если при верстке страницы вертикальные интервалы не приходится растягивать или сжимать (например, в случае, когда, мы разрешили TeX'у оставлять внизу страницы пустое место; в дальнейшем мы обсудим, как это делать), то будет сделан пробел размером ровно x. При необходимости, однако (например, ради того, чтобы все страницы имели одинаковую высоту), этот интервал можно будет и изменить: y указывает степень растяжимости, а z — степень сжимаемости интервала. Говоря TeXническим языком, команда \vspace вставляет в страницу " клей"10Свойства которого мало похожи на свойства настоящего клея. См. лекцию 8 ; расстояния, указанные после 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 (возможно, с коэффициентом). В простых приложениях такие конструкции, как правило, не встречаются. Мы еще будем говорить о них в "Блоки и клей" .

Интерлиньяж

В полиграфии этим красивым словом называется интервал между строками. Команды наподобие \small, устанавливающие размер шрифта, автоматически устанавливают и размер интервала между строками, так что вручную менять его не следует (потому мы и не рассказываем, как это делать; любопытствующий читатель может узнать некоторые подробности в приложении Е и все подробности в книге [2]). Можно, однако (и иногда это бывает необходимо), пропорционально увеличить или уменьшить все интервалы между строками — например, чтобы подогнать число полос в документе к требуемому. Если, скажем, вы хотите увеличить интервалы между строками на 1%, т. е. в 1.01 раза, то в преамбуле следует написать так:

\renewcommand{\baselinestretch}{1.01}

Если нужно пропорционально увеличить или уменьшить интерлиньяж в каком-то фрагменте текста, то можно написать так:

{% Открывающая фигурная скобка небходима
\renewcommand{\baselinestretch}{1.01}
\selectfont
Текст, в котором надо изменить интерлиньяж...
....
Конец этого текста

}% Закрывающая скобка, парная к открывающей

(если опять надо увеличить на 1%; в других случаях — соответственно). Не забудьте, что закрывающая фигурная скобка должна стоять после пустой строки, завершающей последний абзац, иначе ничего не выйдет .

Почему этот прием работает и каков смысл команды \selectfont, объясняется в приложении В.

Между абзацами можно организовать дополнительные вертикальные интервалы. Именно, в TeX'е есть параметр \parskip со значением длины; если присвоить ему ненулевое значение, например, написав

\parskip=3mm

то между абзацами будет делаться отступ в 3mm (в дополнение к обычному межстрочному интервалу). Без особой необходимости не следует присваивать параметру \parskip новое значение, поскольку оно вполне разумно устанавливается в стандартных LaTeX'овских классах.

На самом деле в стандартных классах \parskip является растяжимой длиной . Именно, естественный размер \parskip равен нулю, но у него есть еще plus-компонента, равная одному пункту. Стало быть, если вертикальные интервалы на странице не варьируются, то никакого дополнительного интервала между абзацами не делается, но если страницу при верстке приходится растягивать по вертикали, то каждый из интервалов между абзацами может быть растянут. При желании можно изменить как естественный размер, так и растяжимую компоненту параметра \parskip с помощью команды \setlength, о которой пойдет речь в разд. "Параметры со значением длины" "Создание новых команд" .

Набор в две колонки

Если вам необходимо набирать в две колонки весь документ, то это надо сделать, указав в команде \documentclass соответствующую " классовую опцию". Если же в две колонки надо набрать не весь текст, а только его часть, к вашим услугам команда \twocolumn. Действует она так: сначала выполняется команда \clearpage, а затем с новой страницы, созданной этой командой, начинается набор в две колонки.

Если вы хотите, чтобы колонки на печати были разделены вертикальной линейкой, присвойте ненулевое значение параметру под названием \columnseprule (его значение равно ширине линейки). По умолчанию значение этого параметра равно 0pt, так что линейка не печатается; хорошая линейка получается при значении 0.4pt.

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

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

Команда \onecolumn осуществляет переход от двухколонного набора к одноколонному (предварительно она опять-таки выполняет команду \clearpage ).

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

Единственный обязательный аргумент окружения multicols — целое число, равное числу колонок. Если, скажем, вам нужно, начиная с какого-то места, начать набор в три колонки, скажите

\begin{multicols}{3}
Текст
\end{multicols}

Набор в три колоноки начнется с того места на странице, куда попало \begin{multicols}, колонки на последней странице трехколонного набора будут выровнены по высоте. Присвоив ненулевое значение параметру \columnseprule, можно разделить колонки линейками.

Заключительные замечания о разрывах страниц и вертикальных интервалах

Мы уже отмечали, что TeX'овские алгоритмы создания страниц не обладают той же гибкостью, что алгоритм разбиения абзаца на строки. Поэтому не надо слишком увлекаться принудительными разрывами и запретами разрывов страниц и командами наподобие \vspace*. Даже такая замечательная программа, как TeX, не сможет удовлетворить логически противоречивым требованиям; если ограничений на разрывы страниц слишком много, то TeX будет вынужден сделать эти разрывы, исходя из формального смысла своих алгоритмов. При этом, скорее всего, на печати вы получите много страниц, разорванных в самых неожиданных и неудачных с точки зрения человека местах, а на экране — много сообщений вроде такого:

Underfull \vbox (badness 10000) has occurred
while \output is active

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

Наконец, если трудности возникают оттого, что вы часто оставляете в тексте место для рисунка командой \vspace*, то вам стоит воспользоваться "плавающими" иллюстрациями (см. разд. "Плавающие иллюстрации и таблицы" "Оформление текста в целом" ).

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