> 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/11-code-listing.md).

# Листинг кода

## Введение

LaTeX широко используется в науке, а программирование стало важным аспектом в нескольких областях науки, отсюда и необходимость в инструменте, который корректно отображает код. В этой статье объясняется, как использовать стандартную **verbatim** среду, а также пакет **listings**, который предоставляет более продвинутые возможности форматирования кода. [В этой отдельной статье](/latex/ru/formatirovanie/12-code-highlighting-with-minted.md) обсуждается `minted` пакет, который выполняет подсветку синтаксиса с использованием библиотеки Python `pygmentize` .

## Среда verbatim

Инструмент по умолчанию для отображения кода в LaTeX — это `verbatim`, который выводит текст моноширинным шрифтом.

```latex
\begin{verbatim}
Текст, заключённый в среду \texttt{verbatim}
печатается напрямую
и все команды \LaTeX{} игнорируются.
\end{verbatim}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%7D%0A%5Cend%7Bdocument%7D)

Приведённый выше код даёт следующий результат:

![Verbatim1.png](/files/8cedf500bd4b1d391d7f41a72e2265af5f891082)

Как и в примере во введении, весь текст выводится с сохранением разрывов строк и пробелов. У этой команды есть звёздная версия, вывод которой немного отличается.

```latex
\begin{verbatim*}
Текст, заключённый в среду \texttt{verbatim}
печатается напрямую
и все команды \LaTeX{} игнорируются.
\end{verbatim*}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%2A%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%2A%7D%0A%5Cend%7Bdocument%7D)

Приведённый выше код даёт следующий результат:

![Verbatim2.png](/files/fd59c5b96cc5ea3a3f9e33dac1f4afa4f234688e)

В этом случае пробелы выделяются специальным символом «видимый пробел»: **`␣`**.

Текст в стиле verbatim также можно использовать в абзаце с помощью `\verb` команды.

```latex
В каталоге \verb|C:\Windows\system32| вы можете найти множество системных приложений Windows.
системных приложений.

Команда \verb+\ldots+ выводит \ldots
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=using+the+%5Cverb+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIn+the+directory+%5Cverb%7CC%3A%5CWindows%5Csystem32%7C+you+can+find+a+lot+of+Windows+%0Asystem+applications.+%0A+%0AThe+%5Cverb%2B%5Cldots%2B+command+produces+%5Cldots%0A%5Cend%7Bdocument%7D)

Приведённый выше код даёт следующий результат:

![Verbatim3OLV2.png](/files/54f19ea80bf4016b8de19287092f9bc3872d5450)

Команда `\verb|C:\Windows\system32|` печатает текст внутри разделителей `|` в формате verbatim. В качестве разделителя можно использовать любой символ, кроме букв и `*`, можно использовать в качестве разделителя. Например `\verb+\ldots+` использует `+` в качестве разделителя.

## Использование listings для подсветки кода

Чтобы использовать `lstlisting` среду, необходимо добавить следующую строку в преамбулу вашего документа:

```latex
\usepackage{listings}
```

Вот пример использования `lstlisting` среды из `listings` пакета:

```latex
\begin{lstlisting}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # станет матрицей инцидентности
    VT = np.zeros((n*m,1), int)  # вспомогательная переменная

    # вычисляем матрицу побитового xor
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Откройте этот `listings` пример на Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Приведённый выше код даёт следующий результат:

![CodeListingEx1.png](/files/b19595b5a3993437c392857fc03a535631b2bddf)

В этом примере вывод игнорирует все команды LaTeX, а текст печатается с сохранением всех введённых разрывов строк и пробелов. Давайте посмотрим второй пример:

```latex
\begin{lstlisting}[language=Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # станет матрицей инцидентности
    VT = np.zeros((n*m,1), int)  # вспомогательная переменная

    # вычисляем матрицу побитового xor
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Откройте этот `listings` пример на Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Python+listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%5Blanguage%3DPython%5D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Приведённый выше код даёт следующий результат:

![CodeListingEx2.png](/files/e74b3270ad5c5583c23097c1d143dbf9c09803fb)

Дополнительный параметр в квадратных скобках `[language=Python]` включает подсветку кода для этого конкретного языка программирования (Python), специальные слова выделяются полужирным шрифтом, а комментарии — курсивом. См. [справочное руководство](#reference-guide) для полного списка поддерживаемых языков программирования.

## Импорт кода из файла

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

```latex
Следующий код будет напрямую импортирован из файла

