После прочтения предыдущей главы вы должны представлять, из чего состоит документ LATEX. Вторая глава заполняет эту структуру всем необходимым для производства реальных материалов.
Книги часто верстаются так, чтобы все строчки имели одинаковую длину. LATEX вставляет необходимые разрывы строк и пробелы между словами, оптимизируя форматирование абзаца как целого. При необходимости он также переносит слова, которые не помещаются на строке. От класса документа зависит то, как верстаются абзацы. Обычно каждый абзац начинается с красной строки, а дополнительного интервала между ними нет. Подробности смотрите в разделе 5.3.2.
В некоторых случаях может быть необходимо указать LATEX разорвать строку:
или newline
начинают новую строку, не начиная нового абзаца.
запрещает, кроме того, разрыв страницы после вставленного разрыва строки.
newpage
начинает новую страницу.
linebreak[
n]
,
nolinebreak[
n]
,
pagebreak[
n]
и
nopagebreak[
n]
разрывают строку, запрещают разрыв строки, разрывают страницу и запрещают разрыв страницы, соответственно. Необязательный аргумент n позволяет автору влиять на их действие. Он может быть равен числу от нуля до четырех. Устанавливая n в значение, меньшее 4, вы оставляете LATEX возможность игнорировать вашу команду, если результат будет очень плох.
LATEX всегда пытается производить наилучшее из возможных разбиение строк. Если он не может найти способ разбить строки в соответствии со своими стандартами, он позволяет одной строке выступать из абзаца вправо. LATEX затем выводит диагностику (<<overfull hbox>>) во время обработки входного файла. Чаще всего это случается, когда LATEX не может найти место для переноса слова. Давая команду sloppy, вы можете сказать, чтобы LATEX несколько ослабил свои стандарты. Тогда он сможет предотвратить такие слишком длинные строки, увеличивая интервалы между словами -- даже, если конечный вывод будет не оптимален. В этом случае пользователь получит предупреждение (<<underfull hbox>>). В большинстве случаев результат выглядит не очень хорошо. Команда fussy действует в обратную сторону.
LATEX переносит слова, когда это необходимо. Если алгоритм переносов не находит правильных точек переноса, вы можете исправить положение, сказав TEX об исключении при помощи следующих команд.
Команда
hyphenation{
список слов}
вызывает перенос слов, перечисленных в ее аргументе, только
в местах, отмеченных <<-
>>. Эта команда должна даваться в
преамбуле входного файла, и должна содержать только слова, состоящие
из обычных букв. Регистр букв игнорируется. Следующий пример разрешает
переносы в слове <<hyphenation>>, так же, как и в слове <<
Hyphenation>>, и запрещает переносы в словах <<FORTRAN>>,
<<Fortran>> и <<fortran>>.
Пример:
\hyphenation{FORTRAN Hy-phen-a-tion}
Команда - вставляет в слово выборочный перенос. Он также становится единственной разрешенной точкой переноса в этом слове. Эта команда в особенности полезна для слов, содержащих специальные символы (например, символы с акцентами), потому что LATEX не переносит такие слова автоматически.
I think this is: su\-per\-cal\-%
i\-frag\-i\-lis\-tic\-ex\-pi\-%
al\-i\-do\-cious
I think this is: supercal ifragilisticexpi alidocious
Несколько слов можно удержать вместе на одной строке командой
mbox{
текст}
Она будет в любом случае сохранять свой аргумент вместе.
Номер моего телефона скоро сменится.
Он будет \mbox{0116 291 2319}.
Параметр
\mbox{\emph{имя файла}} должен
содержать имя файла.
Номер моего телефона скоро сменится.
Он будет \mbox{0116 291 2319}.
Параметр имя файла должен содержать имя файла.
Для набора кавычек вы не должны использовать
знак "
, как на пишущей машинке. При
верстке существуют специальные знаки открывающей и закрывающей
кавычек. В LATEX используйте два знака `
в качестве
открывающей кавычки и два знака '
в качестве
закрывающей.
``Пожалуйста, нажмите
клавишу `x' ''
``Пожалуйста, нажмите клавишу `x' ''
LATEX знает про четыре вида тире. Три из них вы можете
получить различным числом последовательных знаков -
. Четвертое
на самом деле не тире вовсе, а математический знак минус:
мальчик-с-пальчик, X-лучи\\
страницы 13--67\\
да~--- или нет?\\
$0$, $1$ и $-1$
мальчик-с-пальчик, X-лучи
страницы 13-67
да -- или нет?
0, 1 и -1
Эти тире называются так: - дефис, -
короткое тире, -- длинное тире и $-$
знак минуса.
На пишущей машинке точка или запятая занимают то же пространство, что и любая другая буква. Напечатанные в книге, эти символы занимают очень мало места и верстаются очень близко к предшествующей букве. Поэтому вы не можете ввести многоточие просто напечатав три точки, так как расстояние между ними будет неправильным. Кроме того, для многоточия есть специальная команда, называющаяся
Не так ... а вот так:\\
Нью-Йорк, Токио, Будапешт, \ldots
Не так ... а вот так:
Нью-Йорк, Токио, Будапешт, ...
Некоторые комбинации букв верстаются не просто набором разных букв друг за другом, а с использованием специальных символов8.
ff fi fl ffi... вместо ff fi fl ffi ...
Эти так называемые лигатуры могут быть запрещены
вставкой
mbox{}
между двумя соответствующими буквами. Это
может быть необходимо для слов, образованных из двух частей.
Не ``shelfful''\\
а ``shelf\mbox{}ful''
Не ``shelfful''
а ``shelfful''
Чтобы поместить знак акцента над буквами i или j, точки над ними
должны быть удалены. Это достигается набором \i
и \j
.
H\^otel, na\"\i ve, \'el\`eve,\\
sm\o rrebr\o d, !`Se\~norita!,\\
Sch\"onbrunner Schlo\ss{}
Stra\ss e
Для многих языков эти изменения достигаются использованием пакета babel (автор Johannes Braams). Для этого ваша система LATEX должна быть специально сконфигурирована. Ваш [4] может включать дополнительную информацию об этом.
Если ваша система уже соответствующим образом сконфигурирована, вы можете активизировать пакет babel добавлением команды
usepackage[
язык]{babel}
после команды \documentclass
. Какие языки
поддерживает ваша система, также может быть указано в [4].
Для некоторых языков babel указывает также новые команды,
упрощающие ввод специальных символов. Например, немецкий язык
содержит множество диакритических знаков (äöü). С использованием
babel вы можете вводить ö, печатая "o
вместо \"o
.
Некоторые компьютерные системы позволяют вам вводить специальные символы прямо с клавиатуры. LATEX может обрабатывать такие символы. Начиная с выпуска LATEX2e от декабря 1994г., поддержка нескольких входных кодировок является частью базовой поставки LATEX2e. Ознакомьтесь с пакетом inputenc. При использовании этого пакета вы должны понимать, что другие могут неправильно видеть ваши входные файлы на своем компьютере из-за использования другой кодировки. Например, немецкий акцент ä на IBM PC кодируется как 132, а на некоторых Unix системах, использующих ISO-LATIN 1, -- как 228. Поэтому используйте эту возможность с осторожностью.
Иной случай -- с кодировкой шрифта. Она определяет, в какой позиции в пределах шрифта TEX находится каждая буква. Оригинальный TEX шрифт Computer Modern содержит только 128 символов из старого 7-битного набора символов ASCII. Когда требуются акцентированные символы, TEX создает их, комбинируя нормальный символ с акцентом. Несмотря на то, что результирующая верстка выглядит прекрасно, этот подход не дает автоматическим переносам работать внутри слов, использующих акцентированные символы.
К счастью, большинство современных поставок TEX содержат копию шрифтов EC. Эти шрифты выглядят, как шрифты Computer Modern, но содержат специальные символы для большинства акцентированных букв, используемых в европейских языках. Используя эти шрифты, вы можете улучшить переносы в не-английских документах. Шрифты EC активизируются включением в преамбуле вашего документа пакета fontenc.
usepackage[T1]{fontenc}
Настоящие шрифты EC следуют кодировке T1
. Отсюда -- опция
команды
usepackage.
Для получения ровного правого края вывода LATEX вставляет различные интервалы между словами. В конце предложения он вставляет слегка больший интервал, делая текст более читабельным9. LATEX предполагает, что предложения заканчиваются точками, вопросительными или восклицательными знаками. Если точка следует за буквой в верхнем регистре, она не считается концом предложения, так как точки после букв верхнего регистра обычно используются для сокращений.
Любое исключение из этих предположений должно быть явно оговорено
автором. Знак <<\
>> перед пробелом дает в результате пробел,
который не будет увеличен. Знак <<~
>> дает пробел, который не
может увеличиться и который, кроме того, запрещает разрыв строки.
Команда \@
перед точкой указывает, что эта точка заканчивает
предложение, несмотря на то, что стоит за буквой верхнего регистра.
Mr.~Smith was happy to see her\\
cf.~Fig.~5\\
I like BASIC\@. What about you?
I like BASIC. What about you?
Mr. Smith was happy to see her
cf. Fig. 5
I like BASIC. What about you?
Дополнительный пробел после точек можно запретить командой
frenchspacing
которая указывает LATEX не вставлять пробела после
точки более, чем после обычных символов. Это обычно для языков,
отличных от английского, за исключением библиографий. Если вы
используете
frenchspacing, команда \@
не нужна.
Чтобы помочь читателю ориентироваться в вашей работе, вы должны разделять ее на главы, разделы и подразделы. LATEX поддерживает это специальными командами, принимающими в качестве аргумента заголовок раздела. Ваше дело -- использовать их в надлежащем порядке.
Класс article включает следующие команды секционирования:
section{...}
paragraph{...}
subsection{...}
subparagraph{...}
subsubsection{...}
appendix
В классах report и book вы можете использовать две дополнительные команды:
part{...}
chapter{...}
Так как глав (chapters) в классе article нет, то статьи довольно легко добавлять в книгу в качестве глав. Интервалы между разделами, нумерация и размер шрифта заголовков устанавливаются LATEX автоматически.
Две из команд секционирования -- особенные:
LATEX создает оглавление, беря заголовки разделов и номера страниц из предыдущего прохода по документу. Команда
tableofcontents
вставляет оглавление в то место, где она вызвана. Чтобы получить правильное оглавление, новый документ должен быть обработан LATEX дважды. В особых случаях может быть необходим и третий проход. Когда это потребуется, LATEX вас предупредит.
Все вышеперечисленные команды секционирования существуют также в
вариантах со звездочкой. Такой вариант получается добавлением *
к имени команды. Они генерируют заголовки разделов, которые не
нумеруются и не включаются в оглавление. Например, команда
\section{Справка}
становится \section*{Справка}
.
Обычно заголовки разделов появляются в оглавлении точно в том же виде, в каком они вводятся в тексте. Иногда это невозможно из-за того, что заголовок слишком длинен для оглавления. Элемент оглавления может в этом случае указываться необязательным аргументом перед собственно заголовком.
\chapter[Прочтите! Это замечательно]{Это~--- длинный,
длинный и очень нудный заголовок}
Титульный лист документа в целом генерируется при помощи команды
maketitle
Его содержимое должно быть определено командами
title{...}
,
author{...}
и
date{...}
до момента вызова \maketitle
. Аргумент команды
authors может содержать несколько имен, разделенных командами
and.
Пример некоторых из упомянутых команд может быть найден на иллюстрации.
Помимо описанных выше команд секционирования, LATEX2e вводит три дополнительных команды для использования с классом book.
frontmatter, mainmatter и backmatter Они полезны для деления вашей публикации. Команды изменяют заголовки глав и нумерацию страниц так, как это ожидается от книги.11
В книгах, отчетах и статьях часто встречаются перекрестные ссылки
на иллюстрации, таблицы и отдельные части текста. Для этого LATEX
предоставляет следующие команды:
label{
метка}
,
ref{
метка}
и
pageref{
метка}
где метка -- выбранный пользователем
идентификатор. LATEX заменяет \ref
номером раздела,
подраздела, иллюстрации, таблицы или уравнения, где была использована
соответствующая команда \label
. \pageref
печатает номер
страницы, соответствующей команде \label
. Здесь также
используются номера из предыдущего прохода.
Ссылка на этот
раздел~\label{sec:this}
выглядит так: <<см.
раздел~\ref{sec:this} на
стр.~\pageref{sec:this}.>>
Ссылка на этот раздел выглядит так: <<см. раздел 2.6 на стр. .>>
Команда
footnote{
текст сноски}
печатает сноску внизу текущей страницы.
Пользователи \LaTeX{}
часто употребляют
сноски\footnote{%
Это~--- сноска.}.
Пользователи LATEX часто употребляют сноски12.
В рукописи, напечатанной на машинке, важные слова подчеркиваются. В печатных изданиях эти слова выделяются. Команда для переключения на шрифт выделения называется
emph{
текст}
Ее аргументом является текст для выделения .
Если вы используете
\emph{выделение в уже
выделенном тексте, то
\LaTeX{} использует
\emph{прямой} шрифт.}
Если вы используете выделение в уже выделенном тексте, то LATEX использует прямой шрифт.
Для верстки специальных видов текста LATEX определяет множество окружений для разных типов форматирования:
begin{
название}
текст
end{
название}
где название определяет окружение. Окружения можно вызывать внутри окружений, соблюдая порядок вызова и возврата:
\begin{aaa}...\begin{bbb}...\end{bbb}...\end{aaa}
В следующих разделах рассказывается обо всех важных окружениях.
Окружение itemize подходит для простых списков, окружение enumerate -- для нумерованных списков, а окружение description -- для описаний.
\flushleft
\begin{enumerate}
\item Вы можете как угодно
смешивать окружения списков:
\begin{itemize}
\item Но это может смотреться
глупо.
\item[-] С минусом.
\end{itemize}
\item Поэтому помните:
\begin{description}
\item[Глупые] вещи не станут
умнее от помещения в список.
\item[Умные] вещи, однако,
вполне можно представить
списком.
\end{description}
\end{enumerate}
Окружения flushleft и flushright форматируют абзацы, выровненные влево или вправо. Окружение center дает центрированный текст. Если вы не используете для указания разрывов строк, LATEX определит их автоматически.
\begin{flushleft}
Этот текст\\ выровнен влево.
\LaTeX{} не старается сделать
все строки одинаковой длины.
\end{flushleft}
\begin{flushright}
Этот текст\\ выровнен вправо.
\LaTeX{} не старается сделать
все строки одинаковой длины.
\end{flushright}
\begin{center}
В центре\\Земли
\end{center}
Окружение quote полезно для цитат, важных фраз и примеров.
Типографское правило для
длины строки:
\begin{quote}
Никакая строка не должна
содержать больше 66~символов.
Вот почему \LaTeX{} делает
такими широкими поля страниц.
\end{quote}
Поэтому в газетах часто
применяют набор в
несколько колонок.
Типографское правило для длины строки:
Никакая строка не должна содержать больше 66 символов.Поэтому в газетах часто применяют набор в несколько колонок.Вот почему LATEX делает такими широкими поля страниц.
Существуют еще два похожих окружения: quotation и verse. Окружение quotation полезно для более длинных цитат, охватывающих несколько абзацев, потому что оно начинает абзацы с красной строки. Окружение verse используют для стихов, где важны разрывы строк. Строки разделяются при помощи в конце строки и пустой строки после каждой строфы.
Я знаю только одно английское
стихотворение наизусть: про
Шалтая-Болтая:
\begin{flushleft}
\begin{verse}
Humpty Dumpty sat on a wall:\\
Humpty Dumpty had a great fall.\\
All the King's horses and all
the King's men\\
Couldn't put Humpty together
again.
\end{verse}
\end{flushleft}
Я знаю только одно английское стихотворение наизусть: про Шалтая-Болтая:
Humpty Dumpty sat on a wall:
Humpty Dumpty had a great fall.
All the King's horses and all the King's men
Couldn't put Humpty together again.
Текст, заключенные между \begin{
verbatim}
и
\end{verbatim}
будет напрямую напечатан, как набранный на
пишущей машинке, со всеми пробелами и возвратами каретки, без
выполнения каких бы то ни было команд LATEX.
Внутри абзаца аналогичную функцию выполняет команда
verb+
текст+
Здесь <<+
>> -- это только пример
символа-ограничителя. Вы может использовать любой символ, кроме букв,
<<*
>> или пробела. Многие примеры на LATEX в этом буклете
набраны этой командой.
Команда \verb|\ldots| \ldots
Команда \ldots
...
begin{verbatim}
10 PRINT "HELLO WORLD ";
20 GOTO 10
end{verbatim}
10 PRINT "HELLO WORLD ";
20 GOTO 10
begin{verbatim*}
вариант окружения
verbatim со
звездочкой выделяет
пробелы в тексте
end{verbatim*}
вариант окружения
verbatim со
звездочкой выделяет
пробелы в тексте
Команду verb тоже можно использовать аналогичным образом со звездочкой:
\verb*|вот так :-) |
вот так :-)
Окружение verbatim и команду \verb
нельзя использовать
внутри параметров других команд.
Окружение tabular используют для верстки таблиц, возможно, с горизонтальными и вертикальными линиями. LATEX автоматически определяет ширину столбцов.
Аргумент спецификация команды
\begin{tabular}{
спецификация}
определяет формат таблицы. Используйте l для
столбца текста, выровненного влево, r для текста,
выровненного вправо и c для центрированного текста,
p{
ширина}
для столбца, содержащего выровненный
текст с переносом строк, и |
для вертикальной линии.
Внутри окружения tabular знак <<&
>> переходит к
следующему столбцу, команда
начинает новую строку, а
hline вставляет горизонтальную линию.
\begin{tabular}{|r|l|}
\hline
54 & шестнадцатеричное \\
124 & восьмеричное \\
1010100 & двоичное \\
\hline \hline
84 & десятичное \\
\hline
\end{tabular}
54 | шестнадцатеричное |
124 | восьмеричное |
1010100 | двоичное |
84 | десятичное |
\begin{tabular}{|p{4.7cm}|}
\hline
Добро пожаловать в абзац в
рамочке. Надеемся, вам всем
тут понравится.\\
\hline
\end{tabular}
Добро пожаловать в абзац в рамочке. Надеемся, вам всем тут понравится. |
При помощи конструкции @{...}
можно указать разделитель
столбцов. Эта команда удаляет пробел между столбцами и заменяет его на
то, что включено в фигурные скобки. Одно из частых использований этой
команды показано ниже, при рассказе о проблеме выравнивания по
десятичной точке. Другое возможно использование -- для подавления
ведущего пробела в таблице при помощи @{}
:
\begin{tabular}{@{} l @{}}
\hline
нет ведущего пробела\\
\hline
\end{tabular}
нет ведущего пробела |
\begin{tabular}{l}
\hline
ведущий пробел слева и справа\\
\hline
\end{tabular}
ведущий пробел слева и справа |
Поскольку встроенный способ
выровнять числовые столбцы по десятичной точке
отсутствует13, мы можем
<<обмануть>> TEX и добиться этого при помощи двух столбцов:
выровненной вправо целой части и выровненной влево дробной. Команда
@{.}
в строке \begin{tabular}
заменяет нормальный пробел
между столбцами просто на <<.>>, давая эффект одного столбца,
выровненного по десятичной точке. Не забудьте заменить в ваших
числах точку на разделитель столбцов (&
)! Метку столбца можно
поместить над нашим числовым <<столбцом>> командой
multicolumn:
\begin{tabular}{c r @{.} l}
Выражение с $\pi$ &
\multicolumn{2}{c}{Значение} \\
\hline
$\pi$ & 3&1416 \\
$\pi^{\pi}$ & 36&46 \\
$(\pi^{\pi})^{\pi}$ & 80662&7 \\
\end{tabular}
Выражение с | Значение | ||
3 | . | 1416 | |
36 | . | 46 | |
80662 | . | 7 |
Для решения этой проблемы любая иллюстрация или таблица, не умещающаяся на текущей странице, может `плавать', перемещаясь на следующую страницу в процессе заполнения текстом текущей. LATEX предлагает для плавающих объектов два окружения, одно для таблиц и одно для иллюстраций. Чтобы полностью использовать их преимущества, важно примерно представлять, как LATEX обрабатывает плавающие объекты. Иначе они могут стать источником разочарования из-за того, что LATEX помещает их не туда, куда вы хотите.
Давайте вначале рассмотрим команды, предоставляемые LATEX для плавающих объектов.
Любой материал, включенный в окружения figure или table,
трактуется как плавающий. Оба окружения имеют необязательный
параметр
\begin{figure}[
спецификация размещения]
или
\begin{table}[
спецификация размещения]
называемый спецификацией размещения. Этот параметр используется для указания LATEX, куда можно перемещать плавающий объект. Спецификация размещения конструируется путем собирания в строчку ключей размещения плавающего объекта.
Например, таблицу можно начать следующей строкой:
\begin{table}[!hbp]
Спецификация размещения [!hbp]
позволяет
LATEX разместить таблицу прямо по месту (h), или внизу той
же страницы (b), или на выделенной странице (p), и
все это -- даже если это будет смотреться не так уж хорошо
(!). Если никакой спецификации размещения не задано,
стандартные классы предполагают [tbp]
.
LaTeX
размещает каждый встреченный плавающий объект в соответствии
с заданной автором спецификацией. Если объект нельзя поместить на
текущей странице, он откладывается, помещаясь в очередь
иллюстраций или в очередь
таблиц 14. Когда начинается
новая страница, LATEX проверяет, можно ли заполнить специальную
страницу плавающими объектами из очередей. Если нет, то первый объект
из каждой очереди считается только что встретившимся в тексте:
LATEX снова пытается разместить их в соответствии с их
спецификациями (за исключением `h', что уже невозможно). Новые
встреченные в тексте плавающие объекты помещаются в соответствующие
очереди. LATEX сохраняет порядок, в котором встретились плавающие
объекты соответствующего типа. Поэтому иллюстрация, которую не удается
разместить, отталкивает все дальнейшие иллюстрации к концу документа.
Следовательно:
Если LATEX не размещает плавающие объекты, как вы этого ожидаете, то часто это только один объект устроил затор в одной из очередей.
После объяснения этих механизмов остается еще несколько
замечания про окружения table и figure. Командой
caption{
текст заголовка}
вы можете задать заголовок для объекта. Увеличивающийся номер и строка <<Рисунок>> или <<Таблица>> добавляются LATEX.
Две команды
listoffigures и listoftables
работают аналогично команде \tableofcontents
, печатая
список иллюстраций или таблиц, соответственно. В этих списках
заголовки повторяются целиком. Если вы используете длинные заголовки,
то вы должны предоставить их краткий вариант для включения в списки.
Это делается помещением краткого варианта в квадратные скобки после
команды \caption
.
\caption[Короткий]{Дддддллллллиииинннннныыыыыыыыыыыыыыййй}
При помощи \label
и \ref
можно делать ссылки из вашего
текста на плавающий объект.
Следующий пример рисует квадрат и вставляет его в документ. Подобную технику можно использовать, чтобы оставить в документе место под изображения, которые вы вставите позже.
Рисунок~\ref{white} является примером Поп-Арта.
\begin{figure}[!hbp]
\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}}
\caption{Пять на пять сантиметров} \label{white}
\end{figure}
В этом примере15 LATEX будет очень сильно (!) стараться разместить иллюстрацию прямо по месту (h). Если это невозможно, он попытается разместить ее внизу страницы (b). Если ему не удастся поместить иллюстрацию на текущей странице, он выяснит, можно ли создать страницу плавающих объектов, содержащую эту иллюстрацию и, возможно, некоторые таблицы из очереди таблиц. Если для отдельной страницы материала еще не накопилось, LATEX начинает новую страницу и снова рассматривает иллюстрацию, как если бы она только что появилась в тексте.
В определенных случаях может быть необходимо использовать команду
clearpage или даже cleardoublepage
Она указывает LATEX немедленно разместить все плавающие объекты, остававшиеся в очередях, и затем начать новую страницу. cleardoublepage, помимо этого, начинает новую левостороннюю страницу.
Позже вы узнаете, как включать в ваши документы LATEX рисунки в формате POSTSCRIPT.