> 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/ru/formatirovanie/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` пакет](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) plus 2pt`.

#### Примеры пакета parskip

Следующие примеры демонстрируют некоторые способы использования `parskip` пакета. Выберите ссылки «Open in Overleaf», чтобы открыть и скомпилировать примеры в Overleaf.

**Минимальный пример использования пакета parskip**

Следующий минимальный пример загружает `parskip` пакет и набирает два абзаца, созданные с помощью [`blindtext` пакет](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)

Этот пример выдаёт следующий результат:

![Пример использования пакета parskip в LaTeX](/files/208fb273c65f78e6177108ab5fa05eb95b9cf425)

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

**Использование параметров пакета parskip**

Следующий пример загружает и настраивает `parskip` пакет, используя `skip` и `indent` параметры. Он также набирает два абзаца с помощью [`blindtext` пакет](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)

Этот пример выдаёт следующий результат:

![Второй пример использования пакета parskip в LaTeX](/files/3eb8b0e14da35b1dd42483d53eb843d5203e1a07)

### Пакет setspace

Это [`setspace` пакет](https://ctan.org/pkg/setspace?lang=en) предоставляет команды и окружения для изменения межстрочного интервала в вашем документе. Вот краткое описание основных команд и окружений, предоставляемых `setspace`:

* команды **`\singlespacing`**, **`\onehalfspacing`** и **`\doublespacing`** могут использоваться в преамбуле документа или в его теле, чтобы изменить интервал в части или во всём документе;
* окружения **`\setstretch{*baselinestretch amount*}`** команда задаёт пользовательский интервал (через изменения [`\baselinestretch`](#demonstrating-baselinestretch)) — её также можно использовать в преамбуле документа;
* окружения **`singlespace`**, **`singlespace*`** **`onehalfspace`** и **`doublespace`** позволяют изменять межстрочный интервал в выбранных частях текста документа;
* окружения **`\SetSinglespace{*value*}`** команда использует `*value*` для настройки одинарного межстрочного интервала с учётом текста, набранного шрифтами, чьи символы («глифы») относительно малы или велики для заданного кегля. См. раздел [*Краткие заметки о шрифтах и кегле*](#brief-notes-on-fonts-and-point-size) для иллюстрации, демонстрирующей изменение размера глифов шрифта при заданном кегле;
* окружения **`spacing`** окружение предоставляет пользовательский интервал и требует один аргумент: [`\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)

Этот пример выдаёт следующий результат:

![Пример команды \doublespacing пакета setspace](/files/d14de74a53a6fe949c914bf53b0ba10b3ff6d258)

**Использование окружения 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)

Этот пример выдаёт следующий результат:

![Пример окружения singlespace\* в LaTeX](/files/0315976b72832decaaded8f3e95928ea18a4aec8)

**Использование команды \setstretch**

`\setstretch{*value*}` устанавливает значение `\baselinestretch` на *значения* и вызывает *немедленное* изменение `\baselineslip` вызванное `\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/900e384fa545cb43197afe9d6246b6de8973dc77)

**Использование команды \SetSinglespace**

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

```latex
\section*{Computer Modern default single spacing}
Обычный текст. \blindtext[1]
\setmainfont{TeX Gyre Pagella}
\section*{TeX Gyre Pagella default single line spacing}
Вот обычный текст. \blindtext[1]
\section*{TeX Gyre Pagella adjusted single line spacing}
Примечание: нужно вызвать \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)

Этот пример выдаёт следующий результат:

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

В следующем разделе мы рассмотрим команды `\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/02c93967c7f600d2581adba3515ef04c60a969b5)

Использование `\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)

Этот пример выдаёт следующий результат:

![использование команды \linespread LaTeX в документе](/files/a498af10937d0a390c2eda0bab352922ab634671)

**Демонстрация \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/773e33b381649172a9129db67869175b4e03aab4)

#### Как в пакете setspace определяется и изменяется «межстрочный интервал»?

Это *точное* определение и *измерение* «межстрочного интервала» оставлены на усмотрение, что может приводить к различным реализациям в программных системах/приложениях. Очевидно, что `setspace` пакет должен опираться на рабочее определение межстрочного интервала, чтобы обеспечивать поддержку набора «одинарного» и «двойного» интервала или любого другого кратного интервала. Но какие переменные изменяет `setspace` для создания строк с различным количеством пустого пространства между ними?

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

**Краткие заметки о шрифтах и кегле**

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

Следующее изображение показывает строчные буквы «abc», оформленные четырьмя разными шрифтами и все *показанные в одном и том же кегле*. Обратите внимание, как «размер» этих строчных букв меняется в зависимости от дизайна шрифта (начертания), хотя все они набраны при *одном и том же* кегле:

![Разные шрифты при одном и том же кегле](/files/e10bf030c374aee6107293f9a68e2644c6729050)

#### Одинарный межстрочный интервал в пакете setspace

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

Базовый документ, использующий `статью` класс имеет размер основного текста по умолчанию 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
}
```

Используя `статью` класс документа с опцией шрифта 11pt, следующий пример сравнивает `\doublespacing` с `spacing` окружение, использующее наше вычисленное значение `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/90c62089ad0ac43879d8519db7b51f0168e87f7e)

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

![параметры setspace](/files/4aef80dc23dd919b3138956fa58da47628b0680e)

## Использование команд-параметров 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 достигают эффектов интервалов, в том числе внутри абзацев и между ними, с помощью гибкого пробельного пространства, называемого *клей* которое можно растягивать или сжимать в зависимости от требуемого количества места. Если вы хотите узнать о понятии glue в TeX, подробнее это рассматривается в следующих статьях Overleaf:

* [Изучение недозаполненных или переполненных блоков и вычисление badness](https://www.overleaf.com/latex/examples/exploring-underfull-or-overfull-boxes-and-badness-calculations/wpfsjnbkrfhv)
* [Как TeX вычисляет настройки glue в \hbox](/latex/ru/podrobnye-stati/24-how-tex-calculates-glue-settings-in-an-hbox.md)
* [Понимание предупреждений о недозаполненных и переполненных блоках](/latex/ru/baza-znanii/138-understanding-underfull-and-overfull-box-warnings.md).

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

В этом разделе мы объясняем ряд команд-параметров, связанных с абзацами, и приводим примеры их использования.

### \parindent (примитив TeX)

Эта команда-параметр задает величину отступа (пробельного пространства), добавляемого к первой строке абзаца. Ее можно изменить с помощью команды 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 ``box'' с определенной шириной, высотой и глубиной.\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/71ab92c378a51b3619348679c0997e855b4accef)

### \parskip (примитив TeX)

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

* **Совет от `parskip` пакет**: Команды [пакета 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~``box'' с определенной шириной, высотой и глубиной.\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/59909747920c4f7f4d78bd0a6efd1766cd4f096f)

#### Гибкий \parskip

Традиционно, `\parskip` не является *фиксированным* значением, что привело бы к одинаковому расстоянию между всеми абзацами. Вместо этого, `\parskip` обычно задается как «гибкое пространство» (называемое glue), которое позволяет TeX растягивать или сжимать промежуток между абзацами, помогая уместить содержимое на странице и найти «хорошее» место для разрыва страницы.

Чтобы сделать `\parskip` его гибким, его следует записать в виде спецификации glue:

`\setlength{\parskip}{*фиксированная величина* **plus** *величина для растяжения* **minus** *величина для сжатия*}`

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

Например, чтобы позволить `\parskip` варьироваться между `3 + 1 = 4pt` и `3 — 1 = 2pt` вы можете написать

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

### \leftskip и \rightskip (примитивы TeX)

Движки TeX предоставляют две команды-параметра, которые добавляют пространство (клей) слева и справа от каждой строки в набранном абзаце. Как следует из их названий:

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

Следующие примеры используют `\leftskip` и `\rightskip` для непосредственного изменения выравнивания абзаца; однако... изменения выравнивания текста обычно лучше выполнять с помощью подходящих окружений или пакетов LaTeX — например, см. [статью Overleaf о выравнивании текста](/latex/ru/formatirovanie/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/8ad03eb6b831375dacbe7d5c4d0f11fa26d87d89)

Следующая схема представляет собой аннотированную версию второго абзаца, полученного в приведенном выше примере. Она предназначена для того, чтобы выделить и показать количество `\leftskip` и `\rightskip` клея, вставленного в строки абзаца, вместе с `\parindent` пространством для первой строки:

![Настройка клея \leftskip в LaTeX](/files/2045215d3b26881e2d9ddbc00ff02f13b0feb409)

Обратите внимание, что `\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/5c4dbe41f14da40ff7717fb9758b1623540772bc)

Следующая схема представляет собой аннотированную версию второго абзаца, полученного в примере выше. Она предназначена для того, чтобы выделить и показать количество `\leftskip` и `\rightskip` клея, вставленного в строки абзаца, вместе с `\parindent` пространством для первой строки:

![Настройка клея \rightskip в LaTeX](/files/8677f519f9de55831113502abef8e9f690d0af86)

Обратите внимание, что `\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/3cf7f4b17f5e471053a8558dffda6938d6f99a20)

Следующая схема представляет собой аннотированную версию второго абзаца, полученного в примере выше. Она предназначена для того, чтобы выделить и показать количество `\leftskip` и `\rightskip` клея, вставленного в строки абзаца, вместе с `\parindent` пространством для первой строки:

![Пример, показывающий \leftskip и \rightskip](/files/f281b308aeeea39fe568920235799b021bc167b3)

Обратите внимание, что оба `\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/092e588255bee1f4e23832968bc6425dbf770462)

**Примечание**: Настройки (эффекты) `\leftskip` и `\rightskip` ограничены абзацем внутри группы, созданной с помощью `\begingroup`... `\endgroup`. После закрытия группы следующий абзац набирается с использованием значений LaTeX по умолчанию для `\leftskip` и `\rightskip`.

### \baselineskip (примитив TeX)

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

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

Чтобы вывести текущее значение `\baselineskip` вы можете написать

```latex
\the\baselineskip
```

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

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

Например, чтобы установить `\baselineskip` на `12pt` вы можете написать

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

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

![Пример абзаца LaTeX](/files/7a50a9a4088e6cd3d4514b271ab0af0f0930c765)

и добавив пометки, показывающие расстояние между базовыми линиями, управляемое `\baselineskip`:

![Пример абзаца LaTeX с пометками, показывающими расстояния между базовыми линиями](/files/a659f59f221fd146a73a1fbf22d7194f9ac0df4a)

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

#### \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/df7284a119b61985d84551f58b381c9b06669a10)

Абзац на странице 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{Introduction}
Добавьте абзац, который теперь будет растягиваться, чтобы заполнить страницу. \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)