\lstinputlisting[language=Octave]{BitXorMatrix.m}
```

![CodeListingEx3.png](/files/40d4cae4f41401994b952ea075cd11e4f3a44be9)

Команда `\lstinputlisting[language=Octave]{BitXorMatrix.m}` импортирует код из файла *BitXorMatrix.m*, дополнительный параметр в квадратных скобках включает подсветку языка для языка программирования Octave. Если вам нужно импортировать только часть файла, вы можете указать два параметра, разделённые запятой, внутри скобок. Например, чтобы импортировать код со строки 2 по строку 12, предыдущая команда становится

```latex
\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}
```

Если `firstline` или `lastline` опущен, считается, что значения соответствуют началу файла или его концу соответственно.

## Стили и цвета кода

Форматирование кода с помощью **пакета** легко настраивается. Посмотрим пример

```latex
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
Следующий код будет напрямую импортирован из файла

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}
```

Приведённый выше код даёт следующий результат:

![CodeListingEx4.png](/files/87ae41922576a3e4f12b1a4713faab404faa505a)

Как видите, расцветка и оформление кода значительно повышают читаемость.

В этом примере пакет **xcolor** импортируется, а затем команда `\definecolor{}{}{}` используется для определения новых цветов в формате RGB, которые затем будут использованы. Для получения дополнительной информации см.: [использование цветов в LaTeX](/latex/ru/formatirovanie/13-using-colors-in-latex.md)

По сути, для создания стиля этого примера используются две команды:

**\lstdefinestyle{mystyle}{...}**

Определяет новый стиль списка кода под названием «mystyle». Во второй паре фигурных скобок передаются параметры, определяющие этот стиль; см. справочное руководство для полного описания этих и некоторых других параметров.

**\lstset{style=mystyle}**

Включает стиль «mystyle». Эту команду можно использовать в документе, чтобы при необходимости переключиться на другой стиль.

## Подписи и список листингов

Как и в плавающих объектах ([таблицы](/latex/ru/risunki-i-tablicy/01-tables.md) и [рисунки](/latex/ru/drugie-temy/27-inserting-images.md)), к листингу можно добавить подпись для более наглядного представления.

```latex
\begin{lstlisting}[language=Python, caption=Python example]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # станет матрицей инцидентности
    VT = np.zeros((n*m,1), int)  # вспомогательная переменная

    # вычисляем матрицу побитового xor
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Откройте этот `listings` пример на Overleaf](/latex/ru/formatirovanie/11-code-listing.md)

Приведённый выше код даёт следующий результат:

![CodeListingEx5.png](/files/83595b58fd5ce1afecca0c470cfa2c0ee073fd80)

Добавление параметра, разделённого запятой `caption=Python example` внутри квадратных скобок включает подпись. Эту подпись затем можно использовать в списке листингов.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/746caf4f6b78df756a15198723b8603a56688e86)

## Пример проекта Overleaf

