next up previous
Next: Литература Up: No Title Previous: Литература

Подсекция

5. Настройка LATEX

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

5.1 Новые команды, окружения и пакеты

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

\ci{dum}

$\backslash$dum

В этом примере используются как новое окружение, называющееся command и отвечающее за рисование рамки вокруг команды, так и новая команда, называющаяся $\backslash$ci и верстающая название команды и заносящая соответствующий элемент в указатель. Вы можете в этом убедиться, поискав команду $\backslash$dum в указателе в конце книги, где вы найдете запись для $\backslash$dum, указывающую на эту страницу.

Если автор когда-нибудь решит, что ему не нравятся больше команды, сверстанные в рамке, он просто изменит определение окружения command. Это намного проще, чем пройти по всему документу, выискивая все места, где использованы общие команды LATEX для рисования рамки вокруг слов.

5.1.1 Новые команды

Чтобы добавить ваши собственные команды, пользуйтесь командой

$\backslash$newcommand{ название}[число]{определение}

Обычно эта команда требует двух аргументов. Название команды, которую вы создаете, и определение команды. Аргумент число в квадратных скобках не обязателен. Он применяется для создания новых команды, которые, в свою очередь, принимают до 9 аргументов.

Следующие два примера должны вам помочь получить представление о команде. Первый пример определяет новую команду, называющуюся $\backslash$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 не позволит вам создать новую команду, которая бы изменяла уже существующую. Но для случая, когда вы явно хотите изменить существующую команду, есть специальная команда: $\backslash$renewcommand. Она имеет тот же синтаксис, что и команда \newcommand.

В некоторых случаях может пригодиться команда $\backslash$providecommand. Она работает так же, как $\backslash$newcommand, но, если команда уже определена, то LATEX2e ее молча проигнорирует.

5.1.2 Новые окружения

Аналогично команде \newcommand, существует команда для создания вашего собственного окружения. Команда $\backslash$newenvironment имеет следующий синтаксис:

$\backslash$newenvironment{ название}[номер]{ начало}{конец}

Подобно команде \newcommand, $\backslash$newenvironment можно использовать с необязательным аргументом, или без него. Материал, заключенный в аргумент начало, обрабатывается до обработки текста внутри окружения. Материал, заключенный в аргумент конец, обрабатывается, когда встречается команда \end{название}. Следующий пример иллюстрирует использование команды $\backslash$newenvironment.

\newenvironment{king} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{king} Мои смиренные подданные\ldots \end{king}

Мои смиренные подданные...

Аргумент номер используют так же, как и для команды \newcommand. LATEX контролирует, чтобы вы не определяли уже существующее окружение. Если вы заходите все же это сделать, пользуйтесь командой $\backslash$renewenvironment. Она имеет тот же синтаксис, что ли $\backslash$newenvironment.

Команды, использованные в этом примере, будут разъяснены позже.

5.1.3 Ваш собственный пакет

Когда вы определяете множество новых окружений и команд, преамбулы ваших документов становятся очень большими. В этой ситуации представляется разумным создать пакет LATEX, содержащий определения всех ваших команд и окружений. Потом можно командой $\backslash$usepackage использовать пакет в ваших документах.

Пример пакета  