Этот пример выдаёт следующий результат:

![Демонстрация glue baselineskip с бесконечной гибкостью](/files/6be175d1a2cae897a818c69da368c08c91281ad9)

**Несколько заметок о glue**

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

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

* один *фиксированным* величина;
* величина, которую он может *растягиваться*;
* величина, которую он может *сжиматься*,

Следовательно, `\baselineskip` значение glue можно задать так:

`\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/2e88bab771862279bee72b1aee21b3696f49a10d)

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

![Paragraphanatomy2b.png](/files/90d06d31eec6c760449c1d1c7b2b1157ae33642e)

* Следующее изображение представляет набранные символы как боксы: чтобы показать, как движки TeX обрабатывают символы с целью получения переносов строк:

![Paragraphanatomy3.png](/files/557c2c8745e2adabc4fd6349747c58195d41795f)

* Следующее изображение показывает боксы внутри боксов: более крупные строки абзаца (боксы), содержащие меньшие боксы (отдельные символы):

![Paragraphanatomy5.png](/files/f9e0072c4f9b3b4026f1b73e59ef40e0020af9b2)

* Следующее изображение показывает величину пространства между словами в каждой строке: эти межсловные пробелы создаются путём преобразования пробельных символов в гибкие glue, которые растягиваются или сжимаются, чтобы получить правильную длину каждой строки текста. Обратите внимание, что размер этих пробелов меняется от строки к строке:

![Paragraphanatomy4.png](/files/6371651c77e752bc484fe85d66cff7932d884daa)

* Следующее изображение сочетает боксы символов и соответствующие glue (пробелы), размещённые между отдельными словами:

![Paragraphanatomy6.png](/files/240323644f604a624241030d63f15d7fb660c30e)

### Визуализация других типов абзацного клея

Следующие абзацы также были набраны и обработаны с помощью LuaTeX, чтобы показать другие типы glue внутри и между парой абзацев. Обратите внимание, что `\rightskip` и `\leftskip` оба установлены в 0pt, поэтому они не показаны:

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

![](/files/4997568eafd33b16912b20d00a5d659a56ae1433)

### Работа с более глубокими (или более высокими) строками (боксами)

Как показано на графиках в [предыдущем разделе](#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/67acb45cd7d65c712bc3bbdf9e37ab02da1454d4)

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

![Изображение, показывающее glue \lineskip в TeX](/files/e91daf0d070261fe2a026e61012a751f796272eb)

Последняя строка текста абзаца имеет глубину больше обычной, что не позволяет 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 после правила в вертикальном режиме;
  * макросы `\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/846fe228108aa4a4275695383ba2e677dfa830c3)

