跳到正文

Scissor LaTeX 中的 listings

listings 宏包在 Scissor LaTeX 中部分可用:lstlisting 会完全按照输入保留代码,在环境上指定 language= 时还会着色,\lstinline 也可用;\lstset、行号、边框、标题和标签会被忽略,\lstinputlisting 会被跳过。

宏包的作用

listings 用来排版源代码。lstlisting 环境会保留换行和空格,配合 language=Python(或 C、Java、SQL 等),关键字、注释和字符串会以不同样式显示。通过选项可以加上行号、边框、标题和颜色,既可以针对单个代码清单设置,也可以用 \lstset 为整篇文档设置。\lstinline 是行内形式,\lstinputlisting 从文件中读取代码。

这里可用的功能

功能在 Scissor LaTeX 中说明
\begin{lstlisting} ... \end{lstlisting}可用等宽字体,完全按照输入显示。
环境上的 [language=Python]可用使用固定配色方案进行语法着色。
[language={[Sharp]C}] 及其他方言可用方括号中的方言会与语言名一起读取。
\lstinline|code|, \lstinline{code}可用等宽字体,没有颜色。
numbers=left, frame=single, basicstyle, keywordstyle, backgroundcolor忽略被忽略,不显示提示。
caption=, label=忽略不输出标题,指向该标签的 \ref 显示为“??”。
\lstset{...}, \lstdefinestyle, style=忽略被忽略,包括其中设置的 language=。
\lstinputlisting{file}不支持会被跳过并显示提示。
\lstlistoflistings, \lstnewenvironment不支持会被跳过并显示提示。

语言名称不区分大小写。Python、C、C++、C#、Java、JavaScript、Rust、Go、R、MATLAB、SQL、Bash、HTML 和 TeX 等常用语言都有着色。无法识别的名称(例如 Fortran)会得到没有颜色的等宽代码,不显示提示。

示例

在每个代码清单上指定语言:

带 language=Python 的 lstlisting

LaTeX导言区: \usepackage{listings}在编辑器中打开 (在新标签页中打开)
\begin{lstlisting}[language=Python]
def mean(values):
    # average of a list of numbers
    return sum(values) / len(values)

print(mean([40, 44, 48]))
\end{lstlisting}
由 Scissor LaTeX 排版: 带 language=Python 的 lstlisting

用 \lstset 设置的语言不会被使用,所以第一个代码清单没有颜色。numbers 和 frame 等版式选项同样会被忽略:

\lstset 被忽略

\documentclass{article}
\usepackage{listings}
\lstset{language=SQL, numbers=left, frame=single}
\begin{document}
\begin{lstlisting}
SELECT name FROM staff WHERE id = 44;
\end{lstlisting}
\begin{lstlisting}[language=SQL]
SELECT name FROM staff WHERE id = 44;
\end{lstlisting}
\end{document}

用 \lstinline 写行内代码,可以像 \verb 一样使用任意定界符:

句子中的 \lstinline

LaTeX导言区: \usepackage{listings}在编辑器中打开 (在新标签页中打开)
The loop \lstinline|for i in range(44):| runs 44 times, and
\lstinline{total += i} adds up the numbers.
由 Scissor LaTeX 排版: 句子中的 \lstinline

放在 figure 中带标题的代码清单

LaTeX导言区: \usepackage{listings}在编辑器中打开 (在新标签页中打开)
\begin{figure}[h]
\begin{lstlisting}[language=Python]
print(sum(range(44)))
\end{lstlisting}
\caption{Adding the numbers below 44}
\label{lst:sum}
\end{figure}
The code in Listing~\ref{lst:sum} prints 946.
由 Scissor LaTeX 排版: 放在 figure 中带标题的代码清单

兼容性

  • 从 TeX 发行版迁移到这里: 每个 lstlisting 的代码都会显示。要得到颜色,请把 language= 从 \lstset 移到每个代码清单上;并把 \lstinputlisting 所引用文件中的代码粘贴到文档里。
  • 从这里迁移到 TeX 发行版: 文档无需修改即可在那里编译,你的选项届时会生效。

完整手册见 CTAN:ctan.org/pkg/listings。另请参阅 LaTeX 中的代码清单和 minted。

常见问题

为什么我的代码清单没有颜色?

语言很可能是用 \lstset 设置的,而它在这里会被忽略。请在 \begin{lstlisting} 之后写上 [language=Python](或你使用的语言)。

能显示行号吗?

暂时还不能。numbers=left 会被接受,但不起作用。

本页的每个示例都在构建网站时由 Scissor LaTeX 排版。 最后更新:2026-11-07