%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Contents: Customising LaTeX output
% $Id: custom.tex,v 1.1.1.1 2002/02/26 10:04:20 oetiker Exp $
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Настройка \LaTeX}

\begin{intro}
  Произведенные с использованием изученных до сих пор команд документы
  будут выглядеть вполне приемлемо для широкой аудитории. Они не
  выглядят очень модно, подчиняясь зато всем правилам хорошего тона в
  наборе, поэтому их легко читать и на них приятно смотреть.

  Но бывают ситуации, в которых \LaTeX{} не предоставляет команду или
  окружение, удовлетворяющие вашим ожиданиям, или производимый
  некоторой существующей командой вывод не отвечает вашим требованиям.

  В этой главе даются некоторые советы по обучению \LaTeX{} новым
  вещам, и тому, как сделать его вывод отличающимся от того, что
  производится по умолчанию.
\end{intro}


\section{Новые команды, окружения и пакеты}

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

\begin{example}
\begin{lscommand}
\ci{dum}
\end{lscommand}
\end{example}

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

Если автор когда-нибудь решит, что ему не нравятся больше команды,
сверстанные в рамке, он просто изменит определение окружения
\texttt{lscommand}. Это намного проще, чем пройти по всему документу,
выискивая все места, где использованы общие команды \LaTeX{} для
рисования рамки вокруг слов.


\subsection{Новые команды}

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

\begin{lscommand}
\ci{newcommand}\verb|{|%
       \emph{название}\verb|}[|\emph{число}\verb|]{|\emph{определение}\verb|}|
\end{lscommand}

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

Следующие два примера должны вам помочь получить представление о
команде. Первый пример определяет новую команду, называющуюся
\ci{tnss}, что является сокращением от ``The Not So Short Introduction
to \LaTeXe''. Такая команда пригодится, если вам много раз приходится
писать название этой книги.

\begin{example}
\newcommand{\tnss}{The not
   so Short Introduction to
   \LaTeXe}
% в теле документа:
``\tnss'' \ldots{} ``\tnss''
\end{example}

Следующий пример показывает, как определить новую команду, принимающую
один аргумент. Метка \verb|#1| заменяется на заданный аргумент. Если вы
хотите использовать более одного аргумента, пользуйтесь \verb|#2|, и
так далее.

