listings trong Scissor LaTeX
Gói listings hoạt động một phần trong Scissor LaTeX: lstlisting giữ mã đúng như đã gõ và tô màu khi bạn đặt language= trên môi trường, và \lstinline hoạt động; \lstset, số dòng, khung, chú thích và nhãn bị bỏ qua, còn \lstinputlisting bị bỏ qua.
Gói này làm gì
listings dàn trang mã nguồn. Môi trường lstlisting giữ nguyên các dấu xuống dòng và khoảng trắng, và với language=Python (hoặc C, Java, SQL ...) nó trình bày từ khóa, chú thích và chuỗi theo các kiểu khác nhau. Các tùy chọn thêm số dòng, khung, chú thích và màu, cho từng đoạn mã hoặc cho cả tài liệu bằng \lstset. \lstinline là dạng nội dòng, và \lstinputlisting đọc mã từ một tệp.
Những gì hoạt động ở đây
| Tính năng | Trong Scissor LaTeX | Ghi chú |
|---|---|---|
\begin{lstlisting} ... \end{lstlisting} | Hoạt động | Phông đơn cách, đúng như đã gõ. |
[language=Python] trên môi trường | Hoạt động | Màu cú pháp theo một bảng màu cố định. |
[language={[Sharp]C}] và các phương ngữ khác | Hoạt động | Phương ngữ trong ngoặc vuông được đọc cùng với tên. |
\lstinline|code|, \lstinline{code} | Hoạt động | Phông đơn cách, không có màu. |
numbers=left, frame=single, basicstyle, keywordstyle, backgroundcolor | Bỏ qua | Bị bỏ qua mà không có thông báo. |
caption=, label= | Bỏ qua | Không có chú thích nào được in, và một \ref đến nhãn hiện "??". |
\lstset{...}, \lstdefinestyle, style= | Bỏ qua | Bị bỏ qua, kể cả một language= được đặt ở đó. |
\lstinputlisting{file} | Không hỗ trợ | Bị bỏ qua kèm thông báo. |
\lstlistoflistings, \lstnewenvironment | Không hỗ trợ | Bị bỏ qua kèm thông báo. |
Tên ngôn ngữ không phân biệt chữ hoa chữ thường. Màu có sẵn cho các ngôn ngữ phổ biến như Python, C, C++, C#, Java, JavaScript, Rust, Go, R, MATLAB, SQL, Bash, HTML và TeX. Một tên không được nhận biết, như Fortran, cho ra mã đơn cách thông thường mà không có thông báo.
Ví dụ
Hãy đặt ngôn ngữ trên từng đoạn mã:
lstlisting với language=Python
\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}Ngôn ngữ đặt bằng \lstset không được dùng, nên đoạn mã này không có màu. Các tùy chọn bố cục như numbers và frame cũng bị bỏ qua:
\lstset bị bỏ qua
\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}Mã nội dòng với \lstinline nhận bất kỳ ký tự phân cách nào, giống \verb:
\lstinline trong một câu
The loop \lstinline|for i in range(44):| runs 44 times, and
\lstinline{total += i} adds up the numbers.Một đoạn mã có chú thích bên trong 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.Khả năng tương thích
- Từ một bản cài đặt TeX sang đây: mã của mọi
lstlistingđều được hiển thị. Hãy chuyểnlanguage=từ\lstsetsang từng đoạn mã để có màu, và dán mã từ các tệp của\lstinputlistingvào tài liệu. - Từ đây sang một bản cài đặt TeX: tài liệu biên dịch ở đó mà không cần sửa, và khi đó các tùy chọn của bạn sẽ được áp dụng.
Tài liệu hướng dẫn đầy đủ có trên CTAN: ctan.org/pkg/listings. Xem thêm Trình bày mã nguồn trong LaTeX và minted.
Hỏi và đáp
Vì sao đoạn mã của tôi không có màu?
Có lẽ ngôn ngữ được đặt bằng \lstset, lệnh này bị bỏ qua ở đây. Hãy viết [language=Python] (hoặc ngôn ngữ của bạn) ngay sau \begin{lstlisting}.
Tôi có thể hiển thị số dòng không?
Hiện chưa được. numbers=left được chấp nhận rồi bỏ qua.
Mọi ví dụ trên trang này đều được Scissor LaTeX dàn trang khi xây dựng trang web. Cập nhật lần cuối 2026-11-07.