### Пример вычислений межстрочного glue

В следующем примере мы предполагаем, что TeX/LaTeX использует следующие значения командных параметров:

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

Мы рассмотрим вычисление межстрочного glue для первых двух строк этого абзаца:

![OLV2glue-calcs-step0.png](/files/1376351fa7121154fdaf391bd1949572204731d5)

На следующем изображении движок TeX обработал первую строку абзаца и переместил её в создаваемый им вертикальный список. Он отслеживает глубину этой строки (`d<sub>1</sub>`) которая равна `2.1528` (пунктов):

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

Затем TeX готов добавить вторую строку в создаваемый им список: у этой строки есть высота (`h<sub>2</sub>`) которая равна `6.9444` (пунктов) и, кстати, глубина, `d<sub>2</sub>` для `0` (пунктов):

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

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

![OLV2glue-calcs-step3.png](/files/341cb88e85ed142ee3ffeddc239deef3c7d2692c)

Следующее изображение показывает вычисления glue для этой пары строк:

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

На последнем изображении показаны две строки, перемещённые на текущую страницу, с вычисленным количеством межстрочного glue, размещённым между ними:

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

### Ещё один параметр: \prevdepth

Как отмечалось выше, когда TeX создаёт вертикальную стопку (список) боксов, он сохраняет глубину последнего бокса, добавленного в этот список. Сохранённое значение глубины известно как «предыдущая глубина», к которой можно получить доступ через команду параметра `\prevdepth`.

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

