TEX произносится как <<тех>>. В среде ASCII TEX нужно писать как TeX.
Позже LATEX был обновлен командой LATEX3 во главе с Frank Mittelbach. В нем были сделаны некоторые давно ожидавшиеся улучшения, и вновь объединены все варианты LATEX, разошедшиеся с выпуска много лет назад версии LATEX 2.09. Чтобы не путать эту новую версию со старой, она называется LATEX2e. Эта документация описывает именно LATEX2e.
LATEX произносится как <<лэйтех>> или как <<латех>>. Если вы ссылаетесь на LATEX в ASCII окружении, пишите LaTeX. LATEX2e пишется как LaTeX2e.
Рисунок показывает, как работают вместе TEX и LATEX2e. Он взят из wots.tex Kees van der Laan.
Для того, чтобы опубликоваться, авторы отдают свои рукописи в издательство. Затем дизайнер издательства определяет макет документа (ширину столбцов, шрифты, интервалы выше и ниже заголовков и т.п.). Дизайнер записывает свои инструкции в рукописи и отдает ее верстальщику, который верстает книгу в соответствии с этими инструкциями.
Дизайнер-человек пытается понять, что автор имел в виду, когда писал свою рукопись. Он определяет заголовки глав, цитаты, примеры, формулы и прочее, исходя из своего профессионального опыта и из содержания рукописи.
В среде LATEX, LATEX берет на себя роль дизайнера книги, используя TEX в качестве верстальщика. Но LATEX -- это всего лишь программа, и, следовательно, нуждается в более четких инструкциях. Автор должен предоставить дополнительную информацию, описывающую логическую структуру своей работы. Эта информация записывается в текст в виде <<команд LATEX>>.
Это в корне отличается от WYSIWYG1 подхода, принятого в большинстве современных текстовых процессоров, таких как MS Word или Corel WordPerfect. В этих приложениях авторы форматируют документ интерактивно в процессе набора текста на компьютере. В процессе работы они могут видеть на экране как будет выглядеть их работа, когда, в конце концов, она будет напечатана.
При использовании LATEX обычно невозможно увидеть итоговую картину во время печатания текста. Ее, однако, можно посмотреть на экране после обработки файла LATEX. Затем можно внести исправления перед собственно печатью.
Типографский дизайн -- это профессия. Неопытные авторы часто допускают серьезные ошибки форматирования, предполагая, что дизайн книги -- это большей частью вопрос эстетики: <<если документ выглядит художественно, значит, он хорошо отдизайнен>>. Но, так как документ предназначен для чтения, а не для вывешивания в картинной галерее, удобство его чтения и понимания гораздо более важны, нежели красота. Например:
С WYSIWYG системами авторы часто производят эстетически приятные документы со слабо выраженной или невыдержанной структурой. LATEX предотвращает такие ошибки форматирования, заставляя автора объявлять логическую структуру его документа. Затем уже LATEX выбирает наиболее подходящий макет (раскладку) документа.
Тема, часто обсуждаемая, когда люди из мира WYSIWYG встречаются с пользователями LATEX, -- <<преимущества LATEX перед нормальными текстовыми процессорами>>, или наоборот. Лучшее, что вы можете сделать, когда начинается такая дискуссия, -- это пригнуться, так как она часто выходит из-под контроля. Однако, иногда вы не можете уклониться ...
Вот вам некоторое оружие. Основные преимущества
LATEX перед обычными текстовыми процессорами:
LATEX имеет также и некоторые недостатки, но, кажется, мне трудно найти среди них заметные, хотя, я уверен, другие вам найдут их сотни ;-)
Исходными данными для LATEX являются обычный текстовый файл в ASCII. Его можно создать в любом текстовом редакторе. Он содержит текст документа вместе с командами, указывающими LATEX, как верстать текст.
<<Пустые>> символы, такие, как пробел или табуляция, трактуются LATEX одинаково, как <<пробел>>. Несколько последовательных пустых символов трактуются как один <<пробел>>. Пустые символы в начале строки обычно игнорируются, а единичный перевод строки воспринимается как <<пробел>>.
Пустая строка между двух строк текста определяет конец абзаца. Несколько пустых строк трактуются так же, как одна пустая строка. Ниже приведен пример. Сверху -- текст из входного файла, снизу -- форматированный вывод.
Неважно, вставляете ли вы один или несколько пробелов между словами. Пустая строчка начинает новый абзац.
Неважно, вставляете ли вы
один или несколько
пробелов между словами.
Пустая строчка начинает
новый абзац.
Следующие символы являются зарезервированными символами, которые либо имеют в LATEX специальное значение, либо имеются не во всех шрифтах. Если вы введете их в текст напрямую, то они обычно не напечатаются, а заставят LATEX сделать что-нибудь, вами вовсе не предусмотренное.
$ & % # _ { } ~ ^ \
Как вы позже увидите, эти символы можно использовать в ваших
документах, добавляя к ним префикс <<\
>>:
\$ \& \% \# \_ \{ \}
$ & % # _ { }
Прочие символы, как и многие, многие другие, можно набрать
специальными командами в математических формулах или как акценты. Знак
<<\
>> нельзя вводить, добавляя перед ним еще один, так
как эта команда (\\
) используется для разрыва
строки3.
Команды LATEX чувствительны к регистру и принимают одну из следующих двух форм:
\
>> и
продолжаются именем, состоящим только из букв. Имена команд
завершаются пробелом, цифрой или любой другой <<не-буквой>>.
\
>> и ровно одного специального символа.
LATEX игнорирует пробелы после команд. Если вы хотите получить
пробел после команды, вы должны поместить
или <<{}
>> и пробел, или специальную команду пробела после
имени команды. <<{}
>> не дает LATEX игнорировать все пробелы
после имени команды.
Я слышал, что Кнут разделяет людей, работающих с \TeX{} на \TeX{}ников и \TeX пертов.\\ Сегодня~--- \today
Я слышал, что Кнут разделяет
людей, работающих с TEX
на TEXников и TEXпертов.
Сегодня -- Ноябрь 27, 1998
Некоторые команды нуждаются в параметре, который
должен быть задан между фигурными
скобками <<{ }
>> после имени команды. Некоторые команды
поддерживают необязательные параметры, которые добавляются после
имени команды в квадратных
скобках <<[ ]
>>. Следующий пример использует некоторые
команды LATEX. Не задумывайтесь над ними, они будут разъяснены позже.
Вы можете \textsl{положиться} на меня!
Вы можете положиться на меня!
Пожалуйста, начните новую строчку прямо тут!\newline Спасибо!
Пожалуйста, начните новую
строчку прямо тут!
Спасибо!
Когда в процессе обработки входного файла LATEX встречает символ
%
, он игнорирует остаток текущей строки. Это полезно для
добавления в исходный файл замечаний, которые не будут выводиться на
печать.
Это % глупый % Лучше: поучительный <---- пример.
Это пример.
Когда LATEX2e обрабатывает входной файл, он ожидает от него следования определенной структуре. Так, каждый входной файл должен начитаться с команды
\documentclass{...}
Она указывает, документ какого типа вы собираетесь писать. После этого, вы можете включать команды, влияющие на стиль документа в целом, или загружать пакеты, добавляющие новые возможности в систему LATEX. Для загрузки такого пакета используется команда
\usepackage{...}
Когда вся настройка закончена 4, вы начинаете тело текста командой
\begin{document}
Теперь вы вводите текст с командами LATEX. В конце документа вы
добавляете команду
\end{document}
Все, что следует после нее, LATEX игнорирует.
Рис. ниже показывает содержимое минимального файла для LATEX2e. Несколько более сложный входной файл дан на следующем рис.5.
\documentclass{article} \usepackage[russian]{babel} \begin{document} Краткость~--- сестра таланта. \end{document}
\documentclass[a4paper,11pt]{article} \usepackage{latexsym} \usepackage[russian]{babel} \begin{document} \author{Б.~Тоботрас} \title{Минимализм} \frenchspacing \begin{document} \maketitle \tableofcontents \subsection{Начало} Вот тут и начинается моя замечательная статья. \subsection{Конец} \ldots{} а тут она кончается. \end{document}
Первое, что LATEX должен знать при обработке входного файла, это
тип создаваемого автором документа. Он задается командой
documentclass.
documentclass
[
опции]{
класс}
Здесь класс определяет тип создаваемого документа. Таблица перечисляет классы документов, рассматриваемые в этом введении. В состав LATEX2e входят дополнительные классы для других документов, включая письма и слайды. Параметр опции изменяет поведение класса документа. Опции должны разделяться запятыми. В таблице перечислены самые употребительные опции стандартных классов документов.
Пример: Входной файл для документа LATEX может начинаться строкой
documentclass
[11pt,twoside,a4paper]{article}
она заставляет LATEX набирать документ как статью, с базовым размером шрифта одиннадцать пунктов и форматировать документ для двусторонней печати на бумаге формата A4.
usepackage
[
опции]{
пакет}
Где пакет -- это имя пакета, а опции -- список ключевых слов, включающих специальные свойства пакета. Некоторые пакеты включены в основную поставку LATEX2e (см. таблицу). Другие предоставляются отдельно. Дополнительная информация об установленных у вас пакетах может содержаться в [4]. Основной источник информации о LATEX -- это [3]. Она содержит описания сотен пакетов вместе с информацией о том, как писать ваши собственные расширения для LATEX2e.
pagestyle
{
стиль}
определяет, какой из них использовать. Предопределенные стили страницы перечислены в таблице ниже.
Возможно сменить стиль текущей страницы командой
thispagestyle
{
стиль}
В [3] включено описание того, как создавать ваши собственные колонтитулы.
include
{
файл}
Эту команду можно использовать в теле документа, чтобы включить в него содержимое другого файла. Заметьте, что LATEX начнет новую страницу, прежде, чем обрабатывать материал, содержащийся в файле.
Вторая команда может использоваться только в преамбуле. Она указывает
LATEX читать только некоторые из включенных (\include
)
файлов.
includeonly
{
filename,
filename
,
...}
После выполнения в преамбуле документа этой команды будут выполняться
только те команды
include, чьи имена файлов перечислены в
аргументе команды
includeonly.
Команда
include начинает верстку включаемого текста на новой
странице. Это удобно при использовании
includeonly, потому что
границы страниц не будут двигаться, даже когда некоторые включаемые
файлы пропускаются. Иногда это неудобно, и в этом случае вы можете
использовать команду
input
{
filename}
Она просто включает содержимое указанного файла.
После прочтения предыдущей главы вы должны представлять, из чего состоит документ 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.
Вот теперь мы готовы! В этой главе мы встретимся с основной мощью TEX: математической версткой. Но имейте в виду, что эта глава дает только поверхностный обзор. Хотя для многих из вас изложенных здесь вещей будет достаточно, не отчаивайтесь, если вы не сможете найти решение, отвечающее нуждам верстки вашей математики. Весьма возможно, что ваша проблема решается в AMS-LATEX16 или в каком-нибудь ином пакете.
LATEX включает в себя специальный режим для верстки математики.
.
Математический текст внутри абзаца вводится между
(
и
),
между $ и $ или между
\begin{
math}
или \end{math}
.
Складывая $a$ в квадрате с $b$ в квадрате, получаем $c$ в квадрате. Или излагая языком математики: $c^{2}=a^{2}+b^{2}$
Складывая a в квадрате с b в квадрате, получаем c в квадрате. Или излагая языком математики: c2=a2+b2
\TeX{} произносится как $\tau\epsilon\chi$.\\[6pt] 100~м$^{3}$ воды.\\[6pt] Это исходит от моего $\heartsuit$.
TEX произносится как
.
100 м3 воды.
Это исходит от моего
.
Большие математические уравнения или формулы предпочтительнее
<<выключать>>, то есть верстать их на отдельных строчках. Для этого
заключайте их между
[ и
]
или между
\begin{
displaymath}
и \end{displaymath}
. Это
дает вам не нумерованные формулы. Если вы хотите, чтобы LATEX их
нумеровал, пользуйтесь окружением equation.
Складывая $a$ в квадрате с $b$ в квадрате, получаем $c$ в квадрате. Или излагая языком математики: \begin{displaymath} c^{2}=a^{2}+b^{2} \end{displaymath} И еще одна строчка
Складывая a в квадрате с
b в квадрате, получаем
c в квадрате. Или
излагая языком математики:
При помощи
label и
ref вы можете в тексте ссылаться на
уравнение.
\begin{equation} \label{eq:eps} \epsilon > 0 \end{equation} Из (\ref{eq:eps}) выводим \ldots
Заметьте, что выражения в выключных формулах верстаются в другом стиле:
$\lim_{n \to \infty} \sum_{k=1}^n \frac{1}{k^2} = \frac{\pi^2}{6}$
\begin{displaymath} \lim_{n \to \infty} \sum_{k=1}^n \frac{1}{k^2} = \frac{\pi^2}{6} \end{displaymath}
Математический режим отличается от текстового режима. Например, в математическом режиме:
\textrm{...}
.
\begin{equation} \forall x \in \mathbf{R}: \qquad x^{2} \geq 0 \end{equation}
![]() |
(2) |
\begin{equation} x^{2} \geq 0\qquad \textrm{для всех }x\in \mathbf{R} \end{equation}
![]() |
(3) |
Математики бывают очень строги к используемым символам: здесь будет
удобно использовать `ажурные полужирные символы' , которые получаются командой
mathbb из пакетов
amsfonts или amssymb.
Последний пример теперь выглядит так:
\begin{displaymath} x^{2} \geq 0\qquad \textrm{для всех }x\in \mathbb{R} \end{displaymath}
![]() |
(4) |
Большинство команд математического режима действует только на
следующий символ. Так что, если вы хотите, чтобы команда влияла на
несколько символов, вам нужно сгруппировать их вместе при помощи
фигурных скобок: {...}
.
\begin{equation} a^x+y \neq a^{x+y} \end{equation}
![]() |
(5) |
В этом разделе будут описаны наиболее важные команды, используемые в математической верстке. Список всех доступных символов смотрите в разделе 3.9.
Строчные греческие буквы вводятся как \alpha
,
\beta
, \gamma
, ..., прописные буквы вводятся как
\Gamma
, \Delta
, ...17
$\lambda,\xi,\pi,\mu,% \Phi,\Omega$
Верхние и нижние индексы вводятся при помощи
символов <<
^
>>
и <<_
>>.
$a_{1}$ \qquad $x^{2}$ \qquad $e^{-\alpha t}$ \qquad $a^{3}_{ij}$\\ $e^{x^2} \neq {e^x}^2$
a1 x2
a3ij
Квадратный корень вводится как
sqrt, корень n-ной степени печатается при помощи
\sqrt[
n]
. Размер знака корня выбирается LATEX
автоматически. Если нужен один только знак, используйте \surd
.
$\sqrt{x}$ \qquad $\sqrt{ x^{2}+\sqrt{y} }$ \qquad $\sqrt[3]{2}$\\[3pt] $\surd[x^2 + y^2]$
Команды
overline и
underline создают горизонтальные
линии сразу над или под выражением.
$\overline{m+n}$
Команды
overbrace и
underbrace создают
длинные горизонтальные фигурные скобки сразу над или под
выражением.
$\underbrace{ a+b+\cdots% +z }_{26}$
Для добавления к переменным знаков
математических акцентов, таких, как маленькие стрелки или знака
тильда, вы можете пользоваться командами, перечисленным в
таблице. Широкие <<шляпки>> и тильды, охватывающие
несколько символов, генерируются командами
widetilde и
widehat. Символ <<
'
>> дает знак
производной. .
\begin{displaymath} y=x^{2}\qquad y'=2x \qquad y''=2 \end{displaymath}
Векторы часто указываются добавлением
маленьких стрелок стрелки над переменной. Это делается командой
vec. Для обозначения вектора от A до B полезны две команды
overrightarrow и
overleftarrow.
\begin{displaymath} \vec a\quad \overrightarrow{AB} \end{displaymath}
Имена функций типа
часто верстаются прямым шрифтом, а не
курсивом, как переменные. Поэтому LATEX содержит следующие команды
для набора имен наиболее важных функций:
\arccos \cos \csc \exp \ker \limsup \min \sinh \arcsin \cosh \deg \gcd \lg \ln \Pr \sup \arctan \cot \det \hom \lim \log \sec \tan \arg \coth \dim \inf \liminf \max \sin \tanh
\[\lim_{x \rightarrow 0} \frac{\sin x}{x}=1\]
Для функции модуля функция модуля есть две команды:
bmod для
бинарного оператора <<
>> и
pmod для выражений вроде
<<
>>.
Двухъярусная дробь верстается командой
frac
{...}{...}
. Часто предпочтительнее ее форма с косой
чертой 1/2, потому что она смотрится лучше при небольшом количестве
`дробного материала'.
$1\frac{1}{2}$~часа \begin{displaymath} \frac{ x^{2} }{ k+1 }\qquad x^{ \frac{2}{k+1} }\qquad x^{ 1/2 } \end{displaymath}
часа
Для верстки биноминальных коэффициентов или аналогичных структур можно
пользоваться или {...
choose
...}
, или
{...
atop
...}
. Вторая команда дает тот же вывод,
что и первая, но без скобок.
\begin{displaymath} {n \choose k}\qquad {x \atop y+2} \end{displaymath}
Оператор интеграла печатает
команда
int, оператор суммы --
команда
sum. Верхние и нижние пределы указываются при помощи
знаков <<
^
>> и <<_
>>, так же, как верхние и нижние
индексы.
\begin{displaymath} \sum_{i=1}^{n} \qquad \int_{0}^{\frac{\pi}{2}} \qquad \end{displaymath}
Для скобок и прочих
ограничителей в TEX существует множество
символов (скажем,
). Круглые и
квадратные скобки можно вводить соответствующими клавишами, фигурные
скобки --
\{
, прочие ограничители -- специальными командами
(например, \updownarrow
). Список доступных ограничителей
смотрите в таблице.
\begin{displaymath} {a,b,c}\neq\{a,b,c\} \end{displaymath}
Если вы поместите перед открывающим ограничителем команду
left,
или перед закрывающим --
right, то TEX автоматически выберет
правильный размер ограничителя. Заметьте, что вы должны каждый
left закрывать соответствующим
right. Если вы не хотите
ничего справа, используйте невидимый ограничитель
right..
\begin{displaymath} 1 + \left( \frac{1}{ 1-x^{2} } \right) ^3 \end{displaymath}
В некоторых случаях необходимо указать корректный размер
математического ограничителя
вручную, для этого есть команды
big,
Big,
bigg и
Bigg, служащие префиксами к большинству команд
ограничителей18.
$\Big( (x+1) (x-1) \Big) ^{2}$\\ $\big(\Big(\bigg(\Bigg($\quad $\big\}\Big\}\bigg\}\Bigg\}$\quad $\big\|\Big\|\bigg\|\Bigg\|$
Чтобы ввести в формулу три точки, есть несколько команд.
ldots верстает точки на базовой линии,
cdots --
центрированные. Кроме того, существуют команды
vdots для
вертикальных и
ddots для диагональных
точек.
В разделе 3.5 вы найдете другой пример.
\begin{displaymath} x_{1},\ldots,x_{n} \qquad x_{1}+\cdots+x_{n} \end{displaymath}
Если выбранные TEX пробелы внутри
формул неудовлетворительны, вы можете их подстраивать с использованием
команд управления пробелами. Команды для маленьких пробелов:
,
для
(0.166em),
:
для
(0.222em) и
;
для
(0.277em). Экранированный
символ пробела
\
дает средних размелов пробел, а
quad
(1em) и
qquad (2em) дают большие пробелы.
Размер
quad примерно соответствует ширине буквы `M' в текущем
шрифте. Команда
\!
"! производит отрицательный пробел
размером
(0.166em).
\newcommand{\ud}{\mathrm{d}} \begin{displaymath} \int\!\!\!\int_{D} g(x,y) \, \ud x\, \ud y \end{displaymath} вместо \begin{displaymath} \int\int_{D} g(x,y)\ud x \ud y \end{displaymath}
Заметьте, что `d' в дифференциале обычно верстается прямым шрифтом.
Для верстки матриц пользуйтесь окружением array. Его
работа напоминает окружение tabular. Для разрыва строки
используется команда \\
.
\begin{displaymath} \mathbf{X} = \left( \begin{array}{ccc} x_{11} & x_{12} & \ldots \\ x_{21} & x_{22} & \ldots \\ \vdots & \vdots & \ddots \end{array} \right) \end{displaymath}
Окружение array можно также использовать для верстки выражений,
имеющих один большой ограничитель, подставляя <<.
>> в качестве
невидимого правого ограничителя:
\begin{displaymath} y = \left\{ \begin{array}{ll} a & \textrm{если $d>c$}\\ b+x & \textrm{по утрам}\\ l & \textrm{остальное время дня} \end{array} \right. \end{displaymath}
Для формул, занимающих несколько строк или для систем
уравнений
вместо equation пользуйтесь окружениями eqnarray и
eqnarray*
. В eqnarray каждая строка получает отдельный
номер уравнения. В eqnarray*
номера не ставятся.
Окружения eqnarray и eqnarray*
работают наподобие таблицы
из трех столбцов формата {rcl}
, где средний столбец
используется для знака равенства, или знака неравенства, или другого
подходящего знака. Команда \\
разбивает строки.
\begin{eqnarray} f(x) & = & \cos x \\ f'(x) & = & -\sin x \\ \int_{0}^{x} f(y)dy & = & \sin x \end{eqnarray}
f(x) | = | ![]() |
(6) |
f'(x) | = | ![]() |
(7) |
![]() |
= | ![]() |
(8) |
Заметьте, что по обеим сторонам средней колонки, знаков
равенства, слишком много свободного места. Оно может быть уменьшено
установкой \setlength\arraycolsep{2pt}
, как в следующем
примере.
Длинные уравнения не будут автоматически разбиваться на правильные части. Автор должен указать, где их разбивать и насколько выравнивать. Чаще всего для этого используют следующие методы:
\setlength\arraycolsep{2pt} \begin{eqnarray} \sin x & = & x -\frac{x^{3}}{3!} +\frac{x^{5}}{5!}-{} \nonumber\\ & & {}-\frac{x^{7}}{7!}+{}\cdots \end{eqnarray}}
![]() |
= | ![]() |
|
![]() |
(9) |
\begin{eqnarray} \lefteqn{ \cos x = 1 -\frac{x^{2}}{2!} +{} } \nonumber\\ & & {}+\frac{x^{4}}{4!} -\frac{x^{6}}{6!}+{}\cdots \end{eqnarray}
![]() | |||
![]() |
(10) |
Команда
nonumber заставляет LATEX не генерировать
номер для этого уравнения.
Такими методами может быть сложно получить правильно выглядящие вертикально выровненные уравнения; более мощную альтернативу предоставляет пакет amsmath.
В математическом режиме TEX
выбирает размер шрифта в зависимости от контекста. Индексы, например,
верстаются меньшим шрифтом. Если вы хотите добавить к уравнению
обычный текст командой \textrm
, механизм переключения размера
работать не будет, так как \textrm
временно выходит в текстовый
режим. Чтобы оставить его работающим, используйте команду
\mathrm
19. Но имейте в виду,
mathrm будет хорошо
работать только с короткими элементами. Пробелы по-прежнему не активны
и акцентированные символы не работают20.
\begin{equation} 2^\textrm{nd} \quad 2^\mathrm{nd} \end{equation}
![]() |
(11) |
Все же иногда вам нужно указать LATEX корректный размер шрифта. В математическом режиме размер устанавливается четырьмя командами:
Смена стилей влияет также на способ изображения пределов.
\begin{displaymath} \mathop{\mathrm{corr}}(X,Y)= \frac{\displaystyle \sum_{i=1}^n(x_i-\overline x) (y_i-\overline y)} {\displaystyle\biggl[ \sum_{i=1}^n(x_i-\overline x)^2 \sum_{i=1}^n(y_i-\overline y)^2 \biggr]^{1/2}} \end{displaymath}
Это один из примеров, когда нам нужны скобки большие, чем
предоставляемые стандартными \left[ \right]
.
При написании математических документов, вам, вероятно, нужен способ верстки <<лемм>>, <<определений>>, <<аксиом>> и аналогичных структур. LATEX поддерживает это командами
newtheorem
{
название}[
счетчик]{
текст}[
раздел]
Аргумент название -- это краткое ключевое слово, используемое
для идентификации <<теоремы>>. Аргументом текст вы определяете
настоящее название <<теоремы>>, под которым она будет печататься в
документе.
Аргументы в квадратных скобках необязательны. Оба они используются для определения того, как нумеровать <<теорему>>. Аргументом счетчик вы может указать название предварительно объявленной <<теоремы>>. Новая <<теорема>> будет тогда нумероваться в той же последовательности. Аргумент раздел позволяет вам указать раздел, внутри которого вы хотите нумеровать вашу <<теорему>>.
После использования в преамбуле документа команды
newtheorem, вы
можете пользоваться следующими командами:
\begin{
название}[
текст]
Это интересная теорема.
\end{
название}
На этом теории должно быть достаточно. Дальнейшие примеры должны
развеять последнюю тень сомнений, и окончательно убедить вас, что
окружение \newtheorem
слишком сложно, чтобы его можно было
понять:
% определения для % преамбулы документа \newtheorem{law}{Law} \newtheorem{jury}[law]{Jury} % в теле документа \begin{law} \label{law:box} Don't hide in the witness box \end{law} \begin{jury}[The Twelve] It could be you! So beware and see law \ref{law:box}\end{jury} \begin{law}No, No, No\end{law}
Теорема <<Jury>> использует тот же счетчик, что и теорема <<Law>>. Следовательно, она получит номер в последовательности с другими теоремами <<Law>>. Аргумент в квадратных скобках указывает заголовок теоремы, или нечто аналогичное.
\flushleft \newtheorem{mur}{Murphy}[subsection] \begin{mur} Если существует два или более способа сделать нечто, и один их этих способов может привести к катастрофе, то кто-то обязательно это сделает. \end{mur}
Теорема <<Murphy>> получает номер, связанный с номером текущего раздела. Вы можете также использовать другую структурную единицу, например, главу или подраздел.
В LATEX довольно непросто получить жирные символы; это, вероятно,
сделано преднамеренно, потому что непрофессионалы слишком часто
злоупотребляют ими. Команда смены шрифта \mathbf
дает
полужирные символы, но они обычные (прямые), тогда как математические
символы обычно курсивные. Существует команда
boldmath, но
она может использоваться только вне математического режима. То
же относится и к символам.
\begin{displaymath} \mu, M \qquad \mathbf{M} \qquad \mbox{\boldmath $\mu, M$} \end{displaymath}
Заметьте, что запятая тоже полужирная, что может быть нежелательным.
Пакет amsbsy (включаемый пакетом amsmath) включает команду
boldsymbol, и команду <<полужирного для бедных>>
pmb21,
которая использует двухпроходную печать в системах без шрифтов,
требуемых для полужирных символов.
\begin{displaymath} \mu, M \qquad \boldsymbol{\mu}, \boldsymbol{M} \qquad \pmb{\mu}, \pmb{M} \end{displaymath}
В следующих таблицах вы найдете все символы, известные обычно в математическом режиме.
Для доступа к символам, перечисленным в
таблицах22 в преамбуле документа
должен быть загружен пакет amssymb, и в системе должны быть
установлены математические шрифты AMS. Если пакеты и шрифты AMS в
вашей системе не установлены, посмотрите на
CTAN:macros/latex/packages/amslatex
Окружения figure и table обеспечивают базовые средства работы с плавающими объектами, такими, как изображения или графики.
Существует также несколько способов создавать собственно графику средствами базового LATEX или его расширений. К сожалению, большинство пользователей находит их трудными для понимания. Дополнительная информация приведена в [3] и в [1].
Более простой метод получения графики в документе -- это создавать ее специализированными программными пакетами23 и включать в документ готовую графику. Пакеты LATEX предлагают множество способов это делать. В этом введении обсуждается только использование графики в формате Encapsulated POSTSCRIPT (EPS), поскольку это довольно просто делается и широко распространено. Чтобы использовать картинки в формате EPS, вам нужно использовать для вывода POSTSCRIPT принтер24.
Хороший набор команд включения графики входит в пакет graphicx (автор D. P. Carlisle). Он является частью целого семейства пакетов, называющегося комплектом ``graphics''25.
В предположении, что вы работаете в системе с доступным для вывода POSTSCRIPT принтером, и с установленным пакетом graphicx, для включения картинки в ваш документ можете использовать следующую пошаговую инструкцию:
\usepackage[
драйвер]{graphicx}
где драйвер -- это название вашего конвертера DVI в
POSTSCRIPT. Самый широко используемый называется
dvips. Название драйвера требуется потому, что не существует
стандарта включения графики в TEX. Зная название драйвера,
graphicx может выбрать правильный способ вставить информацию о
графике в .dvi файл так, чтобы драйвер ее понял и смог
корректно вставить .eps файл.
[
ключ=значение, ...]{
файл}
Необязательный параметр принимает вид списка разделенных запятыми пар
ключей и соответствующих значений. Ключи можно
использовать для изменения ширины, высоты, поворота включаемой
графики. Таблица перечисляет самые важные ключи.
Возможно, пример сделает это понятнее:
\begin{figure} \begin{center} \includegraphics[angle=90, width=0.5\textwidth]{test.eps} \end{center} \end{figure}
Здесь включается графика, записанная в файл test.eps. Она сначала поворачивается на 90 градусов и затем масштабируется до конечной ширины в 0.5 ширины стандартного абзаца. Пропорции сохраняются, поскольку не указано конкретной высоты. Параметры высоты и ширины могут также быть указаны в абсолютных размерах. Обратитесь к таблице на. Если вы хотите знать об этом больше, прочтите [8] и [11].
Окружение thebibliography генерирует библиографию. Каждый элемент начинается с
bibitem
{
маркер}
Затем маркер используется для дальнейших ссылок на книгу,
статью или труд.
cite
{
маркер}
Элементы библиографии нумеруются автоматически. Параметр после команды
\begin{thebibliography}
устанавливает максимальную ширину этих
номеров.
{Partl}~\cite{pa} {предложил, чтобы} {\ldots} \begin{thebibliography}{99} \bibitem{pa} H.~Partl: \emph{German \TeX}, TUGboat Vol.~9, No.~1 ('88) \end{thebibliography}
Partl [1] предложил,
чтобы ...
Для использования в больших проектах обратите внимание на программу BibTEX. Она входит в большинство поставок TEX. BibTEX позволяет вам поддерживать библиографическую базу данных и извлекать из нее ссылки, имеющие отношение к тому, что вы цитировали в вашем труде. Визуальное представление библиографий, генерируемых BibTEX, основано на концепции стилей, что позволяет вам создавать библиографии, следуя любому из существующих стилей библиографии.
Полезной особенностью многих книг является их предметный указатель . Указатели могут создаваться автоматически при помощи LATEX и сопровождающей программы makeindex26. В этом введении будут изложены только базовые команды генерации указателя. Более глубокое изложение смотрите в [3].
Для включения возможностей LATEX в преамбуле должен загружаться
пакет makeidx:
\usepackage{makeidx}
а специальные команды должны быть разрешены помещением в
преамбулу команды
makeindex
Содержимое указателя создается командами
index
{
ключ}
где ключ является элементом указателя. Вы вводите
команды указателя в том месте текста, куда этот элемент должен
указывать. Таблица объясняет синтаксис аргумента
ключ несколькими примерами.
Пример | Вид указателя | Комментарий |
---|---|---|
\index{hello} |
hello, 1 | Обычный элемент |
\index{hello!Peter} |
Peter, 3 | Подчиненный `hello' элемент |
\index{Sam@\textsl{Sam}} |
Sam, 2 | Форматированный ключ |
\index{Lin@\textbf{Lin}} |
Lin, 7 | То же |
\index{Jenny|textbf} |
Jenny, 3 | Форматированная страница |
\index{Joe|textit} |
Joe, 5 | То же |
По мере обработки входного файла LATEX, каждая команда
\index
записывает соответствующий элемент указателя вместе с
номером текущей страницы в специальный файл. Файл имеет то же имя, что
и входной файл LATEX, но другое расширение имени
(.idx
). Если теперь повторно обработать входной файл, этот
отсортированный указатель включается в документ в то место, где
LATEX находит команду
printindex
Пакет showidx, входящий в LATEX2e, печатает все элементы указателя на левом поле текста. Это весьма полезно при проверке текста и сверке указателя.
Пакет fancyhdr27, написанный Piet van Oostrum, предоставляет несколько простых команд, позволяющих вам настраивать верхние и нижние колонтитулы документа. Если вы сейчас взглянете на верх этой страницы, то увидите одно их возможных применений этого пакета.
Рис 4.1: Пример настройки fancyhdr
\documentclass{book} \usepackage{fancyhdr} \pagestyle{fancy} % этим мы убеждаемся, что заголовки глав и % разделов используют нижний регистр. \renewcommand{\chaptermark}[1]{\markboth{#1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} \fancyhf{} % убираем текущие установки для колонтитулов \fancyhead[LE,RO]{\bfseries\thepage} \fancyhead[LO]{\bfseries\rightmark} \fancyhead[RE]{\bfseries\leftmark} \renewcommand{\headrulewidth}{0.5pt} \renewcommand{\footrulewidth}{0pt} \addtolength{\headheight}{0.5pt} % оставляем место для линейки \fancypagestyle{plain}{% \fancyhead{} % на обычных страницах убираем колонтитулы \renewcommand{\headrulewidth}{0pt} % и линейку }
Сложность в настройке колонтитулов в том, чтобы включить туда вещи
вроде заголовков раздела или главы. LATEX достигает этого в два
этапа. В определениях колонтитулов можно использовать команды
rightmark и
leftmark, представляющих заголовки текущей
главы и раздела, соответственно. Значения этих двух команд меняются
при обработке команд chapter или section.
Для большей гибкости команды
chapter и ей подобные не
переопределяют
rightmark и
leftmark сами, а вызывают еще
одну команду, называющуюся
chaptermark,
sectionmark или
subsectionmark, ответственную за переопределение
rightmark
и
leftmark.
Так что, если вы хотите изменить вид названия главы в верхнем
колонтитуле, вы просто переопределяете команду
chaptermark.
sectionmark
subsectionmark
Рисунок показывает, как можно настроить пакет fancyhdr так, чтобы колонтитулы выглядели почти так, как они выглядят у этого буклета. В любом случае вам рекомендуется ознакомиться с документацией к пакету по адресу, упомянутому в сноске.
Ранее в этом введении вы познакомились с окружением verbatim. В этом разделе вы узнаете про пакет verbatim. Пакет verbatim представляет из себя повторную реализацию окружения verbatim с исправлением некоторых его ограничений. Само по себе это не замечательно28, но, кроме того, в него была добавлена некоторая функциональность, и вот почему пакет здесь упоминается. Пакет verbatim предоставляет команду
verbatiminput
{
файл}
которая позволяет вам включать текстовый файл в ваш документ, как если бы его содержимое находилось внутри окружения verbatim.
Так как пакет verbatim входит в комплект `tools', вы найдете его установленным на большинстве систем. Если вы хотите узнать о нем больше, обязательно прочитайте [9].
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Произведенные с использованием изученных до сих пор команд документы будут выглядеть вполне приемлемо для широкой аудитории. Они не выглядят очень модно, подчиняясь зато всем правилам хорошего тона в наборе, поэтому их легко читать и на них приятно смотреть. Но бывают ситуации, в которых LATEX не предоставляет команду или окружение, удовлетворяющие вашим ожиданиям, или производимый некоторой существующей командой вывод не отвечает вашим требованиям. В этой главе даются некоторые советы по обучению LATEX новым вещам, и тому, как сделать его вывод отличающимся от того, что производится по умолчанию.
Как вы заметили, все вводимые в этой книге команды верстаются в рамке и включаются в указатель в конце книги. Вместо того, чтобы напрямую использовать необходимые для этого команды LATEX, автор создал пакет, в котором определил новые команды и окружения для этой цели. Теперь можно просто писать:
\ci{dum}
dum
В этом примере используются как новое окружение, называющееся
command и отвечающее за рисование рамки вокруг команды, так и
новая команда, называющаяся
ci и верстающая название команды и
заносящая соответствующий элемент в указатель. Вы можете в этом
убедиться, поискав команду
dum в указателе в конце книги, где вы
найдете запись для
dum, указывающую на эту страницу.
Если автор когда-нибудь решит, что ему не нравятся больше команды, сверстанные в рамке, он просто изменит определение окружения command. Это намного проще, чем пройти по всему документу, выискивая все места, где использованы общие команды LATEX для рисования рамки вокруг слов.
Чтобы добавить ваши собственные команды, пользуйтесь командой
newcommand
{
название}[
число]{
определение}
Обычно эта команда требует двух аргументов. Название команды, которую вы создаете, и определение команды. Аргумент число в квадратных скобках не обязателен. Он применяется для создания новых команды, которые, в свою очередь, принимают до 9 аргументов.
Следующие два примера должны вам помочь получить представление о
команде. Первый пример определяет новую команду, называющуюся
tnss, что является сокращением от ``The Not So Short Introduction
to LATEX2e''. Такая команда пригодится, если вам много раз приходится
писать название этой книги.
\newcommand{\tnss}{The not so Short Introduction to \LaTeXe} % в теле документа: ``\tnss'' \ldots{} ``\tnss''
``The not so Short Introduction to LATEX2e'' ... ``The not so Short Introduction to LATEX2e''
Следующий пример иллюстрирует использование аргумента
число. Метка #1
заменяется на заданный аргумент. Если вы
хотите использовать более одного аргумента, пользуйтесь #2
, и
так далее.
\newcommand{\txsit}[1] {The \emph{#1} краткое введение в \LaTeXe} % в теле документа \begin{itemize} \item \txsit{\Rus Не очень} \item \txsit{\Rus Очень} \end{itemize}
LATEX не позволит вам создать новую команду, которая бы изменяла
уже существующую. Но для случая, когда вы явно хотите изменить
существующую команду, есть специальная команда:
renewcommand. Она
имеет тот же синтаксис, что и команда
\newcommand
.
В некоторых случаях может пригодиться команда
providecommand. Она
работает так же, как
newcommand, но, если команда уже определена,
то LATEX2e ее молча проигнорирует.
Аналогично команде \newcommand
, существует команда для создания
вашего собственного окружения. Команда
newenvironment имеет
следующий синтаксис:
newenvironment
{
название}[
номер]{
начало}{
конец}
Подобно команде \newcommand
,
newenvironment можно
использовать с необязательным аргументом, или без него. Материал,
заключенный в аргумент начало, обрабатывается до обработки
текста внутри окружения. Материал, заключенный в аргумент
конец, обрабатывается, когда встречается команда
\end{
название}
. Следующий пример иллюстрирует
использование команды
newenvironment.
\newenvironment{king} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{king} Мои смиренные подданные\ldots \end{king}
Мои смиренные подданные...
Аргумент номер используют так же, как и для команды
\newcommand
. LATEX контролирует, чтобы вы не определяли уже
существующее окружение. Если вы заходите все же это сделать,
пользуйтесь командой
renewenvironment. Она имеет тот же
синтаксис, что ли
newenvironment.
Команды, использованные в этом примере, будут разъяснены позже.
Когда вы определяете множество новых окружений и команд, преамбулы
ваших документов становятся очень большими. В этой ситуации
представляется разумным создать пакет LATEX, содержащий определения
всех ваших команд и окружений. Потом можно командой
usepackage
использовать пакет в ваших документах.
% Пакет для демонстрации. Tobias Oetiker. \ProvidesPackage{demopack} \newcommand{\tnss}{Не очень краткое введение в \LaTeXe} \newcommand{\txsit}[1]{\emph{#1} краткое введение в \LaTeXe} \newenvironment{king}{\begin{quote}}{\end{quote}}
Создание пакета в основном состоит из переноса содержимого вашей преамбулы в отдельный файл с именем, заканчивающимся на .sty. Есть только одна специальная команда, которую вы должны использовать
ProvidesPackage
{
название пакета}
в самом начале файла с вашим
пакетом. \ProvidesPackage
указывает LATEX название пакета,
что позволяет ему выдавать осмысленное сообщение об ошибке, когда вы
пытаетесь включать пакет дважды. Иллюстрация показывает
маленький пример пакета, содержащего определенные в вышеприведенных
примерах команды.
LATEX выбирает подходящее начертание и размер шрифта, основываясь на логической структуре документа (разделы, сноски, ...). Иногда может быть желательно сменить шрифт вручную. Для этого вы можете пользоваться командами, перечисленными в таблицах. Действительный размер каждого шрифта определяется дизайном и зависит от класса и опций документа. Таблица показывает абсолютные размеры, соответствующие этим командам в стандартных классах документов.
{\small Маленький, \textbf{полужирный}, \Large большой, \textit{курсив}.}
Маленький, полужирный, большой, курсив.
Важная особенность LATEX2e заключается в том, что атрибуты шрифта независимы. Это значит, что вы можете давать команды смены размера или даже семейства шрифта, сохраняя при этом установки атрибутов наклона или насыщенности.
В математическом режиме вы можете использовать команды смены шрифта, чтобы временно выйти из математического режима и ввести нормальный текст. Если вы хотите переключиться на другой шрифт для верстки математики, то для этого существует отдельный набор команд. Смотрите таблицу.
В связи с командами смены размера шрифта заметную роль играют фигурные скобки. Они используются для построения групп. Группы ограничивают область действия большинства команд LATEX.
Ему нравятся {\LARGE большие и {\small маленькие} буквы}.
Ему нравятся большие и маленькие буквы.
Команды, влияющие на размер шрифта, влияют также на расстояние между
строками, но только если соответствующий абзац заканчивается внутри
области действия команды. Поэтому закрывающая фигурная скобка }
не должна стоять слишком рано. Заметьте положение команды \par
в следующих двух примерах:
{\Large Не читайте это! Это неправда. Верьте мне!\par} %\end{example}
Не читайте это! Это неправда. Верьте мне!
{\Large Это тоже неправда. Но помните, что я вру.}\par
Это тоже неправда. Но помните, что я вру.
Если вы хотите применить команду изменения размера к целому абзацу текста или больше того, то для этого лучше использовать синтаксис окружения.
\begin{Large} Это неправда. Но что в наши дни\ldots \end{Large}
Это неправда. Но что в наши дни...
Это избавит вас от подсчета множества фигурных скобок.
Как отмечено в начале этой главы, опасно усеивать ваши документы
явными командами, вроде только что описанных, потому что это
противоречит основной идее LATEX: разделению логической и
визуальной разметки вашего документа. Это значит, что, если вы
пользуетесь одними и теми же командами смены шрифта в разных местах
для верстки специального вида информации, вы должны использовать
\newcommand
и определить команду, <<оборачивающую>> в себя
команду смены шрифта.
% в преамбуле или пакете \newcommand{\danger}[1]{\textbf{#1}} % в документе Не \danger{входите} в эту комнату. Она занята \danger{машиной} неизвестного назначения.
Не входите в эту комнату. Она занята машиной неизвестного назначения.
Этот подход имеет то преимущество, что вы позже можете решить, что
хотите использовать другое визуальное представление
опасности29, нежели
\textbf
, без необходимости пробираться через весь документ,
отыскивая все вхождения \textbf
и определяя, отмечает ли каждое
из них опасность или что-нибудь другое.
Для завершения нашего путешествия в мир шрифтов и их размеров, позвольте дать вам один совет:
Помните! Чем БОЛЬШЕ шрифтов вы используете в вашем документе, тем легче его читать и тем красивее он будет30.
Если вам нужны большие интервалы между строками, то их значение можно изменить помещением в преамбулу команды
linespread
{
коэффициент}
Для печати <<через полтора интервала>> пользуйтесь
\linespread{1.3}
, для печати <<через два интервала>> --
\linespread{1.6}
. По умолчанию этот коэффициент
равен 1.
Два параметра в LATEX влияют на верстку абзацев. Поместив в преамбулу определения вида
setlength
{
parindent}{0pt}
\setlength{
parskip}{1ex plus 0.5ex minus 0.2ex}
вы измените внешний вид абзацев. Эти две строчки увеличивают
расстояние между абзацами и устанавливают абзацный отступ равным
нулю. В Европе абзацы часто отделяют пробелами и не делают в них
отступа. Однако, имейте в виду, что это влияет также и на оглавление:
его строки тоже становятся теперь более разреженными. Чтобы этого
избежать, эти команды можно перенести из преамбулы документа
куда-нибудь после \tableofcontents
, или не использовать их
совсем, потому что в профессиональной книжной верстке используется
выделение абзацев красной строкой, а не пробелами.
Если вы хотите сделать абзацный отступ в не имеющем его абзаце, то
вставьте в начало абзаца команду31
indent
Понятно, что эффект от нее будет только если
\parindent
не установлен равным нулю.
Для создания абзаца без отступа первой командой абзаца можно сделать
noindent
Это может быть удобно, когда вы начинаете документ с текста,
а не с команды секционирования.
LATEX автоматически определяет пробелы между словами и предложениями. Чтобы добавить горизонтальный пробел , пользуйтесь
hspace
{
длина}
Если такой интервал должен быть выдержан, даже если он приходится на
начало или конец строки, используйте \hspace*
, а не
\hspace
. В простейшем случае длина -- это просто число
и единица измерения. Наиболее важные единицы перечислены в
таблице.
Тут\hspace{1.5cm}пробел в 1,5см.
Тут пробел в 1,5см.
Команда
stretch
{
n}
генерирует специальный <<резиновый>> пробел. Он
растягивается, заполняя все оставшееся места на строке. Если на одной
строке встречаются две команды
\hspace{\stretch{
n}}
, то они растягиваются
пропорционально своим коэффициентам.
x\hspace{\stretch{1}} x\hspace{\stretch{3}}x
x x x
Интервалы между абзацами, разделами, подразделами, ... определяются LATEX автоматически. При необходимости дополнительный пробел между двумя абзацами можно добавить командой
vspace
{
длина}
Обычно эта команда вставляется между двумя пустыми строчками. Если это
пространство должно сохраняться вверху или внизу страницы, используйте
вариант команды со звездочкой: \vspace*
.
Команду \stretch
вместе с \pagebreak
можно применять для
верстки текста на последней строке страницы или для вертикального
центрирования текста на странице.
Некий текст\ldots \vspace{\stretch{1}} А это окажется на последней строке страницы.\pagebreak
Дополнительный пробел между двумя строками одного абзаца или внутри таблицы указывается командой
[
длина]
ПОДОЖДИТЕ! ...прежде, чем немедленно броситься делать эту слишком узкую страницу слегка пошире, потратьте несколько секунд на размышления. Подобно другим вещам, выбор компоновки страницы в LATEX весьма продуман.
Безусловно, если сравнить со страницей, выданной свежеустановленным MS Word, то страницы LATEX выглядят ужасно узкими. Однако, взгляните на вашу любимую книгу32 и посчитайте количество букв на одной строчке. Вы обнаружите, что на каждой строчке не больше 66 букв. Теперь повторите это со страницей LATEX. Вы увидите, что и здесь тоже около 66 букв в строке. Опыт показывает, что при большем количестве букв чтение затрудняется, потому, что глазам становится труднее переходить от конца одной строки к началу следующей. Именно поэтому газеты часто верстаются в несколько колонок.
Так что, увеличивая ширину вашего текста, имейте в виду, что вы затрудняете жизнь его читателям. Однако, достаточно предупреждений, вам был обещан рассказ о том, как же это сделать...
LATEX предоставляет две команды для изменения этих параметров. Их обычно используют в преамбуле документа.
Первая команда присваивает фиксированное значение любому параметру:
setlength
{
параметр}{
длина}
Вторая команда прибавляет длину к любому параметру:
addtolength
{
параметр}{
длина}
Она даже более полезна, чем
setlength, потому что позволяет вам
делать настройку относительно существующих установок. Чтобы добавить
сантиметр к общей ширине текста, например, в преамбулу нужно поместить
следующее:
\addtolength{\hoffset}{-0.5cm}
\addtolength{\textwidth}{1cm}
Здесь вам может быть интересен пакет calc, который позволяет
использовать арифметические операции в аргументе \setlength
и в
других местах, где аргументами являются численные значения.
Всегда, когда это возможно, избегайте использовать в документах
абсолютных величин. Лучше основывайтесь на ширине или высоте других
элементов страницы. Для ширины иллюстрации этим может служить
\textwidth
, чтобы она заполняла страницу целиком.
Следующие три команды позволяют определить ширину, высоту и глубину текстовой строки.
settoheight
{
команда}{
текст}
settodepth
{
команда}{
текст}
settowidth
{
команда}{
текст}
Нижеследующий пример показывает возможное применение этих команд.
\flushleft \newenvironment{vardesc}[1]{% \settowidth{\parindent}{#1:\ } \makebox[0pt][r]{#1:\ }}{} \begin{displaymath} a^2+b^2=c^2 \end{displaymath} \begin{vardesc}{Где}$a$, $b$ -- прилегают к прямому углу прямоугольного треугольника. $c$ -- одинокая гипотенуза этого треугольника. $d$ -- вообще тут не участвует. Вот загадка\ldots \end{vardesc}
Где: a, b - прилегают к прямому углу прямоугольного треугольника.
c - одинокая гипотенуза этого треугольника.
d - вообще тут не участвует. Вот загадка...
LATEX выстраивает страницы, передвигая блоки. Сначала каждая буква является маленьким блоком, который приклеивается к другим буквам, формируя слово. Слова склеиваются с другими словами, но специальным эластичным клеем, который может растягиваться или сжиматься, так, чтобы в точности заполнить строку.
Надо признать, что это довольно упрощенная версия того, что происходит на самом деле, но идея в том, что TEX всегда работает с блоками и клеем. Не только буква может быть блоком. Вы можете поместить в блок практически все, что угодно, не исключая и другие блоки. Каждый блок затем обрабатывается LATEX, как если бы это была отдельная буква.
В предыдущих главах вы уже встречали некоторые блоки, хотя об этом и
не говорилось. Примерами могут быть окружение tabular или
includegraphics, оба производящие блок. Это значит, что вы легко
можете сверстать рядом две таблицы или иллюстрации. Только убедитесь,
что их общая ширина не превышает
\textwidth
.
Вы также можете упаковать любой абзац в блок или командой
parbox
[
поз]{
ширина}{
текст}
или окружением
\begin{
minipage}[
поз]{
ширина}
текст
\end{
minipage}
Параметр поз может принимать одну из букв c, t или b, контролируя вертикальное выравнивание блока по отношению к базовой линии окружающего текста. Ширина принимает аргументом длину, определяющую ширину блока.
В то время, как
parbox упаковывает целый абзац, разбивая строчки
и прочее, существует класс блоковых команд, работающих только на
горизонтально расположенном материале. Одну из них мы уже знаем. Она
называется
mbox и просто упаковывает последовательность блоков,
что можно использовать для предотвращения переноса LATEX двух
слов. Так как вы можете помещать одни блоки в другие, эти упаковщики
горизонтальных блоков чрезвычайно гибки.
makebox
[
ширина][
поз]{
текст}
Ширина определяет ширину результирующего блока так,
как его видно снаружи33. Кроме выражений
длины, вы тут можете использовать
width,
height,
depth
и
totalheight. Они устанавливаются равными значениям, полученным
измерением параметров текста.34 Параметр поз
принимает однобуквенное значение: c: центрировать,
l: отжать влево, r: отжать вправо или s:
равномерно заполнить блок текстом.
Команда
framebox работает в точности так же, как
makebox, но
рисует рамку вокруг текста.
Следующий пример показывает некоторые возможности использования команд
makebox и
framebox.
\makebox[\textwidth]{% ц е н т р}\par \makebox[\textwidth][s]{% р а с т я н у т ы й}\par \framebox[1.1\width]{Я теперь в рамке!} \par \framebox[0.8\width][r]{Ой, я слишком толстый} \par \framebox[1cm][l]{ничего, я тоже} Можете это прочитать?
ц е н т р
р а с т я н у т ы й
Можете это прочитать?
Теперь, когда мы управляем горизонталью, очевидный следующий шаг -- вертикаль. Никаких проблем. Команда
raisebox
{
сдвиг}[
глубина][
высота]{
текст}
позволяет вам определить вертикальные характеристики
блока. В первых трех параметров можно использовать
width,
height,
depth и
totalwidth, чтобы получить размеры
аргумента текст.
\raisebox{0pt}[0pt][0pt]{\Large% \textbf{Aaaa\raisebox{-0.3ex}{a}% \raisebox{-0.7ex}{aa}% \raisebox{-1.2ex}{a}% \raisebox{-2.2ex}{a}% \raisebox{-4.5ex}{a}}} кричал он, но даже стоящий рядом не заметил, что с ней случилось что-то ужасное.
[0pt][0pt] Aaaaa aa a a a кричал он, но даже стоящий рядом не заметил, что с ней случилось что-то ужасное.
Несколько страниц назад вы могли отметить команду
rule
[
сдвиг]{
ширина}{
высота}
При обычном использовании она генерирует простой черный блок.
\rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt}
Это можно использовать для рисования вертикальных и
горизонтальных линий. Например, линия на титульном листе нарисована
командой
rule.
Специальным случаем является линейка, у которой нет ширины, но есть определенная высота. В профессиональной верстке ее называют распоркой . Ее используют, чтобы обеспечить фиксированную высоту элемента страницы. Вы можете использовать ее, чтобы сделать строку окружения tabular имеющей определенную высоту.
\begin{tabular}{|c|} \hline \rule{0pt}{4ex}Pittprop \ldots\\ \hline \rule{0pt}{4ex}Strut\\ \hline \end{tabular}
Pittprop ... |
Strut |