\begin{example}
\newcommand{\txsit}[1]
    {\emph{#1} краткое
      введение в \LaTeXe}
% в теле документа
\begin{itemize}
\item \txsit{Не очень}
\item \txsit{Очень}
\end{itemize}
\end{example}

\LaTeX{} не позволит вам создать новую команду, которая бы изменяла
уже существующую. Но для случая, когда вы явно хотите изменить
существующую команду, есть специальная команда: \ci{renewcommand}. Она
имеет тот же синтаксис, что и команда \verb|\newcommand|.

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

Существуют определенные особенности, связанные с пробелами после
команд \LaTeX{}. Подробности смотрите на
странице~\pageref{whitespace}. 


\subsection{Новые окружения}

Аналогичная команде \verb|\newcommand|, существует команда для создания
вашего собственного окружения, \ci{newenvironment}, имеющая следующий
синтаксис:

\begin{lscommand}
\ci{newenvironment}\verb|{|%
       \emph{название}\verb|}[|\emph{номер}\verb|]{|%
       \emph{начало}\verb|}{|\emph{конец}\verb|}|
\end{lscommand}

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

\begin{example}
\newenvironment{king}
 {\rule{1ex}{1ex}%
      \hspace{\stretch{1}}}
 {\hspace{\stretch{1}}%
      \rule{1ex}{1ex}}

\begin{king}
Мои смиренные подданные\ldots
\end{king}
\end{example}

Аргумент \emph{номер} используют так же, как и для команды
\verb|\newcommand|. \LaTeX{} контролирует, чтобы вы не определяли уже
существующее окружение. Если вы заходите все же это сделать,
пользуйтесь командой \ci{renewenvironment}. Она имеет тот же
синтаксис, что ли \ci{newenvironment}.\sloppypar

Команды, использованные в этом примере, будут разъяснены позже:
описание команды \ci{rule} см. на стр.~\pageref{sec:rule}, команда
\ci{stretch} описана на стр.~\pageref{cmd:stretch}, а описание команды
\ci{hspace} находится на стр.~\pageref{sec:hspace}.

\subsection{Ваш собственный пакет}

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

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

Создание пакета в основном состоит из переноса содержимого вашей
преамбулы в отдельный файл с именем, заканчивающимся на
\texttt{.sty}. Есть только одна специальная команда, которую вы должны
использовать
\begin{lscommand}
\ci{ProvidesPackage}\verb|{|\emph{название пакета}\verb|}|
\end{lscommand}
\noindent в самом начале файла с вашим
пакетом. \verb|\ProvidesPackage| указывает \LaTeX{} название пакета,
что позволяет ему выдавать осмысленное сообщение об ошибке, когда вы
пытаетесь включать пакет дважды. Иллюстрация~\ref{package} показывает
маленький пример пакета, содержащего определенные в вышеприведенных
примерах команды.


\section{Шрифты и их размеры}


\subsection{Команды смены шрифта}

\index{шрифт}\index{шрифт!размер} \LaTeX{} выбирает подходящее
начертание и размер шрифта, основываясь на логической структуре
документа (разделы, сноски,~\ldots). Иногда может быть желательно
сменить шрифт вручную. Для этого вы можете пользоваться командами,
перечисленными в таблицах~\ref{fonts} и~\ref{sizes}. Действительный
размер каждого шрифта определяется дизайном и зависит от класса и
опций документа. Таблица~\ref{tab:pointsizes} показывает абсолютные
размеры, соответствующие этим командам в стандартных классах
документов.

% Эх, не перевести игру слов :(
%\begin{example}
%{\small The small and
%\textbf{bold} Romans ruled}
%{\Large all of great big
%\textit{Italy}.}
%\end{example}

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

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

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

\begin{table}[!bp]
\caption{Шрифты} \label{fonts}
\begin{lined}{12cm}
%
% Alan suggested not to tell about the other form of the command
% eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me.
%
\begin{tabular}{@{}rl@{\qquad}rl@{}}
\fni{textrm}\verb|{...}|        &      \textrm{\wi{прямой шрифт}}&
\fni{textsf}\verb|{...}|        &      \textsf{\wi{без засечек}}\\
\fni{texttt}\verb|{...}|        &      \texttt{пишущая машинка}\\[6pt]
\fni{textmd}\verb|{...}|        &      \textmd{нормальный}&
\fni{textbf}\verb|{...}|        &      \textbf{\wi{полужирный}}\\[6pt]
\fni{textup}\verb|{...}|        &       \textup{\wi{прямой шрифт}}&
\fni{textit}\verb|{...}|        &       \textit{\wi{курсив}}\\
\fni{textsl}\verb|{...}|        &       \textsl{\wi{наклонный шрифт}}&
\fni{textsc}\verb|{...}|        &       \textsc{\wi{капитель}}\\[6pt]
\ci{emph}\verb|{...}|          &            \emph{выделенный шрифт} &
\fni{textnormal}\verb|{...}|    &    \textnormal{обычный}
\end{tabular}

\bigskip
\end{lined}
\end{table}


\begin{table}[!bp]
\index{шрифт!размер}
\caption{Размеры шрифта} \label{sizes}
\begin{lined}{12cm}
\begin{tabular}{@{}ll}
\fni{tiny}      & \tiny        крошечный \\
\fni{scriptsize}   & \scriptsize  очень маленький\\
\fni{footnotesize} & \footnotesize  довольно маленький \\
\fni{small}        &  \small        маленький \\
\fni{normalsize}   &  \normalsize  нормальный \\
\fni{large}        &  \large       большой
\end{tabular}%
\qquad\begin{tabular}{ll@{}}
\fni{Large}        &  \Large       еще больше \\[5pt]
\fni{LARGE}        &  \LARGE       очень большой \\[5pt]
\fni{huge}         &  \huge        огромный \\[5pt]
\fni{Huge}         &  \Huge        громадный
\end{tabular}

\bigskip
\end{lined}
\end{table}

\begin{table}[!tbp]
\caption{Абсолютные размеры шрифтов в стандартных классах}
\label{tab:pointsizes}
\label{tab:sizes}
\begin{lined}{12cm}
\begin{tabular}{lrrr}
\multicolumn{1}{c}{\textit{Размер}} &
\multicolumn{1}{c}{\textit{10pt (по умолчанию)}} &
           \multicolumn{1}{c}{\textit{опция 11pt}}  &
           \multicolumn{1}{c}{\textit{опция 12pt}}\\[6pt]
\verb|\tiny|       & 5pt  & 6pt & 6pt\\
\verb|\scriptsize| & 7pt  & 8pt & 8pt\\
\verb|\footnotesize| & 8pt & 9pt & 10pt \\
\verb|\small|        & 9pt & 10pt & 11pt \\
\verb|\normalsize| & 10pt & 11pt & 12pt \\
\verb|\large|      & 12pt & 12pt & 14pt \\
\verb|\Large|      & 14pt & 14pt & 17pt \\
\verb|\LARGE|      & 17pt & 17pt & 20pt\\
\verb|\huge|       & 20pt & 20pt & 25pt\\
\verb|\Huge|       & 25pt & 25pt & 25pt\\
\end{tabular}

\bigskip
\end{lined}
\end{table}

\begin{table}[!bp]
\caption{Математические шрифты} \label{mathfonts}
\begin{lined}{\textwidth}
\begin{tabular}{@{}lll@{}}
\textit{Команда}&\textit{Пример}&    \textit{Вывод}\\[6pt]
\fni{mathcal}\verb|{...}|&    \verb|$\mathcal{B}=c$|&     $\mathcal{B}=c$\\
\fni{mathrm}\verb|{...}|&     \verb|$\mathrm{K}_2$|&      $\mathrm{K}_2$\\
\fni{mathbf}\verb|{...}|&     \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\
\fni{mathsf}\verb|{...}|&     \verb|$\mathsf{G\times R}$|&        $\mathsf{G\times R}$\\
\fni{mathtt}\verb|{...}|&     \verb|$\mathtt{L}(b,c)$|&   $\mathtt{L}(b,c)$\\
\fni{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|&
$\mathnormal{R_{19}}\neq R_{19}$\\
\fni{mathit}\verb|{...}|&     \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq ffi$
\end{tabular}

\bigskip
\end{lined}
\end{table}

В связи с командами смены размера шрифта заметную роль играют
\wi{фигурные скобки}. Они используются для построения
\emph{групп}. Группы ограничивают область действия большинства команд
\LaTeX{}.\index{группирование}

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

Команды, влияющие на размер шрифта, влияют также на расстояние между
строками, но только если соответствующий абзац заканчивается внутри
области действия команды. Поэтому закрывающая фигурная скобка \verb|}|
не должна стоять слишком рано. Заметьте положение команды \verb|\par|
в следующих двух примерах\footnote{\texttt{\bs{}par} эквивалентен
  пустой строке.}:
\begin{example}
{\Large Не читайте это! Это
неправда. Верьте мне!\par}
\end{example}

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

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

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

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


\subsection{Опасность!}

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

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

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


\subsection{Совет}

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

\begin{quote}
  \underline{\textbf{Помните\Huge!}} \textit{Чем}
  \textsf{Б\textbf{\LARGE О}\texttt{ЛЬ}\textsl{ШЕ}} шрифтов \Huge вы
  \tiny используете \footnotesize \textbf{в} вашем \small
  \texttt{документе}, \large \textit{тем} \normalsize легче
  \textsc{его читать} и тем \textsl{\textsf{красивее}} он
  б\large{}у\Large{}д\LARGE{}е\huge{}т\normalsize.
\end{quote}


\section{Интервалы}


\subsection{Интервалы между строками}

\index{интервал!междустрочный} Если вам нужны б\'ольшие интервалы между
строками, то их значение можно изменить помещением в преамбулу команды
\begin{lscommand}
\ci{linespread}\verb|{|\emph{коэффициент}\verb|}|
\end{lscommand}
\noindent Для печати <<через полтора интервала>> пользуйтесь
\verb|\linespread{1.3}|, для печати <<через два интервала>>~---
\verb|\linespread{1.6}|. По умолчанию этот коэффициент
равен~1.\index{интервал!двойной}

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

\begin{lscommand}
\verb|\setlength{\baselineskip}{1.5\baselineskip}|
\end{lscommand}

\begin{example}
{\setlength{\baselineskip}%
           {1.5\baselineskip}
Этот абзац набран с интервалом в 
1.5 раза больше предыдущего. Заметьте
команду \par{} в конце абзаца.\par}

Ясно, зачем набрат этот абзац: он
показывает, что за закрывающейся 
фигурной скобкой все вернулось к
нормальным установкам.
\end{example}


\subsection{Форматирование абзацев}
\label{parsp}

Два параметра в \LaTeX{} влияют на верстку абзацев. Поместив в
преамбулу определения вида
\begin{code}
\ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\
\verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}|
\end{code}
вы измените внешний вид абзацев. Эти две строчки увеличивают
расстояние между абзацами и устанавливают абзацный отступ равным
нулю. 

Части \texttt{plus} и \texttt{minus} говорят \TeX{}, что он может
увеличивать и уменьшать интервал между абзацами на указанные величины,
если это необходимо для правильного размещения абзацев на странице.

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

Если вы хотите сделать абзацный отступ в не имеющем его абзаце, то
вставьте в начало абзаца команду\footnote{Для добавления отступа к
  первому абзацу после каждого заголовка раздела пользуйтесь пакетом
  \pai{indentfirst} из комплекта `tools'.}
\begin{lscommand}
\ci{indent}
\end{lscommand}
\noindent Понятно, что эффект от нее будет только если
\verb|\parindent| не установлен равным нулю.

Для создания абзаца без отступа первой командой абзаца можно сделать
\begin{lscommand}
\ci{noindent}
\end{lscommand}
\noindent Это может быть удобно, когда вы начинаете документ с текста,
а не с команды секционирования.


\subsection{Горизонтальные интервалы}

\label{sec:hspace}
\LaTeX{} автоматически определяет пробелы между словами и
предложениями. Чтобы добавить горизонтальный
пробел\index{пробел!горизонтальный}, пользуйтесь
\begin{lscommand}
\ci{hspace}\verb|{|\emph{длина}\verb|}|
\end{lscommand}
Если такой интервал должен быть выдержан, даже если он приходится на
начало или конец строки, используйте \verb|\hspace*|, а не
\verb|\hspace|. В простейшем случае \emph{длина}~--- это просто число
и единица измерения. Наиболее важные единицы перечислены в
таблице~\ref{units}. \index{единицы}\index{длина}

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

%\suppressfloats
\begin{table}[tbp]
\caption{Единицы размерности в \TeX{}} \label{units}\index{единицы}
\begin{lined}{9.5cm}
\begin{tabular}{@{}ll@{}}
\texttt{mm} & миллиметр $\approx 1/25$~дюйма \quad \demowidth{1mm} \\
\texttt{cm} & сантиметр $=$ 10~mm  \quad \demowidth{1cm}                     \\
\texttt{in} & inch $=$ 25.4~mm \quad \demowidth{1in}                    \\
\texttt{pt} & пункт $\approx 1/72$~дюйма $\approx \frac{1}{3}$~mm  \quad\demowidth{1pt}\\
\texttt{em} & примерная ширина буквы `M' текущего шрифта \quad \demowidth{1em}\\
\texttt{ex} & примерная высота буквы `x' текущего шрифта \quad \demowidth{1ex}
\end{tabular}

\bigskip
\end{lined}
\end{table}

\label{cmd:stretch}
Команда
\begin{lscommand}
\ci{stretch}\verb|{|\emph{n}\verb|}|
\end{lscommand}
\noindent генерирует специальный <<резиновый>> пробел. Он
растягивается, заполняя все оставшееся места на строке. Если на одной
строке встречаются две команды
\verb|\hspace{\stretch{|\emph{n}\verb|}}|, то они растягиваются
пропорционально своим коэффициентам.\sloppypar

\begin{example}
x\hspace{\stretch{1}}
x\hspace{\stretch{3}}x
\end{example}

Пpи использовании гоpизонтальных интеpвалов вместе с текстом может
иметь смысл генеpиpовать интеpвал, pазмеp котоpого соотносится с
pазмеpом текущего шpифта. Этого можно добиться пpи помощи
относительных единиц pазмеpности \texttt{em} и \texttt{en}:

\begin{example}
{\Large{}big\hspace{1em}y}\\
{\tiny{}tin\hspace{1em}y}
\end{example}
 

\subsection{Вертикальные интервалы}

Интервалы между абзацами, разделами, подразделами,~\ldots\
определяются \LaTeX{} автоматически. При  необходимости дополнительный
пробел \emph{между двумя абзацами} можно добавить командой
\begin{lscommand}
\ci{vspace}\verb|{|\emph{длина}\verb|}|
\end{lscommand}

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

Команду \verb|\stretch| вместе с \verb|\pagebreak| можно применять для
верстки текста на последней строке страницы или для вертикального
центрирования текста на странице.
\begin{code}
\begin{verbatim}
Некий текст\ldots

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

Дополнительный пробел между двумя строками \emph{одного} абзаца или
внутри таблицы указывается командой
\begin{lscommand}
\ci{\bs}\verb|[|\emph{длина}\verb|]|
\end{lscommand}

При помощи \ci{bigskip} и \ci{smallskip} вы можете пропустить заранее
определенные вертикальные интервалы, не задумываясь о конкретных
числах. 

\section{Компоновка страницы}

\begin{figure}[!hp]
\begin{center}
\makeatletter\@layout\makeatother
\end{center}
\vspace*{1.8cm}
\caption{Параметры компоновки страницы}
\label{fig:layout}
\end{figure}

\index{компоновка страницы}
\LaTeXe{} позволяет указать \wi{размер бумаги} в команде
\verb|\documentclass|. Затем он автоматически выбирает правое
\wi{поле}. Но иногда предопределенные значения могут вас не
устроить. Безусловно, вы их можете изменить.
%no idea why this is needed here ...
\thispagestyle{fancyplain} Иллюстрация~\ref{fig:layout} показывает все
параметры, которые можно изменить. Она была сгенерирована пакетом
\pai{layout} из комплекта
`tools'.\footnote{\texttt{\CTAN|macros/latex/required/tools|}}

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

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

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

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

Первая команда присваивает фиксированное значение любому параметру:
\begin{lscommand}
\ci{setlength}\verb|{|\emph{параметр}\verb|}{|\emph{длина}\verb|}|
\end{lscommand}

Вторая команда прибавляет длину к любому параметру:
\begin{lscommand}
\ci{addtolength}\verb|{|\emph{параметр}\verb|}{|\emph{длина}\verb|}|
\end{lscommand}

Она даже более полезна, чем \ci{setlength}, потому что позволяет вам
делать настройку относительно существующих установок. Чтобы добавить
сантиметр к общей ширине текста, например, в преамбулу нужно поместить
следующее:
\begin{code}
\verb|\addtolength{\hoffset}{-0.5cm}|\\
\verb|\addtolength{\textwidth}{1cm}|
\end{code}

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


\section{Еще о длинах}

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

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

\begin{lscommand}
\ci{settoheight}\verb|{|\emph{пеpеменная}\verb|}{|\emph{текст}\verb|}|\\
\ci{settodepth}\verb|{|\emph{пеpеменная}\verb|}{|\emph{текст}\verb|}|\\
\ci{settowidth}\verb|{|\emph{пеpеменная}\verb|}{|\emph{текст}\verb|}|
\end{lscommand}

\noindent Нижеследующий пример показывает возможное применение этих
команд.

\begin{example}
\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}
\end{example}


\section{Блоки}

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

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

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

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

\begin{lscommand}
\ci{parbox}\verb|[|\emph{поз}\verb|]{|\emph{ширина}\verb|}{|\emph{текст}\verb|}|
\end{lscommand}

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

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

Параметр \emph{поз} может принимать одну из букв \texttt{c, t} или
\texttt{b}, контролируя вертикальное выравнивание блока по отношению к
базовой линии окружающего текста. \emph{Ширина} принимает аргументом
длину, определяющую ширину блока. Основное отличие между \ci{minipage}
и \ci{parbox}~--- в том, что внутри \ci{parbox} можно использовать не
все команды и окружения, тогда как внутри \ci{minipage} можно
практически все.

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

\begin{lscommand}
\ci{makebox}\verb|[|\emph{ширина}\verb|][|\emph{поз}\verb|]{|\emph{текст}\verb|}|
\end{lscommand}

\noindent \emph{Ширина} определяет ширину результирующего блока так,
как его видно снаружи.\footnote{Это означает, что она может быть
  меньше, чем материал внутри блока. В предельном случае вы можете
  даже установить ее в 0pt, так что текст внутри блока верстается,
  вообще не оказывая влияния на окружающие блоки.} Кроме выражений
длины, вы тут можете использовать \ci{width}, \ci{height}, \ci{depth}
и \ci{totalheight}. Они устанавливаются равными значениям, полученным
измерением параметров \emph{текста}.\trfootnote{Ширина, высота, глубина
  и общая высота (высота плюс глубина) текста,
  соответственно.} Параметр \emph{поз}
принимает однобуквенное значение: \textbf{c}: центрировать,
\textbf{l}: отжать влево, \textbf{r}: отжать вправо или \textbf{s}:
равномерно заполнить блок текстом.

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

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

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

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

\begin{lscommand}
\ci{raisebox}\verb|{|\emph{сдвиг}\verb|}[|\emph{глубина}\verb|][|\emph{высота}\verb|]{|\emph{текст}\verb|}|
\end{lscommand}

\noindent позволяет вам определить вертикальные характеристики
блока. В первых трех параметров можно использовать \ci{width},
\ci{height}, \ci{depth} и \ci{totalwidth}, чтобы получить размеры
аргумента \emph{текст}.

\begin{example}
\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}}}
кричал он, но даже стоящий рядом
не заметил, что с ним случилось
что-то ужасное.
\end{example}


\section{Линейки и распорки}
\label{sec:rule}

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

\begin{lscommand}
\ci{rule}\verb|[|\emph{сдвиг}\verb|]{|\emph{ширина}\verb|}{|\emph{высота}\verb|}|
\end{lscommand}

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

\newpage
\begin{example}
\rule{3mm}{.1pt}%
\rule[-1mm]{5mm}{1cm}%
\rule{3mm}{.1pt}%
\rule[1mm]{1cm}{5mm}%
\rule{3mm}{.1pt}
\end{example}

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

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

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

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "lshort2e"
%%% End:

\bigskip
{\flushright Конец.\par}

%