`\prevdepth` предоставляет доступ на чтение и запись к значению «предыдущей глубины»:

* для чтения текущего значения `\prevdepth` вы можете написать:

```latex
\the\prevdepth
```

* чтобы установить текущее значение `\prevdepth` на `some value`, длину в пунктах, мм и т. д., вы можете написать:

```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)

Этот пример выдаёт следующий результат:

![Пример, демонстрирующий параметр \prevdepth в TeX](/files/6176ff6f93c7a0533fd254ecbbf9ebe73892f534)

#### Межстрочный glue нулевого размера: \offinterlineskip

Можно удалить весь межстрочный интервал с помощью макрокоманды `\nointerlineskip`, которая имеет определение, эквивалентное:

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

Обратите внимание, что `\maxdimen` равно `16383.99998pt`, наибольшая длина, которую может использовать TeX.

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

![offinterlineskip](/files/9e5d18df6e808e9451d59f1f85352525b0aa9caa)

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

![offinterlineskip](/files/da6f4e1fce17e6abfdf21aa494fb5b104a6e8a58)

#### \offinterlineskip и ненулевого \lineskip

Это `\nointerlineskip` макрос задаёт `\lineskip` в zero? Wait no, translation: `\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/adffb09c9d4693df609ae11bf26f8130e18d13b1)

Вы можете локализовать эффект(ы) использования `\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/ru/formatirovanie/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.