% Пакет для демонстрации. Tobias Oetiker. \ProvidesPackage{demopack} \newcommand{\tnss}{Не очень краткое введение в \LaTeXe} \newcommand{\txsit}[1]{\emph{#1} краткое введение в \LaTeXe} \newenvironment{king}{\begin{quote}}{\end{quote}}

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

$\backslash$ProvidesPackage{название пакета} в самом начале файла с вашим пакетом. \ProvidesPackage указывает LATEX название пакета, что позволяет ему выдавать осмысленное сообщение об ошибке, когда вы пытаетесь включать пакет дважды. Иллюстрация показывает маленький пример пакета, содержащего определенные в вышеприведенных примерах команды.

5.2 Шрифты и их размеры

5.2.1 Команды смены шрифта

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

{\small Маленький, \textbf{полужирный}, \Large большой, \textit{курсив}.}

Маленький, полужирный, большой, курсив.

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

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


 
Таб.: Шрифты
 
\begin{lined}{12cm}
\begin{tabular}{@{}rl@{\qquad}rl@{}}
\ci{\Eng textrm}\verb*\...
...erb*\vert{...}\vert & \textnormal{обычный}
\end{tabular}\par\bigskip
\end{lined}


 
Таб.: Размеры шрифта
   
\begin{lined}{12cm}
\begin{tabular}{@{}ll}
\ci{\Eng tiny} & \tiny крошечный \\
...
... \\ [5pt]
\ci{\Eng Huge} & \Huge громадный
\end{tabular}\par\bigskip
\end{lined}


 
Таб.: Абсолютные размеры шрифтов в стандартных классах
  
\begin{lined}{12cm}
\begin{tabular}{lrrr}
\multicolumn{1}{c}{\textit{Размер}} &
...
...ert & \Eng 25pt & \Eng 25pt & \Eng 25pt\\
\end{tabular}\par\bigskip
\end{lined}


 
Таб.: Математические шрифты
 
\begin{lined}{\textwidth}
\begin{tabular}{@{}lll@{}}
\textit{Команда}&\textit{Пр...
...{ffi}\neq ffi$\vert& $\mathit{ffi}\neq ffi$\end{tabular}\par\bigskip
\end{lined}

В связи с командами смены размера шрифта заметную роль играют фигурные скобки. Они используются для построения групп. Группы ограничивают область действия большинства команд LATEX. 

Ему нравятся {\LARGE большие и {\small маленькие} буквы}.

Ему нравятся большие и маленькие буквы.

Команды, влияющие на размер шрифта, влияют также на расстояние между строками, но только если соответствующий абзац заканчивается внутри области действия команды. Поэтому закрывающая фигурная скобка } не должна стоять слишком рано. Заметьте положение команды \par в следующих двух примерах:

{\Large Не читайте это! Это неправда. Верьте мне!\par} %\end{example}

Не читайте это! Это неправда. Верьте мне!

{\Large Это тоже неправда. Но помните, что я вру.}\par

Это тоже неправда. Но помните, что я вру.

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

\begin{Large} Это неправда. Но что в наши дни\ldots \end{Large}

Это неправда. Но что в наши дни...

Это избавит вас от подсчета множества фигурных скобок.

5.2.2 Опасность

Как отмечено в начале этой главы, опасно усеивать ваши документы явными командами, вроде только что описанных, потому что это противоречит основной идее LATEX: разделению логической и визуальной разметки вашего документа. Это значит, что, если вы пользуетесь одними и теми же командами смены шрифта в разных местах для верстки специального вида информации, вы должны использовать \newcommand и определить команду, <<оборачивающую>> в себя команду смены шрифта.

% в преамбуле или пакете \newcommand{\danger}[1]{\textbf{#1}} % в документе Не \danger{входите} в эту комнату. Она занята \danger{машиной} неизвестного назначения.

Не входите в эту комнату. Она занята машиной неизвестного назначения.

Этот подход имеет то преимущество, что вы позже можете решить, что хотите использовать другое визуальное представление опасности29, нежели \textbf, без необходимости пробираться через весь документ, отыскивая все вхождения \textbf и определяя, отмечает ли каждое из них опасность или что-нибудь другое.

5.2.3 Совет

Для завершения нашего путешествия в мир шрифтов и их размеров, позвольте дать вам один совет:

Помните! Чем БОЛЬШЕ шрифтов вы используете в вашем документе, тем легче его читать и тем красивее он будет30.

5.3 Интервалы

5.3.1 Интервалы между строками

Если вам нужны большие интервалы между строками, то их значение можно изменить помещением в преамбулу команды

$\backslash$linespread{коэффициент} Для печати <<через полтора интервала>> пользуйтесь \linespread{1.3}, для печати <<через два интервала>> -- \linespread{1.6}. По умолчанию этот коэффициент равен 1. 

  
5.3.2 Форматирование абзацев

Два параметра в LATEX влияют на верстку абзацев. Поместив в преамбулу определения вида

$\backslash$setlength{parindent}{0pt}
\setlength{parskip}{1ex plus 0.5ex minus 0.2ex}

вы измените внешний вид абзацев. Эти две строчки увеличивают расстояние между абзацами и устанавливают абзацный отступ равным нулю. В Европе абзацы часто отделяют пробелами и не делают в них отступа. Однако, имейте в виду, что это влияет также и на оглавление: его строки тоже становятся теперь более разреженными. Чтобы этого избежать, эти команды можно перенести из преамбулы документа куда-нибудь после \tableofcontents, или не использовать их совсем, потому что в профессиональной книжной верстке используется выделение абзацев красной строкой, а не пробелами.

Если вы хотите сделать абзацный отступ в не имеющем его абзаце, то вставьте в начало абзаца команду31 $\backslash$indent Понятно, что эффект от нее будет только если \parindent не установлен равным нулю.

Для создания абзаца без отступа первой командой абзаца можно сделать

$\backslash$noindent Это может быть удобно, когда вы начинаете документ с текста, а не с команды секционирования.

5.3.3 Горизонтальные интервалы

 LATEX автоматически определяет пробелы между словами и предложениями. Чтобы добавить горизонтальный пробел , пользуйтесь

$\backslash$hspace{длина} Если такой интервал должен быть выдержан, даже если он приходится на начало или конец строки, используйте \hspace*, а не \hspace. В простейшем случае длина -- это просто число и единица измерения. Наиболее важные единицы перечислены в таблице.   

Тут\hspace{1.5cm}пробел в 1,5см.

Тут пробел в 1,5см.


 
Таб.: Единицы размерности в TEX
   \begin{lined}{9.5cm}
\begin{tabular}{@{}ll@{}}
\texttt{\Eng mm} & миллиметр $\a...
... x' \Rus текущего шрифта \quad \demowidth{1ex}
\end{tabular}\bigskip
\end{lined}

 

Команда $\backslash$stretch{n} генерирует специальный <<резиновый>> пробел. Он растягивается, заполняя все оставшееся места на строке. Если на одной строке встречаются две команды \hspace{\stretch{n}}, то они растягиваются пропорционально своим коэффициентам.

x\hspace{\stretch{1}} x\hspace{\stretch{3}}x

x x x

5.3.4 Вертикальные интервалы

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

$\backslash$vspace{длина}

Обычно эта команда вставляется между двумя пустыми строчками. Если это пространство должно сохраняться вверху или внизу страницы, используйте вариант команды со звездочкой: \vspace*. 

Команду \stretch вместе с \pagebreak можно применять для верстки текста на последней строке страницы или для вертикального центрирования текста на странице.

Некий текст\ldots \vspace{\stretch{1}} А это окажется на последней строке страницы.\pagebreak

Дополнительный пробел между двумя строками одного абзаца или внутри таблицы указывается командой

$\backslash\backslash$[длина]

5.4 Компоновка страницы


  \begin{figure}\centering\includegraphics[width=5in]{c.ps}\end{figure}

ПОДОЖДИТЕ! ...прежде, чем немедленно броситься делать эту слишком узкую страницу слегка пошире, потратьте несколько секунд на размышления. Подобно другим вещам, выбор компоновки страницы в LATEX весьма продуман.

Безусловно, если сравнить со страницей, выданной свежеустановленным MS Word, то страницы LATEX выглядят ужасно узкими. Однако, взгляните на вашу любимую книгу32 и посчитайте количество букв на одной строчке. Вы обнаружите, что на каждой строчке не больше 66 букв. Теперь повторите это со страницей LATEX. Вы увидите, что и здесь тоже около 66 букв в строке. Опыт показывает, что при большем количестве букв чтение затрудняется, потому, что глазам становится труднее переходить от конца одной строки к началу следующей. Именно поэтому газеты часто верстаются в несколько колонок.

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

LATEX предоставляет две команды для изменения этих параметров. Их обычно используют в преамбуле документа.

Первая команда присваивает фиксированное значение любому параметру:

$\backslash$setlength{параметр}{длина}

Вторая команда прибавляет длину к любому параметру: $\backslash$addtolength{параметр}{длина}

Она даже более полезна, чем $\backslash$setlength, потому что позволяет вам делать настройку относительно существующих установок. Чтобы добавить сантиметр к общей ширине текста, например, в преамбулу нужно поместить следующее:

\addtolength{\hoffset}{-0.5cm}
\addtolength{\textwidth}{1cm}

Здесь вам может быть интересен пакет calc, который позволяет использовать арифметические операции в аргументе \setlength и в других местах, где аргументами являются численные значения.

5.5 Еще о длинах

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

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

$\backslash$settoheight{команда}{текст}
$\backslash$settodepth{команда}{текст}
$\backslash$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}


a2+b2=c2

Где: a, b - прилегают к прямому углу прямоугольного треугольника.

c - одинокая гипотенуза этого треугольника.

d - вообще тут не участвует. Вот загадка...

5.6 Блоки

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

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

В предыдущих главах вы уже встречали некоторые блоки, хотя об этом и не говорилось. Примерами могут быть окружение tabular или $\backslash$includegraphics, оба производящие блок. Это значит, что вы легко можете сверстать рядом две таблицы или иллюстрации. Только убедитесь, что их общая ширина не превышает \textwidth.

Вы также можете упаковать любой абзац в блок или командой

$\backslash$parbox[поз]{ширина}{текст}

или окружением

\begin{minipage}[поз]{ширина} текст \end{minipage}

Параметр поз может принимать одну из букв c, t или b, контролируя вертикальное выравнивание блока по отношению к базовой линии окружающего текста. Ширина принимает аргументом длину, определяющую ширину блока.

В то время, как $\backslash$parbox упаковывает целый абзац, разбивая строчки и прочее, существует класс блоковых команд, работающих только на горизонтально расположенном материале. Одну из них мы уже знаем. Она называется $\backslash$mbox и просто упаковывает последовательность блоков, что можно использовать для предотвращения переноса LATEX двух слов. Так как вы можете помещать одни блоки в другие, эти упаковщики горизонтальных блоков чрезвычайно гибки.

$\backslash$makebox[ширина][поз]{текст}

Ширина определяет ширину результирующего блока так, как его видно снаружи33. Кроме выражений длины, вы тут можете использовать $\backslash$width, $\backslash$height, $\backslash$depth и $\backslash$totalheight. Они устанавливаются равными значениям, полученным измерением параметров текста.34 Параметр поз принимает однобуквенное значение: c: центрировать, l: отжать влево, r: отжать вправо или s: равномерно заполнить блок текстом.

Команда $\backslash$framebox работает в точности так же, как $\backslash$makebox, но рисует рамку вокруг текста.

Следующий пример показывает некоторые возможности использования команд $\backslash$makebox и $\backslash$framebox.

\makebox[\textwidth]{% ц е н т р}\par \makebox[\textwidth][s]{% р а с т я н у т ы й}\par \framebox[1.1\width]{Я теперь в рамке!} \par \framebox[0.8\width][r]{Ой, я слишком толстый} \par \framebox[1cm][l]{ничего, я тоже} Можете это прочитать?

ц е н т р

р а с т я н у т ы й

\framebox[1.1\width]{Я теперь
в рамке!}

\framebox[0.8\width][r]{Ой,
я слишком толстый}

\framebox[1cm][l]{ничего,
я тоже} Можете это прочитать?

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

$\backslash$raisebox{сдвиг}[глубина][высота]{текст}

позволяет вам определить вертикальные характеристики блока. В первых трех параметров можно использовать $\backslash$width, $\backslash$height, $\backslash$depth и $\backslash$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 кричал он, но даже стоящий рядом не заметил, что с ней случилось что-то ужасное.

   
5.7 Линейки и распорки

Несколько страниц назад вы могли отметить команду

$\backslash$rule[сдвиг]{ширина}{высота}

При обычном использовании она генерирует простой черный блок.

\rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt}

Это можно использовать для рисования вертикальных и горизонтальных линий. Например, линия на титульном листе нарисована командой $\backslash$rule.

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

\begin{tabular}{|c|} \hline \rule{0pt}{4ex}Pittprop \ldots\\ \hline \rule{0pt}{4ex}Strut\\ \hline \end{tabular}

Pittprop ...
Strut


next up previous
Next: Литература Up: No Title Previous: Литература