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
\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}用 \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
The loop \lstinline|for i in range(44):| runs 44 times, and
\lstinline{total += i} adds up the numbers.放在 figure 中带标题的代码清单
\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.兼容性
- 从 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