%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Contents: Customising LaTeX output
% $Id: custom.tex,v 1.2 2003/03/19 20:57:45 oetiker Exp $
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{\Ukr{}Налаштування \LaTeX{}}

\begin{intro}
Документи, створені з використанням вивчених дотепер команд,
будуть виглядати прийнятно для широкої аудиторії. Не виглядаючи
занадто вибагливо, вони відповідають усім правилам гарного тону в
наборі, тому їх легко читати, і на них приємно глянути.

Проте, бувають ситуації, у яких \LaTeX{} не надає команду чи
оточення, які б задовольняли вашим потребам, або вивід,
вироблений певною існуючою командою, не відповідає вашим вимогам.

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

\section{\Ukr{}Нові команди, оточення і пакети}

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

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

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

Якщо я колись вирішу, що мені більше не подобаються команди,
набрані в рамці, я просто зміню визначення оточення
\texttt{lscommand}. Це набагато простіше, ніж проглядати весь
документ, вишукуючи усі місця, де я використав загальні команди
\LaTeX{} для зображення рамки навколо слів.

\subsection{\Ukr{}Нові команди}

Щоб створити ваші власні команди, скористайтеся командою

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

Звичайно ця команда приймає два аргументи: \emph{назву} команди,
яку ви створюєте, і \emph{визначення} команди. Необов'язковий
аргумент \emph{число} у квадратних дужках визначає кількість
аргументів нової команди (може бути не більше 9). Якщо цей
аргумент відсутній, вважається 0, тобто нова команда не має
аргументів.

Наступні два приклади повинні допомогти вам отримати уявлення
про те, як працює \ci{newcommand}.
Перший приклад визначає нову команду, що називається \ci{tnss},
що є скороченням від <<The Not So Short Introduction to
\LaTeXe>>. Така команда знадобиться, якщо вам доведеться багато
разів писати назву цієї книги.

\begin{example}
\newcommand{\tnss}{The not
    so Short Introduction to
    \LaTeXe}
This is ``\tnss'' \ldots{} 
``\tnss''
\end{example}

Наступний приклад ілюструє, як визначити команду з одним 
аргументом. Мітка \verb|#1| замінюється на заданий аргумент. 
Якщо ви хочете використовувати більш одного аргумента, 
використовуйте \verb|#2|, і так далі.

\begin{example}
\newcommand{\txsit}[1]
 {This is the \emph{#1} Short 
      Introduction to \LaTeXe}
% в тілі документа: 
\begin{itemize}
\item \txsit{not so}
\item \txsit{very}
\end{itemize}
\end{example}

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

В певних випадках може знадобитися команда \ci{providecommand}.
Вона працює так само, як \ci{newcommand}, але, якщо команда уже
визначена, \LaTeXe{} її просто проігнорує.

Потрібно звернути увагу на кілька моментів стосовно пробілів 
після команд. Деталі дивіться на сторінці~\pageref{whitespace}.

\subsection{\Ukr{}Нові оточення}

Аналогічно до команди \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}.

Команди, використані у цьому прикладі, будуть пояснені пізніше.
Опис команди \ci{rule} дивіться на сторінці~\pageref{sec:rule},
команда \ci{stretch} описана на сторінці~\pageref{cmd:stretch},
інформацію про команду \ci{hspace} можна знайти на
сторінці~\pageref{sec:hspace}.

\subsection{\Ukr{}Ваш власний пакет}

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


\begin{figure}[!htbp]
\begin{lined}{\textwidth}
\begin{verbatim}
% Demo Package by Tobias Oetiker
\ProvidesPackage{demopack}
\newcommand{\tnss}{Не надто короткий вступ до  \LaTeXe}
\newcommand{\txsit}[1]{\emph{#1} 
                             короткий вступ до \LaTeXe}
\newenvironment{king}{\begin{quote}}{\end{quote}}
\end{verbatim}
\end{lined}
\caption{\Ukr{}Приклад пакета} \label{package}
\end{figure}

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

\section{\Ukr{}Шрифти та розміри}

\subsection{\Ukr{}Команди зміни шрифту}

\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}

Важливою особливістю \LaTeXe{} є те, що атрибути шрифту
незалежні. Це значить, що ви можете давати команди зміни розміру
чи навіть шрифту, зберігаючи при цьому атрибути насиченості чи
нахилу, встановлені раніше.

У \emph{математичному режимі} можна використовувати
\emph{команди} зміни шрифту, щоб тимчасово вийти з
\emph{математичного режиму} і увести нормальний текст. Якщо потрібно
переключитися на інший шрифт для набору математики, для
цього існує спеціальний набір команд. Дивіться
таблицю~\ref{mathfonts}.

