> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/uk/formatuvannya/04-articles-how-to-change-paragraph-spacing-in-latex.md).

# Форматування абзаців

## Вступ

Ця стаття досліджує два способи внесення змін до різних аспектів міжабзацних відступів:

* найкращий практичний і рекомендований спосіб використання пакетів LaTeX, таких як [`setspace`](https://ctan.org/pkg/setspace) та [`parskip`](https://ctan.org/pkg/parskip) які надають параметри та команди користувацького рівня для зміни інтервалів у ваших документах LaTeX;
* використання низькорівневих команд TeX/LaTeX *параметричних команд* для зміни міжабзацних відступів. Безпосереднє використання параметричних команд може обійти перевірки або обмеження, передбачені ретельно створеними пакетами LaTeX, що потенційно може призвести до неочікуваних наслідків/побічних ефектів в інших частинах вашого документа LaTeX, тож використовуйте їх обережно...

### Перейти до розділів, що цікавлять

Читачам, які шукають швидкі рішення:

* перейдіть до розділу [*Використання пакетів LaTeX: setspace і parskip*](#using-latex-packages-setspace-and-parskip)

Читачам, які цікавляться низькорівневими командами:

* перейдіть до розділів [*Параметричні команди TeX/LaTeX*](#using-texlatex-parameter-commands) та [*Основи: параметричні команди та приклади*](#the-fundamentals-parameter-commands-and-examples)

Читачам, які цікавляться тонкощами обчислення міжрядкових інтервалів і структури абзаців:

* перейдіть до розділу [*Структура абзаців і обчислення міжрядкових інтервалів*](#paragraph-structure-and-line-space-calculations)

## Використання пакетів LaTeX: setspace і parskip

* [Пакет parskip](#the-parskip-package)
* [Пакет setspace](#the-setspace-package)

### Пакет parskip

Функція [`parskip` accents](https://ctan.org/pkg/parskip?lang=en) допомагає безпечно змінювати проміжок, що вставляється між абзацами у вашому документі. Він розроблений так, щоб структури документа, такі як зміст, списки та заголовки, що виводяться окремо, не зазнавали негативного впливу від ненульового значення [`\parskip` команду](#parskip-tex-primitive), яке використовується для задання величини проміжку, який TeX/LaTeX вставляє між абзацами.

Функція `parskip` пакет не надає жодних команд користувацького рівня; натомість він використовує параметри пакета для налаштування своєї дії.  [`parskip` документації](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/parskip/parskip.pdf) доволі короткий, лише три сторінки, але ось короткий підсумок параметрів пакета:

* **`skip`**: вказує `\parskip`, вертикальний проміжок між абзацами;
* **`tocskip`**: вказує ненульове `\parskip` значення для використання в `\tableofcontents` та подібних списках;
* **`indent`**: встановлює значення `\parindent`, абзацного відступу;
* **`parfill`**: коригує значення `\parfillskip`, клей, що додається в кінці останнього рядка абзацу.

За замовчуванням `parskip` пакет встановлює `\parindent` на `0pt` і надає ненульове `\parskip` значення `.5[\baselineskip](#baselineskip-tex-primitive) плюс 2pt`.

#### Приклади пакета parskip

Наведені нижче приклади демонструють деякі способи використання `parskip` пакета. Оберіть посилання «Open in Overleaf», щоб відкрити та скомпілювати приклади в Overleaf.

**Мінімальний приклад пакета parskip**

Наведений нижче мінімальний приклад завантажує `parskip` пакет і верстає два абзаци, створені за допомогою [`blindtext` accents](https://ctan.org/pkg/blindtext?lang=en). У прикладі також верстаються стандартні значення `\baselineskip`, `\parskip` та `\parindent`. Кількість проміжку між двома абзацами визначається значенням `\parskip`:

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=14cm,textwidth=12cm]{geometry}
% Завантажуємо пакет blindtext для тексту-заповнювача
\usepackage{blindtext}
% Завантажуємо пакет parskip без параметрів
\usepackage{parskip}
\begin{document}

\blindtext[1]\par % Використовуємо \par, щоб примусово створити новий абзац
\blindtext[1]

Значення \verb|\parindent| дорівнює \texttt{\the\parindent}. Ось інші значення:

\begin{itemize}
\item Значення \verb|\baselineskip| дорівнює \texttt{\the\baselineskip}
\item Значення \verb|\parskip| дорівнює \texttt{\the\parskip}
\end{itemize}
\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+the+parskip+package\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Load+the+parskip+package+without+options%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cblindtext%5B1%5D%5Cpar+%25Use+%5Cpar+to+force+a+new+paragraph%0A%5Cblindtext%5B1%5D%0A%0AThe+value+of+%5Cverb%7C%5Cparindent%7C+is+%5Ctexttt%7B%5Cthe%5Cparindent%7D.+Here+are+the+other+values%3A%0A%0A%5Cbegin%7Bitemize%7D%0A%5Citem+The+value+of+%5Cverb%7C%5Cbaselineskip%7C+is+%5Ctexttt%7B%5Cthe%5Cbaselineskip%7D%0A%5Citem+The+value+of+%5Cverb%7C%5Cparskip%7C+is+%5Ctexttt%7B%5Cthe%5Cparskip%7D%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Приклад використання пакета LaTeX parskip](/files/313a060fef167492ff7fe7dc15dea534df95688f)

Зверніть увагу, що `\parskip` клей зазвичай містить розтяжний [компонент клею](#a-few-notes-on-glue) оскільки це допомагає LaTeX уміщувати вміст на сторінку та створювати найкращі (оптимальні) розриви сторінок.

**Використання параметрів пакета parskip**

Наведений нижче приклад завантажує та налаштовує `parskip` пакет, використовуючи `skip` та `indent` параметри. Він також верстає два абзаци за допомогою [`blindtext` accents](https://ctan.org/pkg/blindtext?lang=en), а також виводить значення `\baselineskip`, `\parskip` та `\parindent`.

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=18cm,paperwidth=14cm,textwidth=12cm]{geometry}
% Завантажуємо пакет blindtext для тексту-заповнювача
\usepackage{blindtext}
% Завантажуємо пакет parskip з параметрами skip і indent
\usepackage[skip=10pt plus1pt, indent=40pt]{parskip}
\begin{document}

\blindtext[1]\par % Використовуємо \par, щоб примусово створити новий абзац
\blindtext[1]

Значення \verb|\parindent| було встановлено через параметр \texttt{indent}, тож тепер воно \texttt{\the\parindent}. Інші значення такі:

\begin{itemize}
\item \verb|\baselineskip| дорівнює \texttt{\the\baselineskip}
\item \verb|\parskip| було встановлено через параметр \texttt{skip}, тож його значення \texttt{\the\parskip}
\end{itemize}
\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+the+parskip+package\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Load+the+parskip+package+with+skip+and+indent+options%0A%5Cusepackage%5Bskip%3D10pt+plus1pt%2C+indent%3D40pt%5D%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cblindtext%5B1%5D%5Cpar+%25+Use+%5Cpar+to+force+a+new+paragraph%0A%5Cblindtext%5B1%5D%0A%0AThe+value+of+%5Cverb%7C%5Cparindent%7C+was+set+via+the+%5Ctexttt%7Bindent%7D+option%2C+so+it+is+now+%5Ctexttt%7B%5Cthe%5Cparindent%7D.+The+other+values+are%3A%0A%0A%5Cbegin%7Bitemize%7D%0A%5Citem+%5Cverb%7C%5Cbaselineskip%7C+is+%5Ctexttt%7B%5Cthe%5Cbaselineskip%7D%0A%5Citem+%5Cverb%7C%5Cparskip%7C+was+set+via+the+%5Ctexttt%7Bskip%7D+option%2C+so+its+value+is+%5Ctexttt%7B%5Cthe%5Cparskip%7D%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Другий приклад використання пакета LaTeX parskip](/files/aee162e342dfa0c868a4df9e4e4f3e6623355e0d)

### Пакет setspace

Функція [`setspace` accents](https://ctan.org/pkg/setspace?lang=en) надає команди та середовища для зміни міжрядкового інтервалу рядків тексту у вашому документі. Ось короткий підсумок основних команд і середовищ, які надає `setspace`:

* команди **`\singlespacing`**, **`\onehalfspacing`** та **`\doublespacing`** можна використовувати в преамбулі документа або в основній частині документа, щоб змінити інтервал у частині або в усьому документі;
* сайті **`\setstretch{*кількість baselinestretch*}`** команда встановлює власний інтервал (через зміни [`\baselinestretch`](#demonstrating-baselinestretch)) — її також можна використовувати в преамбулі документа;
* середовища **`singlespace`**, **`singlespace*`** **`onehalfspace`** та **`doublespace`** дозволяють змінювати міжрядковий інтервал для вибраних частин тексту документа;
* сайті **`\SetSinglespace{*значення*}`** команда використовує `*значення*` для коригування одинарного міжрядкового інтервалу з урахуванням інтервалу в тексті, набраному шрифтами, чиї форми символів («гліфи») є відносно малими або великими для заданого кегля. Див. розділ [*Короткі нотатки про шрифти та кегль*](#brief-notes-on-fonts-and-point-size) для ілюстрації, що демонструє зміну розміру гліфів шрифту для заданого кегля;
* сайті **`інтервал`** середовище надає власний інтервал і вимагає один аргумент: [`\baselinestretch` значення](#demonstrating-baselinestretch) для використання; наприклад:

```latex
\begin{spacing}{2.5}
...
...
\end{spacing}
```

#### Приклади пакета setspace

Наведені нижче приклади демонструють деякі способи використання `setspace` пакета: натисніть посилання «Open in Overleaf», щоб відкрити та скомпілювати приклади в Overleaf.

**Використання \doublespacing у преамбулі документа**

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=18cm,paperwidth=14cm,textwidth=12cm]{geometry}
% Завантажуємо пакет blindtext для тексту-заповнювача
\usepackage{blindtext}
% Завантажуємо пакет setspace
\usepackage{setspace}
% Використовуємо \doublespacing у преамбулі
% змінює текст на подвійний міжрядковий інтервал
\doublespacing
\begin{document}
\blindtext[1]
\end{document}
```

&#x20;[Відкрийте цей `setspace` приклад в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+the+doublespacing+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Load+the+setspace+package%0A%5Cusepackage%7Bsetspace%7D%0A%25+Using+%5Cdoublespacing+in+the+preamble+%0A%25+changes+text+to+double+line+spacing%0A%5Cdoublespacing%0A%5Cbegin%7Bdocument%7D%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Приклад команди setspace \doublespacing](/files/71ada3041b83a5ea84a8260bc1d9c75e36ceaf07)

**Використання середовища spacing**

Оскільки наведений нижче код верстає 3 сторінки, краще переглянути результат в Overleaf, обравши посилання «Open in Overleaf», наведене нижче.

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=18cm,paperwidth=14cm,textwidth=12cm]{geometry}
% Завантажуємо пакет blindtext для тексту-заповнювача
\usepackage{blindtext}
% Завантажуємо пакет setspace
\usepackage{setspace}
% Використовуємо \doublespacing у преамбулі
% змінює текст на подвійний міжрядковий інтервал
\doublespacing
\begin{document}
\blindtext[1]

Тепер застосуйте більший (власний) інтервал, встановивши значення \verb|\baselinestretch| на 3:

\begin{verbatim}
\begin{spacing}{3}
\blindtext[1]
\end{spacing}
\end{verbatim}

\begin{spacing}{2.5}
\blindtext[1]
\end{spacing}
Тепер повертаємося до \verb|\singlespacing|\singlespacing\blindtext[1]
\end{document}
```

&#x20;[Відкрийте цей `setspace` приклад в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+various+setspace+commands\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Load+the+setspace+package%0A%5Cusepackage%7Bsetspace%7D%0A%25+Using+%5Cdoublespacing+in+the+preamble+%0A%25+changes+text+to+double+line+spacing%0A%5Cdoublespacing%0A%5Cbegin%7Bdocument%7D%0A%5Cblindtext%5B1%5D%0A%0ANow%2C+apply+a+larger+%28custom%29+spacing+by+applying+a+%5Cverb%7C%5Cbaselinestretch%7C+value+of+3%3A%0A%0A%5Cbegin%7Bverbatim%7D%0A%5Cbegin%7Bspacing%7D%7B3%7D%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bspacing%7D%0A%5Cend%7Bverbatim%7D%0A%0A%5Cbegin%7Bspacing%7D%7B2.5%7D%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bspacing%7D%0ANow%2C+revert+to+%5Cverb%7C%5Csinglespacing%7C%5Csinglespacing%5Cblindtext%5B1%5D%0A%5Cend%7Bdocument%7D)

**Використання середовища singlespace\***

Як зазначено в статті [*Коротка примітка про міжрядковий інтервал*](https://texblog.org/2011/09/30/quick-note-on-line-spacing/), а `setspace` пакет надає зіркові (`singlespace*`) і незіркові версії `singlespace` середовища. Коментарі в `setspace` коді пакета зазначають, що `singlespace*` середовище призначене для «... покращення вертикальних проміжків навколо середовищ itemize і quote».

Наведений нижче приклад використовує марковані списки, що містяться в двох `minipage` середовищах, розміщених поруч, щоб продемонструвати різні інтервали, які створює `singlespace` та `singlespace*` середовищ.

```latex
\doublespacing
\blindtext[1]

\begin{minipage}{.4\textwidth}
\begin{singlespace}
Ось маркований список\par (середовище \texttt{singlespace}).
\begin{itemize}
\item Один
\item Два
\item Три
\end{itemize}
\end{singlespace}%
Список завершено.
\end{minipage}\kern10pt%
\begin{minipage}{.4\textwidth}
\begin{singlespace*}
Ось маркований список\par (середовище \texttt{singlespace*}).
\begin{itemize}
\item Один
\item Два
\item Три
\end{itemize}
\end{singlespace*}
Список завершено.
\end{minipage}
```

&#x20;[Відкрийте цей `setspace` приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+starred+singlespace+environment\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bsetspace%7D%0A%5Cusepackage%7Bblindtext%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cdoublespacing+%0A%5Cblindtext%5B1%5D%0A%0A%5Cbegin%7Bminipage%7D%7B.4%5Ctextwidth%7D%0A%5Cbegin%7Bsinglespace%7D%0AHere+is+a+bulleted+list%5Cpar+%28%5Ctexttt%7Bsinglespace%7D+environment%29.%0A%5Cbegin%7Bitemize%7D%0A%5Citem+One%0A%5Citem+Two%0A%5Citem+Three%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bsinglespace%7D%25%0AThe+list+has+ended.%0A%5Cend%7Bminipage%7D%5Ckern10pt%25%0A%5Cbegin%7Bminipage%7D%7B.4%5Ctextwidth%7D%0A%5Cbegin%7Bsinglespace%2A%7D%0AHere+is+a+bulleted+list%5Cpar+%28%5Ctexttt%7Bsinglespace%2A%7D+environment%29.%0A%5Cbegin%7Bitemize%7D%0A%5Citem+One%0A%5Citem+Two%0A%5Citem+Three%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bsinglespace%2A%7D%0AThe+list+has+ended.%0A%5Cend%7Bminipage%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Приклад середовища LaTeX singlespace\*](/files/3b4ae38c60c33c0b72bf4fb6e3fe71068931659f)

**Використання команди \setstretch**

`\setstretch{*значення*}` встановлює значення `\baselinestretch` на *значення* і спричиняє *негайну* зміну `\baselineskip` спричинену `\baselinestretch`. Наведений нижче приклад використовує `\setstretch{1.618}`— дивне значення 1.618 [пояснюється далі в статті](#understanding-and-calculating-values-for-baselinestretch)...

```latex
% Дивне число 1.618 пояснюється далі в статті.
\setstretch{1.618}
Ми пишемо \verb|\setstretch{1.618}|, щоб спричинити негайну зміну міжрядкового інтервалу. Якщо б ми написали \verb|\renewcommand{\baselinestretch}{1.618}|, міжрядковий інтервал не було б змінено, доки не буде використано команду зміни шрифту, таку як \verb|\selectfont|.

\blindtext[1]
```

&#x20;[Відкрийте цей `setspace` приклад в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+the+setstretch+command\&snip=%5Cdocumentclass%5B11pt%5D%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Load+the+setspace+package%0A%5Cusepackage%7Bsetspace%7D%0A%5Cbegin%7Bdocument%7D%0A%25+The+strange+figure+of+1.618+is+explained+later+in+the+article.%0A%5Csetstretch%7B1.618%7D%0AWe+write+%5Cverb%7C%5Csetstretch%7B1.618%7D%7C+to+cause+an+immediate+change+to+the+line+spacing.+If+we+wrote+%5Cverb%7C%5Crenewcommand%7B%5Cbaselinestretch%7D%7B1.618%7D%7C+the+line+spacing+would+not+be+modified+until+a+font-changing+command%2C+such+as+%5Cverb%7C%5Cselectfont%7C%2C+is+used.%0A%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Приклад команди \setstretch](/files/8f75f46f8216bf02fe346386ee70e96873488d9c)

**Використання команди \SetSinglespace**

Наведений нижче проєкт компілюється за допомогою LuaLaTeX і використовує `fontspec` пакет для доступу до шрифтів TeX Gyre Pagella. Він порівнює два абзаци тексту, набраного шрифтом TeX Gyre Pagella: перший абзац використовує стандартний одинарний міжрядковий інтервал, а другий має більший одинарний міжрядковий інтервал завдяки застосуванню `\SetSinglespace{1.1}`. Дехто може віддати перевагу другому, дещо «розширеному» абзацу, вважаючи, що він покращує комфорт читання, але це, звісно, питання особистих уподобань.

```latex
\section*{Стандартний одинарний інтервал Computer Modern}
Звичайний текст. \blindtext[1]
\setmainfont{TeX Gyre Pagella}
\section*{Стандартний одинарний міжрядковий інтервал TeX Gyre Pagella}
Ось дещо звичайного тексту. \blindtext[1]
\section*{Відкоригований одинарний міжрядковий інтервал TeX Gyre Pagella}
Примітка: нам потрібно викликати \verb|\singlespacing| після запису
\verb|\SetSinglespace{1.1}|\SetSinglespace{1.1}\singlespacing
\begin{singlespace*}
Ось дещо звичайного тексту. \blindtext[1]
\end{singlespace*}
```

&#x20;[Відкрийте цей `setspace` приклад в Overleaf.](https://www.overleaf.com/docs?engine=lualatex\&snip_name=Example+use+of+the+SetSinglespace+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfontspec%7D%0A%5Cusepackage%7Bblindtext%7D%0A%5Cusepackage%7Bsetspace%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csection%2A%7BComputer+Modern+default+single+spacing%7D%0ASome+regular+text.+%5Cblindtext%5B1%5D%0A%5Csetmainfont%7BTeX+Gyre+Pagella%7D%0A%5Csection%2A%7BTeX+Gyre+Pagella+default+single+line+spacing%7D%0AHere+is+some+regular+text.+%5Cblindtext%5B1%5D%0A%5Csection%2A%7BTeX+Gyre+Pagella+adjusted+single+line+spacing%7D%0ANote%3A+we+need+to+issue+%5Cverb%7C%5Csinglespacing%7C+after+writing++%0A%5Cverb%7C%5CSetSinglespace%7B1.1%7D%7C%5CSetSinglespace%7B1.1%7D%5Csinglespacing%0A%5Cbegin%7Bsinglespace%2A%7D+%0AHere+is+some+regular+text.+%5Cblindtext%5B1%5D%0A%5Cend%7Bsinglespace%2A%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Демонстрація команди LaTeX \SetSinglespace](/files/aefef3324d1b39f024e5dc68f0b4d697311ef952)

У наступному розділі ми розглянемо команди `\baselinestretch` та `\linespread`.

#### Розуміння \baselinestretch і \linespread

Частина дизайну LaTeX для обробки міжрядкового інтервалу та змін шрифту (розмір шрифту, сімейство шрифтів, кодування шрифту тощо) використовує дві команди, з якими ви можете зіткнутися:

* **`\baselinestretch`**: ця команда зберігає масштабувальний коефіцієнт, що використовується для множення (масштабування) поточного значення [`\baselineskip`](#baselineskip-tex-primitive). Це масштабування зазвичай застосовується, коли *наступного разу* використовується команда вибору шрифту — наприклад, `\selectfont`. Щоб змінити значення, збережене в `\baselinestretch` , слід написати `\renewcommand{\baselinestretch}{*scale*}`
  * **Примітка**: Якщо ви напишете `\renewcommand{\baselinestretch}{*scale*}` в основній частині документа, нове значення `\baselinestretch` [не набуде негайної сили](https://tex.stackexchange.com/questions/241120/why-does-changing-baselinestretch-not-change-line-spacing): новий `*scale*` коефіцієнт буде збережено для подальшого використання. Щоб негайно використати/застосувати нове`*scale*` значення, напишіть `\selectfont` як показано в [фрагменті коду нижче](#demonstrating-baselinestretch).
* **`\linespread{*scale*}`**: можна використовувати для зміни [`\baselineskip`](#baselineskip-tex-primitive) без впливу на поточний розмір шрифту. Ця команда встановлює `\baselinestretch` на `*scale*` яке згодом змінює `\baselineskip` на `*scale* × [\baselineskip](#baselineskip-tex-primitive)`. Однак це масштабування також не відбувається негайно, якщо лише команда `\linespread` використовується в преамбулі документа. Якщо `\linespread` використовується в основній частині документа, вона набуває чинності після того, як буде використано наступну команду задання/вибору розміру шрифту.

Виходячи з вищесказаного, можна:

* `\renewcommand{\baselinestretch}{*scale*}\selectfont` або
* `\linespread{*scale*}\selectfont`

можна використовувати для зміни міжрядкового інтервалу, і обидва варіанти працюватимуть і після змін розміру шрифту, як показано в прикладі нижче. Тож який слід використовувати? Див. [цю коротку дискусію на tex.stackexchange](https://tex.stackexchange.com/a/241121).

**Демонстрація \linespread**

У наведеному нижче прикладі використано `\linespread{2.5}` у преамбулі документа, що змінює міжрядковий інтервал без потреби в додаткових командах вибору шрифту:

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=18cm,paperwidth=14cm,textwidth=12cm]{geometry}
% Завантажуємо пакет blindtext для тексту-заповнювача
\usepackage{blindtext}
% Використання \linespread у преамбулі змінює
% міжрядковий інтервал без потреби в додаткових
% командах вибору шрифту, таких як \selectfont
\linespread{2.5}
\begin{document}
\blindtext[1] % Рядки зазнають впливу \linespread{2.5}
\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+use+of+the+linestretch+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%25+Using+%5Clinespread+in+the+preamble+changes+%0A%25+line+spacing+without+requiring+additional%0A%25+font-selection+commands%2C+such+as+%5Cselectfont%0A%5Clinespread%7B2.5%7D+%0A%5Cbegin%7Bdocument%7D%0A%5Cblindtext%5B1%5D+%25+The+lines+are+affected+by+%5Clinespread%7B2.5%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Використання команди linespread](/files/cf70950a13b7db6b350b203c89b41e81a535bbef)

Використання `\linespread{2.5}` в основній частині документа (після `\begin{document}`) *довелося б* вимагати команд вибору шрифту, щоб активувати зміну міжрядкового інтервалу. Відкрийте наведений нижче код в Overleaf і порівняйте результат з попереднім прикладом:

```latex
Оскільки наведена нижче команда \verb|\linespread| використовується в основній частині документа, для зміни міжрядкового інтервалу потрібна команда вибору шрифту. Розкоментуйте \verb|\selectfont|, щоб побачити різницю:

\linespread{2.5}%\selectfont

% Без \selectfont наступні рядки абзацу
% не зазнають зазнають впливу \linespread{2.5}:
\blindtext[1]
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Second+example+using+the+linestretch+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D14cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%25+Load+blindtext+package+for+dummy+text%0A%5Cusepackage%7Bblindtext%7D%0A%5Cbegin%7Bdocument%7D%0ABecause+the+following+%5Cverb%7C%5Clinespread%7C+command+is+used+in+the+document+body%2C+a+font-selection+command+is+required+to+change+the+line+spacing.+Un-comment+%5Cverb%7C%5Cselectfont%7C+to+see+the+difference%3A%0A%0A%5Clinespread%7B2.5%7D%25%5Cselectfont%0A+%0A%25+Without+%5Cselectfont+the+following+paragraph+lines+are+%0A%25+unaffected+affected+by+%5Clinespread%7B2.5%7D%3A+%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![використання команди LaTeX \linespread у документі](/files/c58c4174c35fd963dcb4c283cb2e93c61e54b1b4)

**Демонстрація \baselinestretch**

Наведений нижче приклад демонструє `\baselinestretch` та `\selectfont` щоб показати відповідний вплив(и) на [`\baselineskip`](#baselineskip-tex-primitive):

```latex
Значення за замовчуванням \verb|\baselineskip|=\the\baselineskip. Тепер оновіть \verb|\baselinestretch|\renewcommand\baselinestretch{2.5}. Однак, хоча ми вже виконали

\vspace{5pt}
\verb|\renewcommand\baselinestretch{2.5}|
\vspace{5pt}

\noindent воно \textit{ще не} вплинуло на щось: нове значення \verb|\baselinestretch| збережено, але не застосовано. Ми можемо викликати команду \verb|\selectfont|, щоб зміна набула чинності; але поки що значення \verb|\baselineskip| все ще \the\baselineskip{} (без змін).

Якщо ми тепер виконаємо \verb|\selectfont|, зміна для \verb|\baselinestretch|, встановлена на 2.5, тепер набуде чинності — \selectfont навіть посеред абзацу. Тепер значення \verb|\baselineskip| дорівнює \the\baselineskip{} (= \(2.5 \times 12=30\mathrm{pt}\)).

Що станеться, якщо ми змінимо розмір шрифту на 14pt і \verb|\baselineskip| на 16pt за допомогою команд \verb|\fontsize{14}{16}\selectfont|?

\fontsize{14}{16}\selectfont Тепер \verb|\baselineskip| \textit{не} 16pt, а \the\baselineskip{} тому що значення \verb|\baselinestretch| (2.5) було збережено та застосовано, що дає \verb|\baselineskip| = \(2.5 \times 16=40\mathrm{pt}\).

\section{\texttt{\bfseries\string\linespread}}
Команду \verb|\linespread| можна використовувати для зміни \verb|\baselineskip| без зміни розміру шрифту.
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Demonstrating+baselinestretch\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D18cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D14cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bsetspace%7D%0A%5Cbegin%7Bdocument%7D%0AThe+default+value+of+%5Cverb%7C%5Cbaselineskip%7C%3D%5Cthe%5Cbaselineskip.+Now+update+%5Cverb%7C%5Cbaselinestretch%7C%5Crenewcommand%5Cbaselinestretch%7B2.5%7D.+However%2C+although+we+have+executed%0A%0A%5Cvspace%7B5pt%7D%0A%5Cverb%7C%5Crenewcommand%5Cbaselinestretch%7B2.5%7D%7C+%0A%5Cvspace%7B5pt%7D%0A%0A%5Cnoindent+it+%5Ctextit%7Bhas+not%7D+%28yet%29+had+any+effect%3A+the+new+value+of+%5Cverb%7C%5Cbaselinestretch%7C+is+stored%2C+but+not+actioned.+We+can+issue+a+%5Cverb%7C%5Cselectfont%7C+command+to+make+the+change+take+effect%3B+but%2C+for+now%2C+the+value+of+%5Cverb%7C%5Cbaselineskip%7C+is+still+%5Cthe%5Cbaselineskip%7B%7D+%28unchanged%29.+%0A%0AIf+we+now+execute+%5Cverb%7C%5Cselectfont%7C+the+change+to+%5Cverb%7C%5Cbaselinestretch%7C%2C+setting+it+to+2.5%2C+will+now+take+effect---%5Cselectfont+even+though+we+are+in+the+middle+of+a+paragraph.+Now%2C+the+value+of+%5Cverb%7C%5Cbaselineskip%7C+is+%5Cthe%5Cbaselineskip%7B%7D+%28%3D+%5C%282.5+%5Ctimes+12%3D30%5Cmathrm%7Bpt%7D%5C%29%29.%0A%0AWhat+happens+if+we+change+the+font+size+to+14pt+and+%5Cverb%7C%5Cbaselineskip%7C+to+16pt+using+the+commands+%5Cverb%7C%5Cfontsize%7B14%7D%7B16%7D%5Cselectfont%7C%3F+%0A%0A%5Cfontsize%7B14%7D%7B16%7D%5Cselectfont+Now%2C+%5Cverb%7C%5Cbaselineskip%7C+is+%5Ctextit%7Bnot%7D+16pt+but+%5Cthe%5Cbaselineskip%7B%7D+because+the+value+of++%5Cverb%7C%5Cbaselinestretch%7C+%282.5%29+has+been+preserved+and+applied%2C+giving+%5Cverb%7C%5Cbaselineskip%7C+%3D+%5C%282.5+%5Ctimes+16%3D40%5Cmathrm%7Bpt%7D%5C%29.%0A%0A%5Csection%7B%5Ctexttt%7B%5Cbfseries%5Cstring%5Clinespread%7D%7D%0AThe+%5Cverb%7C%5Clinespread%7C+command+can+be+used+to+modify+%5Cverb%7C%5Cbaselineskip%7C+without+changing+the+font+size.%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Демонстрація baselinestretch](/files/1c362ab48533e73a64996c7b6181596ac80da9e5)

#### Як визначається і змінюється «міжрядковий інтервал» у пакеті setspace?

Функція *точне* визначення та *вимірювання* «міжрядкового інтервалу» підлягають інтерпретації, що може призвести до різних реалізацій у програмних системах/застосунках. Очевидно, що `setspace` пакет має спиратися на робоче визначення міжрядкового інтервалу, щоб він міг підтримувати верстання рядків «з одинарним» і «з подвійним» інтервалом, або будь-якого іншого кратного інтервалу. Але які змінні змінює `setspace` щоб отримати рядки з різним рівнем порожнього простору між ними?

На щастя, [обговорення на tex.stackexchange](https://tex.stackexchange.com/a/30106) та [коментарі в коді пакета](https://tex.stackexchange.com/a/632830) пояснюють, як `setspace` реалізує міжрядковий інтервал: він встановлює значення `\baselineskip` використовуючи кратне від кегля шрифту.

**Короткі нотатки про шрифти та кегль**

Використання шрифтів певного кегля означає застосування *масштабувального коефіцієнта* до форм символів (гліфів) у цих шрифтах; після масштабування відповідно до кегля видимий розмір символу є функцією дизайну шрифту (гарнітури). Кегль не має універсального, жорсткого зв’язку з фактичним розміром відображення форм символів у шрифтах.

Наведене нижче зображення показує малі літери «abc», оформлені 4 різними шрифтами, і всі *відображені в однаковому кеглі*. Зверніть увагу, як «розмір» цих малих літер змінюється залежно від дизайну шрифту (гарнітури), хоча всі вони набрані в *однаковому* кеглі:

![Різні шрифти в одному кеглі](/files/5879d2fbcc7f8cb8f30dc299d64461c6c0ba533d)

#### Одинарний міжрядковий інтервал у пакеті setspace

Ми можемо використати [обговорення на tex.stackexchange](https://tex.stackexchange.com/a/30106) як основу для деяких подальших пояснень.

Базовий документ, що використовує клас `article` має розмір текстового шрифту за замовчуванням 10pt із `\baselineskip` у 12pt. З параметром \[11pt] або \[12pt] клас article використовує більший розмір тексту і відповідно більше значення для `\baselineskip` як показано в наступній таблиці:

| опцію                      | розмір шрифту               | $$\texttt{\baselineskip}$$ | $$\displaystyle\frac{\texttt{\baselineskip}}{\text{font size}}$$ |
| -------------------------- | --------------------------- | -------------------------- | ---------------------------------------------------------------- |
| \[10pt] (за замовчуванням) | 10pt                        | 12pt                       | 1.2                                                              |
| \[11pt]                    | 10.95pt$${}^{\textbf{\*}}$$ | 13.6pt                     | 1.24                                                             |
| \[12pt]                    | 12pt                        | 14.5                       | 1.21                                                             |

$${}^{\textbf{\*}}$$Причина аномального значення `10.95pt`, а не точно `11pt`, чудово пояснена в цій [публікації на Reddit](https://www.reddit.com/r/LaTeX/comments/ihle9h/why_does_latex_use_1095pt_text_when_the_11pt/).

Як показано в таблиці, для кожної комбінації кегля тексту і відповідного стандартного (тобто одинарного міжрядкового інтервалу) значення `\baselineskip`, співвідношення

$$\frac{\texttt{\baselineskip}}{\text{font size}}$$

є близьким до 1.2. Це значення співвідношення позначає одинарний міжрядковий інтервал і є основою для обчислень міжрядкового інтервалу, що використовуються `setspace` пакет.

**Розуміння та обчислення значень \baselinestretch**

Щоб досягти певного кратного міжрядкового інтервалу, такого як 1.5, 2, 3 тощо, `\baselinestretch` команду потрібно встановити в, на перший погляд, [«дивні» значення](https://tex.stackexchange.com/a/30106); наприклад, через [за допомогою `\linespread` команду](https://texblog.org/2011/09/30/quick-note-on-line-spacing/). У цьому розділі ми детальніше розглянемо `\baselinestretch` щоб побачити, як виникають ці «дивні» значення.

Виберімо документ із розміром шрифту за замовчуванням $$f$$ і стандартним `\baselineskip` значення $$\text{dbls}\_1$$, де нижній індекс $${}\_1$$ позначає стандартне `\baselineskip` значення одинарного міжрядкового інтервалу для кегля $$f$$.

Ми ***визначимо*** одинарний міжрядковий інтервал як таке співвідношення, яке ми будемо називати $$\alpha\_f$$:

$$\frac{\text{dbls}\_1}{f}=\alpha\_f$$

Для заданого кегля $$f$$, також *визначимо* визначимо такі значення міжрядкового інтервалу:

* кратний міжрядковий інтервал 1.5 дорівнює *визначається як* як

$$\frac{\text{dbls}\_{1.5}}{f}=1.5$$

* кратний міжрядковий інтервал 2.0 дорівнює *визначається як* як

$$\frac{\text{dbls}\_{2.0}}{f}=2.0$$

* кратний $$m$$, міжрядковий інтервал дорівнює *визначається як* як

$$\frac{\text{dbls}\_{m}}{f}=m$$

Використовуючи наш одинарний міжрядковий інтервал, визначений співвідношенням $$\alpha\_f$$, ми можемо записати такий «псевдокод», щоб обчислити значення `\baselinestretch` , яке відповідає будь-якому кратному міжрядковому інтервалу $$m$$:

$$\begin{align\*} \texttt{multi spacing } (m) &= \text{a constant } (\lambda) \times \texttt{single spacing}\ \frac{\text{dbls}\_{m}}{f}&=\lambda \times \alpha\_f\ m&=\lambda\alpha\_f\ \lambda&=\frac{m}{\alpha\_f}\kern5pt(\text{refer to }\lambda\text{ as }\texttt{\baselinestretch})\ \implies \texttt{\baselinestretch}&=\frac{m}{\alpha\_f} \end{align\*}$$

Скористаймося `11pt` текстом (насправді `10.95pt`) і значення за замовчуванням `\baselineskip` значення `13.6pt` для обчислення `\baselinestretch` для *подвійний* міжрядковий інтервал:

$$\begin{align\*} m&=2.0\ \texttt{\baselinestretch}&=\frac{2.0}{\alpha\_f}\ &=\frac{2.0}{\frac{\text{dbls}\_1}{f}}\ &=\frac{2.0}{\frac{13.6}{11}}\ &=2.0 \times \frac{11}{13.6}\ &=1.618\ \end{align\*}$$

Наступний фрагмент коду використовується в `setspace` пакеті, щоб досягти `\doublespacing` коли розмір шрифту становить 11pt. Зверніть увагу, як значення `1.618`, як обчислено вище, зберігається в команді `\baselinestretch`:

```latex
\newcommand{\doublespacing}{%
  \setstretch {1.667}%  за замовчуванням
  \ifcase \@ptsize \relax % 10pt
    \setstretch {1.667}%
  \or % 11pt
    \setstretch {1.618}%
  \or % 12pt
    \setstretch {1.655}%
  \fi
}
```

Використовуючи `article` клас документа з опцією шрифту 11pt, наведений нижче приклад порівнює `\doublespacing` з `інтервал` середовище, що використовує наше обчислене значення `1.618` для `\baselinestretch`. Не дивно, що `\baselineskip` значення однакові (`22.00475pt`):

```latex
\begingroup
\doublespacing
\verb|\baselineskip|=\texttt{\the\baselineskip} (via \verb|\doublespacing)|

\blindtext[1]

\endgroup

\begin{spacing}{1.618}
\verb|\baselineskip|=\texttt{\the\baselineskip} (via \verb|\begin{spacing}{1.618})|

\blindtext[1]
\end{spacing}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Demonstrating+baselinestretch+calculations\&snip=%5Cdocumentclass%5B11pt%5D%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D25cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D14cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bsetspace%7D%0A%5Cusepackage%7Bblindtext%7D+%25+For+dummy+text.%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Cdoublespacing%0A%5Cverb%7C%5Cbaselineskip%7C%3D%5Ctexttt%7B%5Cthe%5Cbaselineskip%7D+%28via+%5Cverb%7C%5Cdoublespacing%29%7C%0A%0A%5Cblindtext%5B1%5D%0A%0A%5Cendgroup%0A%0A%5Cbegin%7Bspacing%7D%7B1.618%7D%0A%5Cverb%7C%5Cbaselineskip%7C%3D%5Ctexttt%7B%5Cthe%5Cbaselineskip%7D+%28via+%5Cverb%7C%5Cbegin%7Bspacing%7D%7B1.618%7D%29%7C%0A%0A%5Cblindtext%5B1%5D%0A%5Cend%7Bspacing%7D%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![демонстрація \baselinestretch](/files/4290048e9e3fc2eed00d4483ada9e460fed0cb34)

Подібні обчислення `\baselinestretch` значень застосовуються й до інших розмірів шрифту та комбінацій міжрядкового інтервалу, як наведено в наведених нижче таблицях:

![параметри setspace](/files/5e6190598eb5270a041abb424c4edd727a7daf34)

## Використання команд параметрів TeX/LaTeX

У наступних розділах розглядається низка команд, пов’язаних із інтервалами/форматуванням абзаців: деякі з цих команд є *вбудовані в* системи верстки TeX, інші — макроси TeX/LaTeX. Команди, вбудовані в рушії TeX, відомі як *примітивів*, тобто вони є *фундаментальний* та *непохідними* оскільки, на відміну від макросів, примітиви не побудовані з послідовностей інших команд.

Зокрема, ми розглянемо низку примітивних *параметричних команд* які підтримуються всіма рушіями TeX, зокрема pdfTeX, XeTeX і LuaTeX. Команди параметрів, пов’язані з абзацами чи ні, використовуються, щоб *отримати поточне значення* відповідного параметра, або *встановити цей параметр у нове значення*. Наприклад, `\parskip` команда, примітив, визначає значення параметра, який керує кількістю порожнього простору, що вставляється між двома набраними абзацами.

Щоб *отримати* (тут — надрукувати) поточне значення `\parskip` ви б написали:

```latex
\the\parskip
```

Щоб *set* поточне значення `\parskip` на `1pt plus2pt` (гнучкий клей) ви могли б написати щось на кшталт цього:

```latex
\setlength{\parskip}{1pt plus2pt}
```

Ми також обговорюємо деякі корисні TeX/LaTeX *макросів*, команд вищого рівня, записаних і побудованих із послідовності складових команд.

### Команди, що використовуються для міжабзацних інтервалів

Наступні команди (примітиви й макроси) можна використовувати, щоб впливати на міжабзацні інтервали. Деякі з них розглянуто докладніше; доступ до них можна отримати, перейшовши за посиланням із назви команди.

#### Примітивні команди

* [`**\parindent**`](#parindent-tex-primitive): величина відступу (порожнього простору), що додається до першого рядка абзацу.
* [`**\parskip**`](#parskip-tex-primitive): кількість гнучкого порожнього простору («клею»), що вставляється між абзацами.
* [`**\rightskip**`](#leftskip-and-rightskip-tex-primitives): гнучкий інтервал (клей), вставлений праворуч від кожного рядка абзацу.
* [`**\leftskip**`](#leftskip-and-rightskip-tex-primitives): гнучкий інтервал (клей), вставлений ліворуч від кожного рядка абзацу.
* [`**\baselineskip**`](#baselineskip-tex-primitive): значення цього параметра виконує дві ролі:
  * воно задає бажану відстань між базовими лініями тексту в абзаці;
  * воно використовується для обчислення (змінної) кількості простору (клею), що додається між рядками, щоб досягти бажаної відстані між базовими лініями ([див. далі в статті](#how-the-space-glue-between-paragraph-lines-is-calculated)).
* [`**\lineskiplimit**`](#lineskip-and-lineskiplimit-tex-primitives): параметр, значення якого визначає мінімально прийнятну відстань між двома суміжними рядками абзацу.
* [`**\lineskip**`](#lineskip-and-lineskiplimit-tex-primitives): кількість простору (клею), що вставляється між двома рядками в абзаці, якщо обчислений `\baselineskip` клей призвів би до занадто малого проміжку між рядками.
* `**\parfillskip**`: дуже гнучкий клей, який додається наприкінці останнього рядка абзацу, щоб «заповнити» його порожнім простором; візуальний приклад див. на ілюстрації в розділі [*Візуалізація інших типів абзацного клею*](#visualizing-other-types-of-paragraph-glue).

#### Команди макросів

Наступні макрокоманди TeX/LaTeX часто використовуються для зміни міжабзацних інтервалів:

* [`**\offinterlineskip**` та `**\nointerlineskip**`](#offinterlineskipandnointerlineskip): команди, які можна використовувати, щоб вимкнути обчислення та вставлення `\baselineskip` клею;
* [`**\baselinestretch**`](#understanding-and-calculating-values-for-baselinestretch): команда, яка зберігає числовий коефіцієнт, що використовується для обчислення значення `\baselineskip` коли вибрано шрифт. За замовчуванням має значення 1;
* [`**\linespread**`](#demonstrating-linespread): цю команду можна використовувати для зміни поточного значення `\baselinestretch`.

### Гнучкий інтервал (клей)

Рушії TeX досягають ефектів інтервалів, зокрема всередині абзаців або між ними, завдяки використанню гнучкого порожнього простору, який називається *клей* який можна розтягувати або стискати залежно від потрібної кількості простору. Якщо ви хочете дізнатися про поняття клею в TeX, докладніше це описано в таких статтях Overleaf:

* [Дослідження недозаповнених або переповнених боксів і обчислень «поганості»](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv)
* [Як TeX обчислює налаштування клею в \hbox](/latex/uk/dokladni-statti/24-how-tex-calculates-glue-settings-in-an-hbox.md)
* [Розуміння попереджень про недозаповнені та переповнені бокси](/latex/uk/baza-znan/138-understanding-underfull-and-overfull-box-warnings.md).

## Основи: параметричні команди та приклади

У цьому розділі ми пояснюємо низку команд параметрів, пов’язаних з абзацами, і наводимо приклади їх використання.

### \parindent (TeX primitive)

Ця команда параметра задає величину відступу (порожнього простору), що додається до першого рядка абзацу. Її можна змінити за допомогою LaTeX `\setlength` команди; наприклад, щоб робити відступ абзаців на `15pt` set `\parindent` на `15pt` можна написати:

```latex
\setlength{\parindent}{15pt}
```

Зверніть увагу:

* ви можете змінювати `\parindent` в межах групи, забезпечуючи локалізацію її дії до абзаців у цій групі;
* `\parindent` може бути від’ємним, утворюючи «зворотний відступ» замість відступу;
* за замовчуванням LaTeX не робить відступу в першому абзаці після заголовка розділу документа (`\section{...}` тощо).

Наступний приклад демонструє використання `\parindent`.

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Створіть команду для збереження абзацу тексту
\newcommand{\testpar}{\texttt{\string\parindent=\the\parindent\ }Коли \TeX{} верстає абзац, він розглядає кожен окремий символ як 2D «бокс» із певною шириною, висотою та глибиною.\par}
\begin{document}

% Встановіть \parskip, щоб залишати 10pt між абзацами
\setlength{\parskip}{10pt}

% Встановіть значення \parindent рівним 0pt
\setlength{\parindent}{0pt}
\testpar

% Встановіть значення \parindent рівним 10pt
\setlength{\parindent}{10pt}
\testpar

% Встановіть \parindent у групі
{\setlength{\parindent}{50pt}\testpar}

% Тепер \parindent знову дорівнює 10pt
\testpar

% Так, \parindent може бути від’ємним
\setlength{\parindent}{-20pt}
\testpar
\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+paragraph+indentation\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Create+a+command+to+hold+a+paragraph+of+text%0A%5Cnewcommand%7B%5Ctestpar%7D%7B%5Ctexttt%7B%5Cstring%5Cparindent%3D%5Cthe%5Cparindent%5C+%7DWhen+%5CTeX%7B%7D+typesets+a+paragraph+it+treats+each+individual+character+as+a+2D+%60%60box%27%27+with+a+specific+width%2C+height+and+depth.%5Cpar%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%25+Set+%5Cparskip+to+put+10pt+between+paragraphs%0A%5Csetlength%7B%5Cparskip%7D%7B10pt%7D%0A%0A%25+Set+the+value+of+%5Cparindent+to+0pt%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Ctestpar%0A%0A%25+Set+the+value+of+%5Cparindent+to+10pt%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Ctestpar%0A%0A%25+Set+%5Cparindent+in+a+group%0A%7B%5Csetlength%7B%5Cparindent%7D%7B50pt%7D%5Ctestpar%7D%0A%0A%25+Now+%5Cparindent+is+again+10pt%0A%5Ctestpar%0A%0A%25+Yes%2C+you+can+have+a+negative+%5Cparindent%0A%5Csetlength%7B%5Cparindent%7D%7B-20pt%7D%0A%5Ctestpar%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Використання різних значень абзацного відступу в LaTeX](/files/bb3a7fee7b22633aefc25311befb91ee2feff312)

### \parskip (TeX primitive)

Читабельність тексту можна підвищити, розділяючи абзаци певною кількістю порожнього простору, яка змінюватиметься залежно від естетики оформлення. TeX/LaTeX дають користувачам змогу керувати цим міжабзацним інтервалом через `\parskip` команду параметра.

* **Порада від `parskip` accents**: Пакет [пакета parskip](https://ctan.org/pkg/parskip) рекомендує безпосередньо змінювати `\parskip` може «призвести до появи вертикальних проміжків у неочікуваних місцях» (у документі LaTeX). `parskip` Пакет намагається виправити проблеми з інтервалами, які можуть виникнути через зміну значення `\parskip`—наприклад, у змісті та середовищах списків. Також див. розділ пакета [`parskip` в цій статті](#the-parskip-package).

Щоб вручну встановити поточне значення `\parskip` використовуйте LaTeX `\setlength` команду; наприклад, щоб розділяти абзаци на 3pt, можна написати:

```latex
\setlength{\parskip}{3pt}
```

Наступний приклад демонструє використання `\parskip`:

```latex
\documentclass{article}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Створіть команду для збереження абзацу тексту
\newcommand{\testpar}{\noindent Поточне значення \texttt{\string\parskip} — \texttt{\the\parskip}. Коли \TeX{} верстає абзац, він розглядає кожен окремий символ як 2D~«бокс» із певною шириною, висотою та глибиною.\par}
\begin{document}
\testpar
% Встановіть \parskip на 5pt
\setlength{\parskip}{5pt}\testpar
% Встановіть parskip на 10pt
\setlength{\parskip}{10pt}\testpar
% Встановіть \parskip на 25pt (але в групі)
{\setlength{\parskip}{25pt}\testpar}
% Група закінчується, тепер \parskip знову дорівнює 10pt
\testpar
% Так, \parskip може бути від’ємним
\setlength{\parskip}{-20pt}\testpar
\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+parskip+settings\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Create+a+command+to+hold+a+paragraph+of+text%0A%5Cnewcommand%7B%5Ctestpar%7D%7B%5Cnoindent+The+current+value+of+%5Ctexttt%7B%5Cstring%5Cparskip%7D+is+%5Ctexttt%7B%5Cthe%5Cparskip%7D.+When+%5CTeX%7B%7D+typesets+a+paragraph+it+treats+each+individual+character+as+a+2D%7E%60%60box%27%27+with+a+specific+width%2C+height+and+depth.%5Cpar%7D%0A%5Cbegin%7Bdocument%7D%0A%5Ctestpar%0A%25+Set+%5Cparskip+to+5pt+%0A%5Csetlength%7B%5Cparskip%7D%7B5pt%7D%5Ctestpar%0A%25+Set+parskip+to+10pt%0A%5Csetlength%7B%5Cparskip%7D%7B10pt%7D%5Ctestpar%0A%25+Set+%5Cparskip+to+25pt+%28but+in+a+group%29%0A%7B%5Csetlength%7B%5Cparskip%7D%7B25pt%7D%5Ctestpar%7D%0A%25+Group+ends%2C+now+%5Cparskip+is+again+10pt%0A%5Ctestpar%0A%25+Yes%2C+you+can+have+a+negative+%5Cparskip%0A%5Csetlength%7B%5Cparskip%7D%7B-20pt%7D%5Ctestpar%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Демонстрація використання \parskip у LaTeX](/files/12af89db7a212df12477b5c13929c03ac87f0dd3)

#### Гнучкий \parskip

Традиційно, `\parskip` не є *фіксованим* значенням, що призвело б до однакової кількості простору між усіма абзацами. Натомість, `\parskip` зазвичай визначається як «гнучкий простір» (так званий клей), який дає змогу TeX розтягувати або стискати простір між абзацами, допомагаючи розмістити вміст на сторінці та знайти «вдале» місце для розриву сторінки.

Щоб зробити `\parskip` гнучким, його слід записати у вигляді специфікації клею:

`\setlength{\parskip}{*fixed amount* **plus** *amount to stretch* **minus** *amount to shrink*}`

де `**плюс**` та `**мінус**` є *keywords* використовується TeX/LaTeX для позначення *кількості для розтягування* або *кількості для стискання* що містяться в специфікації клею. Стаття Overleaf [*Дослідження недозаповнених або переповнених боксів і обчислень «поганості»*](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv) містить докладніше обговорення клею.

Наприклад, щоб дозволити `\parskip` змінюватися між `3 + 1 = 4pt` та `3 — 1 = 2pt` ви могли б записати

```latex
\setlength{\parskip}{3pt plus1pt minus1pt}
```

### \leftskip and \rightskip (TeX primitives)

Рушії TeX надають дві команди параметрів, які додають простір (клей) ліворуч і праворуч від кожного рядка у набраному абзаці. Як випливає з назв:

* `\leftskip` вставляє простір (клей) ліворуч від кожного рядка в абзаці;
* `\rightskip` вставляє простір (клей) праворуч від кожного рядка в абзаці.

Наведені нижче приклади використовують `\leftskip` та `\rightskip` для безпосередньої зміни вирівнювання абзацу; однак... зміни вирівнювання тексту зазвичай найкраще досягати за допомогою відповідних середовищ або пакетів LaTeX — наприклад, див. [статтю Overleaf про вирівнювання тексту](/latex/uk/formatuvannya/06-text-alignment.md). Хоча ми демонструємо поведінку деяких низькорівневих (примітивних) команд параметрів, наданих рушіями TeX, загалом бажано, де це можливо, використовувати відповідні пакети LaTeX.

#### Зробити \leftskip фіксованим, а \rightskip гнучким

Наступний приклад створює два абзаци: перший використовує стандартні значення LaTeX для `\leftskip` та `\rightskip` а другий абзац набирається з такими параметрами:

```latex
\leftskip 10pt
\rightskip 0pt plus 1 fill
```

Відкрийте наступний проєкт Overleaf, щоб побачити результат:

```latex
\documentclass{article}
\title{Другий приклад leftskip і rightskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Встановіть значення деяких параметрів, пов’язаних з абзацами
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
\setlength{\baselineskip}{12pt}

\begin{document}
\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA і \mytextB, кожна з яких містить текст абзацу.
% Наберіть абзац зі стандартними значеннями \leftskip і \rightskip

\mytextB

% Встановіть \leftskip і \rightskip у нові значення
\leftskip 10pt
\rightskip 0pt plus 1fill
\vspace{8pt}

% Тепер повторно наберіть той самий абзац
\mytextB

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Встановлення клею \leftskip у LaTeX](/files/61c2ab85ab4d97fcb653c6a37a1d6828d7b96a89)

Наведена нижче графіка — це анотована версія другого абзацу, створеного наведеним вище прикладом. Вона покликана підкреслити та показати кількість `\leftskip` та `\rightskip` клею, вставленого в рядки абзацу, разом із `\parindent` простором для першого рядка:

![Встановлення клею \leftskip у LaTeX](/files/9f8d51c7995179f8b44ed639ea5373cf78f6da71)

Зверніть увагу, що `\leftskip` клей має фіксований розмір (10pt), але `\rightskip` клей розтягнувся, щоб забезпечити будь-яку кількість порожнього простору, потрібну для заповнення правого боку кожного рядка. Ця «гнучкість» зумовлена специфікацією `\rightskip` яка містить `plus 1 fill`— забезпечуючи «нескінченно розтяжну» форму клею.

#### Зробити \rightskip фіксованим, а \leftskip гнучким

Наступний приклад створює два абзаци: перший використовує стандартні значення LaTeX для `\leftskip` та `\rightskip` а другий абзац набирається з такими параметрами:

```latex
\leftskip 0pt plus 1 fill
\rightskip 10pt
```

Відкрийте наступний проєкт Overleaf, щоб побачити результат:

```latex
\documentclass{article}
\title{Приклади leftskip і rightskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Встановіть значення деяких параметрів, пов’язаних з абзацами
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
\setlength{\baselineskip}{12pt}

\begin{document}
\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA і \mytextB, кожна з яких містить текст абзацу.
% Наберіть абзац зі стандартними значеннями \leftskip і \rightskip

\mytextB

% Встановіть \leftskip і \rightskip у нові значення
\rightskip 10pt
\leftskip 0pt plus 1fill
\vspace{8pt}

% Тепер повторно наберіть той самий абзац
\mytextB

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Встановлення клею \rightskip у LaTeX](/files/8710e9eb86bb4752a1115be87be8fedd72fd3e18)

Наведена нижче графіка — це анотована версія другого абзацу, створеного прикладом вище. Вона покликана підкреслити та показати кількість `\leftskip` та `\rightskip` клею, вставленого в рядки абзацу, разом із `\parindent` простором для першого рядка:

![Встановлення клею \rightskip у LaTeX](/files/51c8d31b60bc5b2f7d75ef7052690c38a9180e3d)

Зверніть увагу, що `\rightskip` клей має фіксований розмір (10pt), але `\leftskip` клей розтягнувся, щоб забезпечити будь-яку кількість порожнього простору, потрібну для заповнення лівого боку кожного рядка. Ця «гнучкість» зумовлена специфікацією `\leftskip` яка містить `plus 1 fill`— забезпечуючи «нескінченно розтяжну» форму клею.

#### Встановлення \leftskip і \rightskip у гнучкі значення

Наступний приклад створює два абзаци: перший використовує стандартні значення LaTeX для `\leftskip` та `\rightskip` і другий використовує такі гнучкі налаштування клею:

```latex
\leftskip 0pt plus 1fill
\rightskip 0pt plus 1fill
```

Ці налаштування призводять до центрування рядків абзацу:

```latex
\documentclass{article}
\title{Приклади leftskip і rightskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight==16cm,paperwidth==12cm,textwidth=8cm]{geometry}
% Встановіть значення деяких параметрів, пов’язаних з абзацами
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
\setlength{\baselineskip}{12pt}

\begin{document}
\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA і \mytextB, які визначають текст для двох абзаців
% Наберіть абзац зі стандартними значеннями \leftskip і \rightskip

\mytextB

% Встановіть \leftskip і \rightskip у «надзвичайно гнучкі» параметри клею
\leftskip 0pt plus 1fill
\rightskip 0pt plus 1fill
\vspace{20pt}

% Тепер повторно наберіть той самий абзац
\mytextB

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Приклад, що показує \leftskip і \rightskip](/files/b77d94de6d79adcd95f7487323675ed8ae70e3d8)

Наведена нижче графіка — це анотована версія другого абзацу, створеного прикладом вище. Вона покликана підкреслити та показати кількість `\leftskip` та `\rightskip` клею, вставленого в рядки абзацу, разом із `\parindent` простором для першого рядка:

![Приклад, що показує \leftskip і \rightskip](/files/fd4029eea9b2e23f8897f977cd97ba156e2cfdf0)

Зверніть увагу, що обидва `\leftskip` та `\rightskip` визначені як `0pt plus 1fill` що робить їх однаково «нескінченно гнучкими»; отже, вони розтягуються на однакову величину, унаслідок чого набрані рядки вирівнюються по центру.

#### Встановлення \leftskip і \rightskip у групі

Наступний приклад показує, як тимчасово змінювати `\leftskip` та `\rightskip` їх, укладаючи в групу. У нашому прикладі група створюється за допомогою `\begingroup`... `\endgroup`, як показано в наведеному нижче фрагменті коду:

```latex
\begingroup
\leftskip 0pt plus 1fill
\rightskip 0pt plus 1fill
\mytextB
\endgroup
```

Перший абзац набрано з «надзвичайно гнучким» клеєм для `\leftskip` та `\rightskip`:

```latex
\leftskip 0pt plus 1fill
\rightskip 0pt plus 1fill
```

але другий абзац використовує стандартні значення LaTeX:

```latex
\documentclass{article}
\title{Ще один приклад leftskip і rightskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Встановіть значення деяких параметрів, пов’язаних з абзацами
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
\setlength{\baselineskip}{12pt}

\begin{document}
\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA і \mytextB, які визначають текст для двох абзаців
% Тут ми змінюємо \leftskip і \rightskip на «надзвичайно гнучкі» параметри клею
% у межах групи, створеної за допомогою \begingroup ... \endgroup

\begingroup
\leftskip 0pt plus 1fill
\rightskip 0pt plus 1fill
\mytextB
\endgroup

% Тепер повторно наберіть той самий абзац після закриття групи
% через що \leftskip і \rightskip повертаються до попередніх значень

\vspace{20pt}
\mytextB

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Використання \leftskip і \rightskip у групі](/files/9a2fcc9a2225fd46467649bc14cee17d7720b2f4)

**Примітка**: Налаштування (наслідки) `\leftskip` та `\rightskip` обмежені абзацом у межах групи, створеної за допомогою `\begingroup`... `\endgroup`. Після закриття групи наступний абзац набирається зі стандартними значеннями LaTeX для `\leftskip` та `\rightskip`.

### \baselineskip (TeX primitive)

Загальноприйнята практика верстки полягає в тому, що рядки тексту в абзацах мають бути розміщені на однаковій відстані, за винятком тих випадків, коли певні рядки містять великі елементи, як-от формули або зображення, які унеможливлюють збереження сталої міжрядкової відстані для таких рядків.

TeX/LaTeX надають команди та механізми, які дають користувачам змогу певною мірою керувати міжрядковими інтервалами. Однією з таких команд є `\baselineskip` яка отримує або встановлює значення параметра, що визначає бажаний міжрядковий інтервал (відстань між базовими лініями) у набраному абзаці.

Щоб набрати поточне значення `\baselineskip` ви можете написати

```latex
\the\baselineskip
```

Щоб встановити `\baselineskip` у деяке `значення` (довжина LaTeX, наприклад `pt`) ви можете написати

```latex
\setlength{\baselineskip}{value}
```

Наприклад, щоб встановити `\baselineskip` на `12pt` ви можете написати

```latex
\setlength{\baselineskip}{12pt}
```

Ми можемо продемонструвати роль `\baselineskip` за допомогою такого (типового) абзацу:

![Приклад абзацу LaTeX](/files/e005c28e93ddbeb25e01fd326895fbda53819a16)

і додавши позначки, які показують відстань між базовими лініями, що контролюється `\baselineskip`:

![Приклад абзацу LaTeX з позначками, що показують відстані між базовими лініями](/files/85c4cac3247e516879cc6d27109009ffc58c3556)

Схема також показує міжрядковий «клей»: обчислену кількість порожнього простору, доданого між рядками — пізніше в статті ми ще обговоримо це докладніше.

#### \baselineskip та інші параметри

`\baselineskip` є одним із чотирьох основних параметрів, які керують кількістю простору, вставленого між рядками абзацу; іншими є:

* `\lineskip`
* `\lineskiplimit`
* `\prevdepth`

Пізніше в статті ми розглянемо [*як ці чотири параметри використовуються*](#paragraph-structure-and-line-space-calculations) для обчислення значень міжрядкового клею.

#### \baselineskip приклад (фіксований простір)

Наступний приклад відкривається в Overleaf, щоб створити проєкт, що містить файл під назвою `text.tex` який визначає команди `\mytextA` та `\mytextB`— обидві команди набирають абзац. Для зручності проєкт Overleaf використовує невеликий розмір сторінки, оскільки це допомагає підготувати графіку та зображення для цієї довідкової сторінки.

```latex
\documentclass{article}
\title{Демонстрація baselineskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Встановіть значення деяких параметрів, пов’язаних з абзацами (ми обговоримо їх)
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
% Встановіть значення \baselineskip — змініть значення, щоб побачити ефект
\setlength{\baselineskip}{12pt}

\begin{document}
\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA і \mytextB, кожна з яких набирає абзац

% Спочатку наберіть два абзаци зі стандартним \baselineskip
\mytextA\mytextB

% Тепер змініть \baselineskip на більше значення і наберіть
% ще один абзац
\setlength{\baselineskip}{24pt}
\mytextA

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Дослідження baselineskip у TeX або LaTeX](/files/037651cb1f114f01bc5ee8cae24faead62959f86)

Абзац на сторінці 2 має широко розставлені рядки, тому що `\baselineskip` було встановлено 24pt.

#### \baselineskip приклад (гнучкий простір)

Наступний приклад задає `\baselineskip` значення, яке має надзвичайно гнучкий (так званий «нескінченний») компонент розтягування:

```latex
\baselineskip=12pt plus1fil
```

Через таку гнучкість порожній простір між рядками абзацу може розтягуватися на будь-яку потрібну величину, щоб заповнити сторінку. Така гнучкість призвела б до того, що абзаци мали б дуже різну кількість простору між своїми рядками тексту, що могло б бути неестетично або важко для читання.

```latex
\documentclass{article}
\usepackage{blindtext}
\title{Демонстрація гнучкого \texttt{\string\baselineskip}}
\author{Overleaf}
\date{Січень 2022}

\begin{document}

\maketitle
Ми надамо \verb|\baselineskip| дуже гнучкий компонент «розтягування», призначивши значення \texttt{12pt plus1fil}: \verb|\baselineskip=12pt plus1fil|.\baselineskip=12pt plus1fil
\section{Вступ}
Додайте абзац, який тепер розтягнеться, щоб заповнити сторінку. \blindtext

\end{document}
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Flexible+baselineskip+demo\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bblindtext%7D%0A%5Ctitle%7BFlexible+%5Ctexttt%7B%5Cstring%5Cbaselineskip%7D+demo%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BJanuary+2022%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cmaketitle%0AWe%E2%80%99ll+provide+%5Cverb%7C%5Cbaselineskip%7C+with+a+very+flexible+%60%60stretch%27%27+component+by+assigning+the+value+%5Ctexttt%7B12pt+plus1fil%7D%3A+%5Cverb%7C%5Cbaselineskip%3D12pt+plus1fil%7C.%5Cbaselineskip%3D12pt+plus1fil+%0A%5Csection%7BIntroduction%7D%0AAdd+a+paragraph+that+will+now+stretch+to+fill+the+page.+%5Cblindtext%0A%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Демонстрація клею baselineskip з нескінченною гнучкістю](/files/eca7d1f241c900292b76feb104baf258b995090f)

**Кілька приміток про клей**

Деякі з наведених нижче приміток узято зі статті Overleaf [дослідження коробок із недобором або переповненням та обчислень «поганості»](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv), відтворено тут для зручності.

Порожній простір, який TeX вставляє між рядками абзацу, `\baselineskip`, є формою гнучкого інтервалу, що називається *клей*. Значення glue можна задати трьома компонентами:

* a *фіксованим* величина;
* величина, на яку воно може *розтягуватися*;
* величина, на яку воно може *стискатися*,

Отже, `\baselineskip` значення можна задати так:

`\baselineskip`=*фіксована величина* **плюс** *кількості для розтягування* **мінус** *кількості для стискання*

де

* **плюс** та **мінус** є ключовими словами, які розуміють рушії TeX;
* *фіксована величина* називається *нормальною складовою* glue (також званого *природну ширину* складовою glue);
* *кількості для розтягування* називається *складовою розтягування* glue;
* *кількості для стискання* називається *складовою стискання* glue.

Функція *фіксована величина* є обов’язковою для всіх значень glue, але *кількості для розтягування* та *кількості для стискання* обидва є необов’язковими — якщо один або обидва відсутні, їм присвоюється значення 0.

Зазвичай, `\baselineskip` glue задається з *фіксована величина* лише, компоненти розтягування та стискання дорівнюють нулю, інакше рядки абзацу мали б нерівномірний (змінний) інтервал, що може бути неестетично.

### \offinterlineskip і \nointerlineskip (макроси)

Ці макроси часто використовують, щоб запобігти вставлянню міжрядкового glue між рядками абзацу. Читачі, яких цікавлять деталі, можуть перейти до відповідних розділів статті, де пояснюється, як працюють ці макроси.

* **`\offinterlineskip`**: Див. розділ статті [*Міжрядковий glue нульового розміру: \offinterlineskip*](#zero-sized-interline-glue-offinterlineskip).
* **`\nointerlineskip`**: Див. розділ статті [*Запобігання міжрядковому glue: \prevdepth і \nointerlineskip*](#preventing-interline-glue-prevdepth-and-nointerlineskip).

## Структура абзаців і обчислення міжрядкових інтервалів

Використовуючи можливості LuaTeX, можна [післяобробити набраний абзац](https://www.overleaf.com/latex/examples/luatex-parsing-typeset-paragraphs/mzbpwxtjshsj) щоб візуалізувати межі складових символів (гліфів), рядків і glue, з яких він складається. Ми почнемо з короткої послідовності графіки, щоб допомогти уявити модель «коробки і glue», яку рушії TeX використовують для верстання тексту, що міститься в абзаці.

### Структура абзацу

Коли TeX верстає абзац, він розглядає окремі символи як мініатюрні коробки, кожна зі своєю шириною, висотою та глибиною, і ширини цих коробок символів використовуються для обчислення оптимальних місць розриву рядків. Крім того, символи пробілів, що містяться в тексті та використовуються для розділення окремих слів, перетворюються на форму гнучкого простору (glue), який забезпечує інтервал, потрібний для досягнення кожного розриву рядка.

Наведена нижче послідовність із 7 зображень показує основні компоненти набраного абзацу: різні типи коробок і glue. Перше зображення показує набраний абзац разом з анотованою версією, що підсвічує різні елементи всередині абзацу. Однак анотований абзац містить багато інформації, тож наступні зображення ізолюють різні компоненти, щоб (сподіваємося) зробити їх зрозумілішими.

![Paragraphanatomy1b.png](/files/0f90fc026c38c1235ca14f167833e96cca5784b9)

* Наступна графіка зображує рядки абзацу як сірі коробки, розділені glue, яке представлено горизонтальними зеленими смугами. Це glue обчислюється так, щоб забезпечити, що відстань від базової лінії до базової лінії дорівнює (тобто значенню) `\baselineskip`:

![Paragraphanatomy2b.png](/files/60ad101110712546ab5608b25c07a898b6d954d8)

* Наступне зображення представляє набрані символи як коробки: щоб візуалізувати, як рушії TeX обробляють символи з метою отримання розривів рядків:

![Paragraphanatomy3.png](/files/93762ff32b378bd91b13ac28b109ee5df3f241f9)

* Наступне зображення показує коробки в коробках: більші рядки абзацу (коробки), що містять менші коробки (окремі символи):

![Paragraphanatomy5.png](/files/7f031e32793733f595281037da143b350e09d9fb)

* Наступне зображення показує кількість простору між словами в кожному рядку: ці міжслівні проміжки утворюються шляхом перетворення символів пробілу на гнучкі glue, які розтягуються або стискаються, щоб отримати правильну довжину кожного рядка тексту. Зверніть увагу, що розмір цих проміжків змінюється від рядка до рядка:

![Paragraphanatomy4.png](/files/846f60300a81a4bf8d6acb5bb85adc82e664b56e)

* Наступне зображення поєднує коробки символів і відповідні glue (пробіли), розміщені між окремими словами:

![Paragraphanatomy6.png](/files/784b4fdffcc33da195c487717b9c97f169e515e8)

### Візуалізація інших типів абзацного клею

Наведені далі абзаци також були набрані й оброблені за допомогою LuaTeX, щоб показати інші типи glue всередині та між парою абзаців. Зверніть увагу, що `\rightskip` та `\leftskip` обидва встановлено в 0pt, тож їх не показано:

* **`\parskip`** glue (світло-блакитний), розміщений між двома набраними абзацами;
* окремі слова розділені ***міжслівним glue*** (жовтий), створеним шляхом перетворення символів пробілу у вхідних даних на змінного розміру порожній простір (glue) у набраному результаті. Glue, що виникає з міжслівних пробілів, розтягується або стискається, щоб досягти візуально приємних розривів рядків;
* **`\baselineskip`** glue (світло-зелений), розміщений між рядками — точна кількість `\baselineskip` glue обчислюється за механізмом, описаним нижче;
* **`\lineskip`** glue (червоний), що використовується в другому абзаці — через низьку коробку, що міститься в передостанньому рядку;
* **`\parfillskip`** glue (темно-зелений), розміщений у кінці останнього рядка в кожному абзаці.

![](/files/a9bd36c5562afe6a77b9f6edf7673a5cc743c4c0)

### Робота з глибшими (або вищими) рядками (коробками)

Як показано на графіці в [попередньому розділі](#paragraph-structure), набраний абзац — це вертикальна стопка «коробок», розділених певним порожнім простором, який TeX називає «glue». У міру обробки абзацу й укладання окремих рядків (коробок) вертикальний список (стопка) зростає в *вниз* напрямку, донизу сторінки. Хоча TeX/LaTeX намагаються забезпечити, щоб рядки абзацу були складені так, аби їхні базові лінії були розділені сталою відстанню `\baselineskip`, це не завжди можливо, бо певні рядки можуть мати більшу зазвичай висоту або глибину.

Висота і глибина кожного рядка абзацу визначається максимальною відстанню, на яку вміст цього рядка виходить над або під базову лінію; отже, абзаци, що містять матеріал із відносно великою висотою або глибиною, наприклад вбудовану математику чи графіку, імовірно, створюватимуть окремі рядки з відповідно великою висотою та/або глибиною. Для таких рядків TeX/LaTeX може виявитися нездатним скласти їх так, щоб їхні базові лінії були віддалені від інших рядків на `\baselineskip` відстань. Очевидно, TeX/LaTeX потрібен «механізм запасного варіанта», щоб обробляти такі рядки шляхом *обчислення* відповідної кількості простору, який треба вставити між кожною парою рядків, на які впливають велика висота та/або глибина.

#### \lineskip і \lineskiplimit (примітиви TeX)

Цей механізм запасного варіанта включає команди параметрів `\lineskip` та `\lineskiplimit` разом із третім параметром, який називається `\prevdepth`. Читачі, яких цікавлять подальші деталі, можуть перейти до розділу статті [*Як обчислюється простір (glue) між рядками абзацу*](#how-the-space-glue-between-paragraph-lines-is-calculated).

Наведений нижче приклад проєкту верстає один абзац, останній рядок якого має відносно велику глибину через зміщене текстове вікно (`\hbox`). Абзац верстається з використанням таких налаштувань:

```latex
\setlength{\baselineskip}{12pt}
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
```

Скористайтеся посиланням нижче наведеного коду, щоб відкрити проєкт Overleaf:

```latex
\documentclass{article}
% Використаємо зручно малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
% Встановити деякі важливі параметри
\setlength{\baselineskip}{12pt}
\setlength{\lineskip}{3.5pt}
\setlength{\lineskiplimit}{2pt}
\setlength{\parindent}{20pt}
% Вхідний файл, що визначає \testpar
\input testpar.tex
\title{Зразковий абзац для lineskip}
\begin{document}
\testpar % Макрос, створений у проєкті Overleaf
\end{document}
```

&#x20;[Відкрийте цей приклад в Overleaf.](https://www.overleaf.com/docs?engine=\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Set+some+important+parameters%0A%5Csetlength%7B%5Cbaselineskip%7D%7B12pt%7D%0A%5Csetlength%7B%5Clineskip%7D%7B3.5pt%7D%0A%5Csetlength%7B%5Clineskiplimit%7D%7B2pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B20pt%7D%0A%25+Input+file+defining+%5Ctestpar+%0A%5Cinput+testpar.tex%0A%5Ctitle%7BA+sample+paragraph+for+lineskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Ctestpar+%25+A+macro+created+in+the+Overleaf+project%0A%5Cend%7Bdocument%7D\&snip_name\[]=testpar.tex\&snip\[]=%5Cnewcommand%7B%5Ctestpar%7D%7B%5CTeX%7B%7D+uses+the+name+%60%60glue%27%27+to+describe+%60%60flexible+white+space%27%27+used+to+separate+any+typeset+item+which+can+appear+on+the+page.+For+example%2C+individual+words%2C+and+whole+lines%2C+within+a+typeset+paragraph+are+seperated+by+%60%60glue%27%27.+%5CTeX%7B%7D+engines+identify+%28give+a+name+to%29+different+types+of+glue+according+to+where+it+is+being+used.+For+example%2C+each+line+is+separated+by+%5Ctexttt%7B%5Cstring%5Cbaselineskip%7D+glue+or%2C+occasionally%2C+%5Ctexttt%7B%5Cstring%5Clineskip%7D+glue%2C+depending+on+%5CTeX%27s+calculations.+Let%27s+trigger+use+of+%5Ctexttt%7B%5Cstring%5Clineskip%7D+glue+by+adding+an+%5Ctexttt%7B%5Cstring%5Chbox%7D+which+has+a+large+depth+due+to+the+%5Ctexttt%7B%5Cstring%5Clower%7D+command%3B+for+example%2C+the+box%0A+%5Clower5pt%5Chbox%7BLOW+BOX%7D+will+cause+%5CTeX%7B%7D+to+insert+%5Ctexttt%7B%5Cstring%5Clineskip%7D+glue+instead+of+%5Ctexttt%7B%5Cstring%5Cbaselineskip%7D+glue.%5Cpar%7D\&main_document=main.tex)

Цей приклад дає такий результат:

![Приклад демонстрації glue \lineskip](/files/7d21bd471f6b0d80b8152b3f696087685164ed63)

Наведена нижче графіка використовує анотовану версію абзацу, отриманого в попередньому проєкті Overleaf. Тут ми збільшуємо масштаб, щоб зосередитися на останньому рядку абзацу, вказуючи на використання `\lineskip` glue (показаного червоним), спричиненого глибиною зміщеного текстового вікна:

![Зображення, що показує glue TeX \lineskip](/files/b63bc424785973e223eb9db64f2b2492f070d1fa)

Останній рядок тексту абзацу має більшу зазвичай глибину, що не дає TeX підтримувати сталу відстань від базової лінії до базової лінії, визначену значенням `\baselineskip` (12pt). Як показано стрілками праворуч на графіці, TeX/LaTeX намагаються забезпечити фіксовану відстань (12pt) між парами рядків — значення `\baselineskip`. Однак для останньої пари рядків TeX розділив їх на відстань, більшу за 12pt, і використовує значення `\lineskip` для міжрядкового glue замість значення, обчисленого за допомогою `\baselineskip`.

Наведені нижче розділи досліджують і пояснюють деталі обчислень TeX для значень міжрядкового glue.

### Як обчислюється простір (glue) між рядками абзацу

На даний момент ми *дуже коротко* згадаємо процес побудови сторінки в TeX, хоча й у дуже спрощений спосіб! Після того як TeX завершує верстку абзацу, завершивши перенесення та визначивши розриви рядків, можна вважати, що дані цього абзацу зберігаються в тимчасовому місці пам’яті. Потім TeX потрібно переносити ці дані абзацу рядок за рядком у нове місце пам’яті, яке зберігає матеріал, призначений для поточної вихідної сторінки.

Коли TeX переносить дані абзацу рядок за рядком, він, по суті, будує вертикальну стопку рядків (коробок TeX), яка зростає *вниз* донизу сторінки. Переміщуючи рядки абзацу на поточну сторінку, TeX намагається забезпечити, щоб ці рядки були розташовані на однаковій відстані, маючи сталий вертикальний інтервал (від базової лінії до базової лінії), рівний значенню `\baselineskip`. Коли новий рядок переноситься на поточну сторінку, рушій TeX тимчасово записує *глибину* цього рядка, оскільки вона буде використана для обчислення кількості міжрядкового glue (порожнього простору) між цим рядком і рядком, розміщеним після нього.

#### Обчислення розміру glue

Почнімо з короткого підсумку особливостей міжрядкового інтервалу, які надають рушії TeX:

* підтримання сталої відстані між базовими лініями, відстані, що дорівнює `\baselineskip`;
* забезпечення інтервалу для будь-яких рядків із відносно великою висотою або глибиною;
* можливість вимкнути вставляння міжрядкового glue — автоматично або під керуванням користувача. Наприклад:
  * рушії TeX автоматично вимикають вставляння міжрядкового glue після rule у вертикальному режимі;
  * макроси `\offinterlineskip` та `\nointerlineskip` дозволяють користувачам тимчасово вимикати вставляння міжрядкового glue — ці макроси мають різні ефекти, як ми побачимо нижче.

Рішення щодо того, чи додавати міжрядковий glue, і якщо так, то скільки та якого типу, відбувається так:

* Чи слід додавати міжрядковий glue? TeX визначає це, перевіряючи, чи *глибина останнього доданого рядка* до списку менша за спеціальне значення `–1000pt` (пункти). Зверніть увагу, що `–1000pt` є довільним значенням «сентинелом», яке TeX-рушії використовують внутрішньо.
  * **Примітка**: Значення «глибина останнього доданого рядка», яке TeX зберігає внутрішньо, також відоме як «попередня глибина». Рушії TeX надають команду параметра `\prevdepth`— яку за певних обставин можна використовувати, щоб *отримати* або *set* змінити `\nointerlineskip` значення «попередньої глибини». Макрос `\prevdepth`.
* TeX перевіряє, чи `глибина попереднього рядка більша за –1000pt`?
  * ***Так, це так*** (потрібно додати glue):
    * обчислити значення Δ, де Δ = \baselineskip – (глибина попереднього рядка) – (висота наступного рядка)
    * порівняти Δ зі значенням `\lineskiplimit`, параметром, який використовується для визначення мінімально прийнятної відстані між двома рядками, виміряної як відстань між нижньою частиною верхнього рядка та верхньою частиною нижнього рядка.
    * Якщо Δ < `\lineskiplimit`:
      * рядки занадто близько, тому вставте мінімально прийнятний інтервал, який становить `\lineskip`
    * Якщо Δ >= `\lineskiplimit`:
      * рядки не надто близько, тому використайте Δ як кількість glue, яку потрібно вставити
  * ***Ні, це не так*** (не додавати glue):
    * Додайте наступний рядок (коробку) без вставляння будь-якого glue

Наведена нижче графіка підсумовує процес міжрядкового glue:

![Як TeX визначає значення міжрядкового glue](/files/66f5222bf9eea48b2c0b357329d0966c9b2b5ab7)

### Приклад обчислень міжрядкового glue

У наведеному нижче прикладі припустімо, що TeX/LaTeX використовує такі значення параметрів команд:

```latex
\baselineskip=12pt
\lineskip=3.5pt
\lineskiplimit=2pt
```

Розглянемо обчислення міжрядкового glue для перших двох рядків цього абзацу:

![OLV2glue-calcs-step0.png](/files/683afde2177240686a4f35ac821ad3b02b1f6515)

На наступному зображенні рушій TeX опрацював перший рядок абзацу і перемістив його до вертикального списку, який будує. Він відстежує глибину цього рядка (`d<sub>1</sub>`) яка є `2.1528` (пункти):

![OLV2glue-calcs-step1.png](/files/b3e2d1688e4d7192d4da0ce9a41b26991b8df993)

Далі TeX готовий додати другий рядок до списку, який будує: цей рядок має висоту (`h<sub>2</sub>`) яка є `6.9444` (пункти) і, між іншим, глибину, `d<sub>2</sub>` значення `0` (пункти):

![OLV2glue-calcs-step2.png](/files/d5a1deb99d95e233f23ce114fa7110a691a92bd6)

У цей момент TeX потрібно обчислити кількість простору (glue, `g<sub>1</sub>`) для вставляння між цими двома рядками:

![OLV2glue-calcs-step3.png](/files/52446717c7c596dfa371d41c29e1b3291826173a)

Наведене нижче зображення показує обчислення glue для цієї пари рядків:

![OLV2glue-calcs-stepA3.png](/files/74cebae410e3dc07272cc4fa294999f7b3f5fc53)

Останнє зображення показує два рядки, переміщені на поточну сторінку, з обчисленою кількістю міжрядкового glue, розміщеною між ними:

![OLV2glue-calcs-step5.png](/files/d0652493083d0980111d04a96531f360d7cdec61)

### Ще один параметр: \prevdepth

Як зазначено вище, коли TeX створює вертикальну стопку (список) коробок, він зберігає глибину останньої коробки, доданої до цього списку. Це збережене значення глибини відоме як «попередня глибина», до якої можна отримати доступ через команду параметра `\prevdepth`.

Функція `\prevdepth` команда може бути використана ***лише*** коли TeX перебуває у вертикальному режимі; тобто між абзацами або всередині вертикальних коробок: `\vbox`, `\vtop` або `\vcenter` (зверніть увагу: `\vcenter` коробки можна використовувати лише в математичному режимі).

`\prevdepth` надає доступ на читання і запис до значення «попередньої глибини»:

* щоб прочитати поточне значення `\prevdepth` можна записати:

```latex
\the\prevdepth
```

* щоб установити поточне значення `\prevdepth` на `яке-небудь значення`, довжину в пунктах, мм тощо, можна записати:

```latex
\setlength{\prevdepth}{some value}
```

Якщо ви спробуєте використати \verb`\prevdepth` у обставинах, для яких його не призначено, наприклад у межах абзацу або всередині `\hbox` ви отримаєте помилку

```latex
Неправильне \prevdepth.
```

з додатковою інформацією, що повідомляє, що його можна використовувати лише у вертикальному режимі.

#### Запобігання міжрядковому glue: \prevdepth і \nointerlineskip

Одне з використань `\prevdepth` полягає в тому, щоб *запобігти* TeX виконувати обчислення базової лінії, які використовуються для додавання міжрядкового glue між елементами у вертикальному списку, такими як рядки абзацу. Використовуючи `\prevdepth` щоб позначити `глибину попереднього рядка` ми можемо переформулювати обчислення glue (показані вище) так:

```latex
if(\prevdepth > –1000pt)
{
     Δ = \baselineskip — \prevdepth — (висота поточного рядка)

     if(Δ < \lineskiplimit)
       міжрядковий glue = \lineskip
     else
       міжрядковий glue = Δ
}
else
{
     Укладіть коробку без додавання
     будь-якого міжрядкового glue
}
```

Внутрішньо рушії TeX розпізнають так зване значення «сентинел» `\prevdepth` яке можна використати, щоб вимкнути обчислення та додавання міжрядкового glue. Це значення-сентинел — `–1000pt`, яке можна побачити в першому рядку псевдокоду вище:

```latex
if(\prevdepth > –1000pt)
```

TeX не додаватиме міжрядковий glue, якщо `\prevdepth` є більшим за `–1000pt`— що забезпечує механізм, який використовується макросом `\nointerlineskip` для запобігання додаванню міжрядкового glue між наступною парою коробок у вертикальному списку.

`\nointerlineskip` має визначення, еквівалентне:

```latex
\def\nointerlineskip{
\prevdepth–1000pt
}
```

Зверніть увагу, що `\nointerlineskip` забезпечує *одноразове вимкнення* обчислень міжрядкового glue, оскільки значення `\prevdepth` безперервно оновлюється, коли до поточного вертикального списку додаються нові коробки, як показано в наведеному нижче прикладі:

```latex
\noindent Наступні \verb|\hbox|es обробляються, коли \TeX{} перебуває в так званому \textit{зовнішньому вертикальному режимі}. Після обробки (верстки) ці коробки додаються до поточної сторінки й укладаються вертикально з міжрядковим glue, вставленим між ними:

\hbox{j}
\hbox{p}
\hbox{g}

Тепер, одразу після коробки \verb|\hbox{j}|, ми встановлюємо \verb|\prevdepth| у \texttt{-1000pt}, що запобігає розміщенню міжрядкового glue між коробками \verb|\hbox{j}| і \verb|\hbox{p}|:

\hbox{j}\setlength{\prevdepth}{-1000pt}
\hbox{p}
\hbox{g}

Зверніть увагу, що міжрядковий glue \textit{дійсно} розміщується між коробками \verb|\hbox{p}| і \verb|\hbox{g}|, оскільки значення \verb|\prevdepth| оновлюється після обробки \verb|\hbox{p}| і додавання до списку: значення \verb|\prevdepth| стає глибиною коробки \verb|\hbox{p}|. Коли \verb|\hbox{g}| додається до вертикального списку, значення \verb|\prevdepth| вже не дорівнює \texttt{-1000pt}; отже, міжрядковий glue тепер можна додати.
```

&#x20;[Відкрити цей приклад в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=One-shot+use+of+nointerlineskip\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Cbaselineskip%7D%7B14pt%7D%0A%5Csetlength%7B%5Cparskip%7D%7B1pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%25+A+convenience+macro+to+typeset+%5Cprevdepth+in+an+%5Chbox%2C+although+TeX+has+to+be%0A%25+in+a+vertical+mode+when+this+macro+is+used.%0A%5Cnoindent+The+following+%5Cverb%7C%5Chbox%7Ces+are+processed+when+%5CTeX%7B%7D+is+in+so-called+%5Ctextit%7Bouter+vertical+mode%7D.+After+processing+%28typesetting%29%2C+these+boxes+are+appended+to+the+current+page+and+stacked+vertically+with+interline+glue+inserted+between+them%3A%0A%0A%5Chbox%7Bj%7D%0A%5Chbox%7Bp%7D%0A%5Chbox%7Bg%7D%0A%0ANow%2C+immediately+after+after+the+box+%5Cverb%7C%5Chbox%7Bj%7D%7C%2C+we+set+%5Cverb%7C%5Cprevdepth%7C+to+%5Ctexttt%7B-1000pt%7D+which+prevents+interline+glue+being+placed+between+the+boxes+%5Cverb%7C%5Chbox%7Bj%7D%7C+and+%5Cverb%7C%5Chbox%7Bp%7D%7C%3A+%0A%0A%5Chbox%7Bj%7D%5Csetlength%7B%5Cprevdepth%7D%7B-1000pt%7D%0A%5Chbox%7Bp%7D%0A%5Chbox%7Bg%7D%0A%0AObserve+that+interline+glue+%5Ctextit%7Bis%7D+placed+between+the+boxes+%5Cverb%7C%5Chbox%7Bp%7D%7C+and+%5Cverb%7C%5Chbox%7Bg%7D%7C+because+the+value+of+%5Cverb%7C%5Cprevdepth%7C+is+updated+after+%5Cverb%7C%5Chbox%7Bp%7D%7C+is+processed+and+added+to+the+list%3A+the+value+of+%5Cverb%7C%5Cprevdepth%7C+becomes+the+depth+of+the+box+%5Cverb%7C%5Chbox%7Bp%7D%7C.+When+%5Cverb%7C%5Chbox%7Bg%7D%7C+is+added+to+the+vertical+list+the+value+of+%5Cverb%7C%5Cprevdepth%7C+is+no+longer+%5Ctexttt%7B-1000pt%7D%3B+consequently%2C+interline+glue+can+now+be+added.%0A%5Cend%7Bdocument%7D)

Цей приклад дає такий результат:

![Приклад, що демонструє параметр TeX \prevdepth](/files/2a925e531ec79573c06f81cc066afd212530e80d)

#### Міжрядковий glue нульового розміру: \offinterlineskip

Можна видалити весь міжрядковий інтервал за допомогою макрокоманди `\nointerlineskip`, яка має визначення, еквівалентне:

```latex
\def\offinterlineskip{%
\baselineskip=-1000pt
\lineskip=0pt
\lineskiplimit=\maxdimen
}
```

Зверніть увагу, що `\maxdimen` є `16383.99998pt`, найбільша довжина, яку може використовувати TeX.

Наведена нижче графіка показує основні обчислення міжрядкового glue та різні значення параметрів, що використовуються макросом `\nointerlineskip`:

![offinterlineskip](/files/91e4e7c23d80e743359851196e1873bdae9e8ae6)

Наведена нижче графіка показує фрагмент псевдокоду, який виникає внаслідок підстановки `\nointerlineskip` значень макросу в обчислення glue. Вона демонструє, як `\nointerlineskip` макрос працює, встановлюючи значення для `\baselineskip` та `\lineskiplimit` так, що міжрядковий glue завжди буде `\lineskip` glue розміром `0pt`.

![offinterlineskip](/files/a9abfcc5da20431c216c17a1cb1306584c154625)

#### \offinterlineskip і ненульовим \lineskip

Функція `\nointerlineskip` макрос встановлює `\lineskip` у нуль, але, як показує наведений нижче проєкт Overleaf, ви можете поєднувати `\nointerlineskip` з ненульовими значеннями `\lineskip` щоб досягти ефектів міжрядкового інтервалу.

```latex
\documentclass{article}
\title{Демонстрація ненульового lineskip}
% Виберіть зручний малий розмір сторінки
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=8cm]{geometry}
\begin{document}

\offinterlineskip % Це встановлює \lineskip на 0pt

\setlength{\lineskip}{5pt} % Ми хочемо ненульовий \lineskip

\input text.tex % Згенерований файл TeX, який визначає макроси
% \mytextA та \mytextB, кожен з яких верстає абзац

\mytextA % Набрати абзац

% Тепер змінити \lineskip на гнучке значення glue і набрати
% ще один абзац

\setlength{\lineskip}{5pt plus5pt minus5pt}

\mytextA

\end{document}
```

&#x20;Відкрийте цей приклад як проєкт Overleaf LaTeX

Цей приклад генерує такий результат:

![Демонстрація макросу \offinterlineskip у LaTeX](/files/3864c47052d33359a05c4b4a755c4c286785b0d4)

Ви можете локалізувати ефект(и) використання `\offinterlineskip` та `\lineskip` (та інших команд інтервалів), обгорнувши їх у групу:

```latex
\begingroup
\offinterlineskip
\setlength{\lineskip}{5pt}
...ваш(і) абзац(и) тут

\endgroup
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/uk/formatuvannya/04-articles-how-to-change-paragraph-spacing-in-latex.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
