Листинги кода в 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.\texttt{...} меняет только шрифт: специальные символы вроде _ и % там всё равно нужно экранировать, а \verb принимает их как есть.
listings: lstlisting с языком
Пакет listings даёт окружение lstlisting. С language=... код получает подсветку синтаксиса.
lstlisting с language=Python
\begin{lstlisting}[language=Python]
def total(xs):
"""Add up the numbers in xs."""
return sum(xs)
print(total([40, 4])) # 44
\end{lstlisting}\lstinline|code| является строчной формой, как \verb.
minted
minted принимает язык как аргумент. В установленном TeX ему нужны Python и параметр -shell-escape; в Scissor LaTeX он работает без того и другого.
minted с указанием языка
\begin{minted}{rust}
fn main() {
let answer = 40 + 4;
println!("{}", answer);
}
\end{minted}
Inline: \mintinline{rust}{let x = 44;}Что читается
| Команда | В 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 пропускается
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.