Перейти к содержанию

Листинги кода в LaTeX

Поместите код в окружение verbatim, lstlisting или minted или используйте \verb|...| внутри строки; Scissor LaTeX набирает его моноширинным шрифтом ровно так, как он написан, и подсвечивает синтаксис, если указан язык.

verbatim

Внутри verbatim ничего не интерпретируется: обратные косые черты, фигурные скобки, $ и % печатаются как есть, а переносы строк и пробелы сохраняются. Это самый простой способ показать код или вывод терминала.

Блок verbatim

\begin{verbatim}
for i in range(44):
    print(i)   # $ and \textbf stay as typed
\end{verbatim}

Код в строке: \verb

\verb показывает короткий фрагмент кода внутри предложения. Символ сразу после \verb служит разделителем; выберите такой, которого нет в коде, например | или +.

Код в строке через \verb и \texttt

Call \verb|total(xs)| to add the list, or type \verb+x_1 = 44+.
For plain words in a monospaced font, \texttt{main.tex} is enough.
Свёрстано в Scissor LaTeX: Код в строке через \verb и \texttt

\texttt{...} меняет только шрифт: специальные символы вроде _ и % там всё равно нужно экранировать, а \verb принимает их как есть.

listings: lstlisting с языком

Пакет listings даёт окружение lstlisting. С language=... код получает подсветку синтаксиса.

lstlisting с language=Python

LaTeXПреамбула: \usepackage{listings}Открыть в редакторе (откроется в новой вкладке)
\begin{lstlisting}[language=Python]
def total(xs):
    """Add up the numbers in xs."""
    return sum(xs)

print(total([40, 4]))  # 44
\end{lstlisting}
Свёрстано в Scissor LaTeX: lstlisting с language=Python

\lstinline|code| является строчной формой, как \verb.

minted

minted принимает язык как аргумент. В установленном TeX ему нужны Python и параметр -shell-escape; в Scissor LaTeX он работает без того и другого.

minted с указанием языка

LaTeXПреамбула: \usepackage{minted}Открыть в редакторе (откроется в новой вкладке)
\begin{minted}{rust}
fn main() {
    let answer = 40 + 4;
    println!("{}", answer);
}
\end{minted}
Inline: \mintinline{rust}{let x = 44;}
Свёрстано в Scissor LaTeX: minted с указанием языка

Что читается

КомандаВ Scissor LaTeXПримечания
verbatim, verbatim*Работает
\verb, \verb*Работает
lstlistingЧастичноlanguage= читается; все остальные параметры (numbers, caption, frame, basicstyle, firstline ...) игнорируются.
\lstinlineРаботаетБез подсветки синтаксиса в строке.
\lstset{...}ОпускаетсяЗаданный здесь язык не используется; указывайте language= в каждом листинге.
mintedЧастичноЯзык читается; параметры вроде linenos и frame игнорируются.
\mintinline{lang}{code}РаботаетБез подсветки синтаксиса в строке.
Verbatim, BVerbatim (fancyvrb)ЧастичноПоказываются как verbatim; параметры игнорируются.
\lstinputlisting{file}, \inputminted{lang}{file}Не поддерживаетсяПропускается с сообщением; вставьте код в документ.
\lstnewenvironment, \newmintedНе поддерживается

Подсветка синтаксиса доступна для распространённых языков, среди них Python, C, C++, Java, JavaScript, TypeScript, Rust, Go, Ruby, R, Julia, MATLAB, SQL, Bash, HTML, CSS, JSON, YAML, TeX и LaTeX. Регистр в именах языков не важен, поэтому Python и python означают одно и то же. Нераспознанное имя даёт обычный моноширинный код.

Код из файла

В установленном TeX \lstinputlisting и \inputminted читают код из другого файла. Scissor LaTeX пропускает их и сообщает об этом на вкладке «Проблемы»:

\lstinputlisting пропускается

LaTeXПреамбула: \usepackage{listings}Открыть в редакторе (откроется в новой вкладке)
The script below is not shown:
\lstinputlisting[language=Python]{scripts/total.py}
Paste the code into an lstlisting environment instead.

Вкладка «Проблемы»: 1 included file is not part of this conversion

Отличия от установленного TeX

Страницы пакетов см. в разделах listings и minted. Полные руководства находятся на CTAN: listings, minted и fancyvrb.

Вопросы и ответы

Как добавить блок кода в LaTeX?

Оберните код в \begin{verbatim} ... \end{verbatim} или в lstlisting с [language=Python] для подсветки синтаксиса.

Работает ли minted без shell escape?

В Scissor LaTeX да: окружения minted подсвечиваются без Python и без -shell-escape. В установленном TeX minted по-прежнему нужно и то, и другое.

Почему в моём листинге нет номеров строк?

Scissor LaTeX игнорирует numbers=left и другие параметры оформления listings. Читается только язык.

Каждый пример на этой странице верстается в Scissor LaTeX при сборке сайта. Обновлено 2026-11-07.