\begin{table}[!bp]
\caption{\Ukr{}Шрифти} \label{fonts}
\begin{lined}{\hsize}
%
% 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@{}}
\ci{textrm}\verb|{...}|        &      \textrm{\fni{з зарубками}}&
\ci{textsf}\verb|{...}|        &      \textsf{\fni{без зарубок}}\\
\ci{texttt}\verb|{...}|        &      \texttt{\fni{машинопис}}\\[6pt]
\ci{textmd}\verb|{...}|        &      \textmd{нормальний}&
\ci{textbf}\verb|{...}|        &      \textbf{\fni{жирний}}\\[6pt]
\ci{textup}\verb|{...}|        &      \textup{\fni{прямий}}&
\ci{textit}\verb|{...}|        &      \textit{\fni{курсив}}\\
\ci{textsl}\verb|{...}|        &      \textsl{\fni{похилий}}&
\ci{textsc}\verb|{...}|        &      \textsc{\fni{капітель}}\\[6pt]
\ci{emph}\verb|{...}|          &            \emph{виділений} &
\ci{textnormal}\verb|{...}|    &    \textnormal{звичайний}
\end{tabular}

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


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

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

\begin{table}[!tbp]
\caption{\Ukr{}Абсолютні розміри шрифтів у стандартних класах}
\label{tab:pointsizes}
\label{tab:sizes}
\begin{lined}{\hsize}
\begin{tabular}{lrrr}
\multicolumn{1}{c}{розмір} &
\multicolumn{1}{c}{10pt (за замовч.) } &
           \multicolumn{1}{c}{опція 11pt}  &
           \multicolumn{1}{c}{опція 12pt }\\