Откройте эту ссылку, чтобы [попробовать `listings` пример пакета на Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## справочнике

### Поддерживаемые языки

**поддерживаемые языки (и их диалекты, если возможно; диалекты указаны в скобках, а диалекты по умолчанию выделены курсивом):**

|                                                        |                                                  |
| ------------------------------------------------------ | ------------------------------------------------ |
| ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, *R/3 6.10*) | ACSL                                             |
| Ada (*2005*, 83, 95)                                   | Algol (60, *68*)                                 |
| Ant                                                    | Assembler (Motorola68k, x86masm)                 |
| Awk (*gnu*, POSIX)                                     | bash                                             |
| Basic (Visual)                                         | C (*ANSI*, Handel, Objective, Sharp)             |
| C++ (ANSI, GNU, *ISO*, Visual)                         | Caml (*light*, Objective)                        |
| CIL                                                    | Clean                                            |
| Cobol (1974, *1985*, ibm)                              | Comal 80                                         |
| command.com (*WinXP*)                                  | Comsol                                           |
| csh                                                    | Delphi                                           |
| Eiffel                                                 | Elan                                             |
| erlang                                                 | Euphoria                                         |
| Fortran (77, 90, *95*)                                 | GCL                                              |
| Gnuplot                                                | Haskell                                          |
| HTML                                                   | IDL (empty, CORBA)                               |
| inform                                                 | Java (empty, AspectJ)                            |
| JVMIS                                                  | ksh                                              |
| Lingo                                                  | Lisp (empty, Auto)                               |
| Logo                                                   | make (empty, gnu)                                |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                           |
| Mercury                                                | MetaPost                                         |
| Miranda                                                | Mizar                                            |
| ML                                                     | Modula-2                                         |
| MuPAD                                                  | NASTRAN                                          |
| Oberon-2                                               | OCL (decorative, *OMG*)                          |
| Octave                                                 | Oz                                               |
| Pascal (Borland6, *Стандартный*, XSC)                  | Perl                                             |
| PHP                                                    | PL/I                                             |
| Plasm                                                  | PostScript                                       |
| POV                                                    | Prolog                                           |
| Promela                                                | PSTricks                                         |
| Python                                                 | R                                                |
| Reduce                                                 | Rexx                                             |
| RSL                                                    | Ruby                                             |
| S (empty, PLUS)                                        | SAS                                              |
| Scilab                                                 | sh                                               |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                     |
| SPARQL                                                 | SQL                                              |
| tcl (empty, tk)                                        | TeX (AlLaTeX, common, LaTeX, *plain*, primitive) |
| VBScript                                               | Verilog                                          |
| VHDL (empty, AMS)                                      | VRML (*97*)                                      |
| XML                                                    | XSLT                                             |

### Параметры для настройки стилей листинга кода

* **backgroundcolor** - цвет фона. Требуется внешний ***color*** или ***xcolor*** пакет.
* **commentstyle** - стиль комментариев на исходном языке.
* **basicstyle** - размер/семейство шрифта и т. д. для исходного кода (например, `basicstyle=\ttfamily\small`)
* **keywordstyle** - стиль ключевых слов на исходном языке (например, `keywordstyle=\color{red}`)
* **numberstyle** - стиль, используемый для номеров строк
* **numbersep** - расстояние от номеров строк до кода
* **stringstyle** - стиль строк на исходном языке
* **showspaces** - выделять пробелы в коде (true/false)
* **showstringspaces** - выделять пробелы в строках (true/false)
* **showtabs** - выделять табуляции в коде (true/false)
* **numbers** - положение номеров строк (left/right/none, то есть без номеров строк)
* **prebreak** - отображаемый знак в конце разрываемой строки (например, `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - положение подписи (t/b)
* **фрейм** - отображение рамки вокруг кода (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - указывает, должны ли автоматические переносы происходить только на пробелах
* **breaklines** - автоматический перенос строк
* **keepspaces** - сохранять пробелы в коде, полезно для отступов
* **tabsize** - размер табуляции по умолчанию
* **escapeinside** - указать символы для перехода из исходного кода в LaTeX (например, `escapeinside={\%*}{*)}`)
* **rulecolor** - указывает цвет рамки

## Дополнительное чтение

Для получения дополнительной информации см.:

* [Подсветка кода с помощью minted](/latex/ru/formatirovanie/12-code-highlighting-with-minted.md)
* [Использование цветов в LaTeX](/latex/ru/formatirovanie/13-using-colors-in-latex.md)
* [Содержание](/latex/ru/struktura-dokumenta/02-table-of-contents.md)
* [Управление в большом проекте](/latex/ru/struktura-dokumenta/07-management-in-a-large-project.md)
* [Многофайловые проекты LaTeX](/latex/ru/struktura-dokumenta/08-multi-file-latex-projects.md)
* [Размеры, семейства и начертания шрифтов](/latex/ru/shrifty/01-font-sizes-families-and-styles.md)
* [Шрифтовые гарнитуры](/latex/ru/shrifty/02-font-typefaces.md)
* [**listings** документация пакета](https://texdoc.org/serve/listings/0)
* [**listings** сайт CTAN](http://www.ctan.org/pkg/listings)


---

# 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/11-code-listing.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.