\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{\Ukr{}Математичні шрифти} \label{mathfonts}
\begin{lined}{\textwidth}
\begin{tabular}{@{}lll@{}}
\textit{Команда}&\textit{Приклад}&    \textit{Вивід}\\[6pt]
\ci{mathcal}\verb|{...}|&    \verb|$\mathcal{B}=c$|&     $\mathcal{B}=c$\\
\ci{mathrm}\verb|{...}|&     \verb|$\mathrm{K}_2$|&      $\mathrm{K}_2$\\
\ci{mathbf}\verb|{...}|&     \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\
\ci{mathsf}\verb|{...}|&     \verb|$\mathsf{G\times R}$|&        $\mathsf{G\times R}$\\
\ci{mathtt}\verb|{...}|&     \verb|$\mathtt{L}(b,c)$|&   $\mathtt{L}(b,c)$\\
\ci{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|&
$\mathnormal{R_{19}}\neq R_{19}$\\
\ci{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 This will save you from counting lots of curly braces.
\noindent Це дозволить вам уникнути підрахунку безлічі фігурних дужок.

\subsection{\Ukr{}Увага, небезпека}
%\subsection{\Ukr{}Danger, Will Robinson, Danger}

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

\begin{example}
\newcommand{\oops}[1]{\textbf{#1}}
Не \oops{заходьте} до цієї кімнати,
в ній знаходиться \oops{машина}
невідомого походження 
і призначення.
\end{example}

Цей підхід має ту перевагу, що ви пізніше можете вирішити, що
хочете використовувати інше візуальне представлення небезпеки,
ніж \verb|\textbf|, без необхідності пробиратися через весь
документ, знаходити усі випадки \verb|\textbf| і визначати у
кожному з них, використано \verb|\textbf|, щоб вказати на
небезпеку, чи з якогось іншого приводу.

\subsection{\Ukr{}Порада}

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

\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{\Ukr{}Інтервали}

\subsection{\Ukr{}Інтервали між рядками}

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

%> Note that the effect of the command is rather drastic and
%> not appropriate for published work. So if you have a good reason for
%> changing the line spacing you might want to use the command:
%> \begin{lscommand}
%> \verb|\setlength{\baselineskip}{1.5\baselineskip}|
%> \end{lscommand}

Майте на увазі, що команда \ci{linespread} діє грубо і не підходить 
для отримання документів видавничої якості. 
Якщо для зміни міжрядкового інтервалу
є вагома причина, краще скористайтеся командою 
\begin{lscommand}
\verb|\setlength{\baselineskip}{1.5\baselineskip}|
\end{lscommand}

%> 
%> \begin{example}
%> {\setlength{\baselineskip}%
%>            {1.5\baselineskip}
%> This paragraph is typeset with the
%> baseline skip set to 1.5 of what
%> it was before. Note the par command
%> at the end of the paragraph.\par}
%> 
%> This paragraph has a clear purpose,
%> it show that after the curly brace
%> has been closed everything is back
%> to normal.
%> \end{example}


\begin{example}
{\setlength{\baselineskip}%
           {1.5\baselineskip}
Цей абзац набраний з міжрядковим
інтервалом в 1.5 рази більшим від
попереднього. Зверніть увагу 
на команду par в кіці абзаца.\par}

Метою цього абзаца є показати, що 
після закриття фігурної дужки все 
повертається до нормального стану.
\end{example}

\subsection{\Ukr{}Форматування абзаців}\label{parsp}\index{абзац!форматування}

Два параметри \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{}
може зменшити або збільшити відстань між абзацами на задану
величину у випадку, коли не вдається вмістити абзаци на 
сторінці.\index{абзац!відстань між}

У континентальній Європі абзаци часто відокремлюють вертикальним
відступом і не роблять абзацного відступу. Але майте на увазі, це
також впливає на зміст. Відстані між його елементами також
збільшуються. Щоб запобігти цьому, ці команди можна перенести з
преамбули документа куди-небудь після \verb|\tableofcontents|,
або не використовувати їх зовсім, оскільки в професійно
виготовлених книгах для відокремлення абзаців використовується
абзацний відступ, а не вертикальний відступ.

%In continental Europe,
%paragraphs are often separated by some space and not indented. But
%beware, this also has its effect on the table of contents. Its lines
%get spaced more loosely now as well. To avoid this, you might want to
%move the two commands from the preamble into your document to some
%place after the \verb|\tableofcontents| or to not use them at all,
%because you'll find that most professional books use indenting and not
%spacing to separate paragraphs.

Якщо потрібно зробити абзацний відступ у абзаці, який його не має, 
вставте команду 
\begin{lscommand}
\ci{indent}
\end{lscommand}
\noindent на початку абзацу\footnote{Для того, щоб перший абзац
розділу був з відступом, користуйтеся пакетом \pai{indentfirst} з
комплекту <<tools>>.}. Зрозуміло, що вона матиме ефект тільки
якщо \verb|\parindent| не встановлений рівним нулю.\index{абзац!відступ}

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

\subsection{\Ukr{}Горизонтальні інтервали}\label{sec:hspace}

\LaTeX{} автоматично визначає розміри пробілів між словами і
реченнями. Щоб додати горизонтальний 
інтервал\index{горизонтальний інтервал}\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{\Ukr{}Одиниці виміру \TeX{}} \label{units}\index{одиниці}
\begin{lined}{\hsize}
%\begin{lined}{11cm}
\begin{tabular}{@{}ll@{}}
\texttt{mm} & міліметр $\approx 1/25$~дюйма \quad \demowidth{1mm} \\
\texttt{cm} & сантиметр $=$ 10~мм  \quad \demowidth{1cm}           \\
\texttt{in} & дюйм $=$ 25.4~мм \quad \demowidth{1in}               \\
\texttt{pt} & пункт $\approx 1/72$~дюйма $\approx \frac{1}{3}$~мм  \quad\demowidth{1pt}\\
\texttt{em} & приблизно ширина літери <<М>> поточного шрифту \quad \demowidth{1em}\\
\texttt{ex} & приблизно висота літери <<х>> поточного шрифту \quad \demowidth{1ex}
\end{tabular}

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

\label{cmd:stretch}
Команда
\begin{lscommand}
\ci{stretch}\verb|{|\emph{n}\verb|}|
\end{lscommand}
\noindent де $n$ "--- <<фактор пружності>>,
генерує спеціальний <<гумовий>> пробіл. Він
розтягується, заповнюючи все місце, що залишилося в рядку. Якщо в
одному рядку трапляться дві команди
\verb|\hspace{\stretch{|\emph{n}\verb|}}|, вони розтягуються
пропорційно своїм факторам пружності.

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

Коли горизонтальний інтервал використовується разом з текстом, 
доцільно встановлювати його розмір відносно  розміру поточного шрифту.
Це можна зробити, використовуючи одиниці виміру, 
залежні від шрифту "--- \texttt{em} та \texttt{ex}:
 
\begin{example}
{\Large{}ведикий\hspace{1em}y}\\
{\tiny{}крихітний\hspace{1em}y}
\end{example}
  
\subsection{\Ukr{}Вертикальні інтервали}
Інтервали між абзацами, розділами, підрозділами,~\ldots\
\LaTeX{} визначає автоматично. При  необхідності, додатковий
пробіл \emph{між двома абзацами} можна додати командою:
\begin{lscommand}
\ci{vspace}\verb|{|\emph{довжина}\verb|}|
\end{lscommand}

Звичайно ця команда вставляється між двома порожніми рядками.
Якщо цей простір повинен бути збережений навіть угорі чи внизу
сторінки, використовуйте варіант команди з зірочкою:
\verb|\vspace*| замість 
\verb|\vspace|.\index{вертикальний інтервал}\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{\Ukr{}Макетування сторінки}

\begin{figure}[!hp]
\begin{center}
\def\Headertext{Верхній колонтитул}
\def\Bodytext{Тіло}
\def\Footertext{Нижній колонтитул}
\def\MarginNotestext{Поля\\Помітки}
\def\oneinchtext{Один дюйм}
\def\notshown{не показано}
\makeatletter\@layout\makeatother
\end{center}
\vspace*{1.8cm}
\caption{\Ukr{}Параметри макета сторінки}
\label{fig:layout}
\end{figure}

\index{макетування сторінки}\index{сторінка!макетування}\LaTeXe{} 
дозволяє вказати \wi{розмір
аркуша}\index{аркуш!розмір} у команді \verb|\documentclass|.
Потім він автоматично встановлює розміри полів\index{поля}. Але
іноді автоматично встановлені значення можуть вас не
влаштовувати. Безумовно, їх можна змінити.
 %no idea why this is needed here ...
\thispagestyle{fancyplain} %
Рис.~\ref{fig:layout} показує всі
параметри, які можна змінити. Ілюстрація була зґенерована пакетом
\pai{layout} з набору
<<tools>>\footnote{\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}, що дозволяє
використовувати арифметичні операції в аргументі \ci{setlength} і в
інших місцях, де ви можете уводити чисельні значення як 
аргументи функцій.

\section{\Ukr{}Ще про довжини}

Скрізь, де це можливо, я уникаю використання абсолютних величин в
документах. Я радше спробую прив'язати розміри до ширини чи
висоти інших елементів сторінки. Для ширини ілюстрації це може
бути \verb|\textwidth|, щоб вона заповнювала сторінку цілком.

Наступні три команди дозволяють визначити ширину, висоту і глибину
текстового рядка.
\begin{lscommand}
\ci{settoheight}\verb|{|\emph{команда}\verb|}{|\emph{текст}\verb|}|\\
\ci{settodepth}\verb|{|\emph{команда}\verb|}{|\emph{текст}\verb|}|\\
\ci{settowidth}\verb|{|\emph{команда}\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$ "--- взагалі тут не
з'являється. Чи це не дивно?
\end{vardesc}
\end{example}

\section{\Ukr{}Блоки}

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

Я визнаю, що це досить спрощена версія того, що відбувається
насправді, але ідея в тім, що \TeX{} завжди працює з блоками і
клеєм. Не тільки літера може бути блоком. Ви можете помістити в блок
практично все, що завгодно, включно з іншими блоками. Кожен блок
потім обробляється \LaTeX{} так, ніби це окрема літера.

В попередніх розділах ви уже зустрічали деякі блоки, 
хоча про це і не говорилося. Наприклад,  і
команда \ci{includegraphics}, і оточення \ei{tabular}, 
обидва створюють блок. Це значить, що ви легко
можете розмістити поруч дві таблиці чи ілюстрації. Тільки переконайтеся,
що їхня загальна ширина не перевищує \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}, \texttt{t} або
\texttt{b}, контролюючи вертикальне вирівнювання блоку відносно
базової лінії оточуючого тексту. \emph{Ширина} приймає аргументом
довжину, що визначає ширину блоку. Основна відмінність між \ei{minipage}
і \ci{parbox} у тім, що всередині \ci{parbox} можна використовувати не
усі команди й оточення, в той час як практично все можливо 
всередині \ei{minipage}.

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

\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{тексту}. Параметр \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}

Тепер, коли ми керуємо горизонталлю, очевидний наступний крок "---
вертикаль\footnote{Повний контроль можна отримати тільки 
  одночасно контролюючи горизонталь і вертикаль \ldots}. 
Для  \LaTeX{} це не проблема. Команда

\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{\Ukr{}Лінійки і розпірки}
\label{sec:rule}

Кілька сторінок тому ви могли помітити команду

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

\noindent При звичайному використанні вона генерує простий чорний
прямокутник.

\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{1pt}{4ex}Підпірка \ldots\\
\hline
\rule{0pt}{4ex}Розпірка\\
\hline
\end{tabular}
\end{example}


\bigskip
{\flushright Кінець.\par}

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

