Chuyển đến nội dung

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ăngTrong Scissor LaTeXGhi chú
\begin{lstlisting} ... \end{lstlisting}Hoạt độngPhông đơn cách, đúng như đã gõ.
[language=Python] trên môi trườngHoạt độngMàu cú pháp theo một bảng màu cố định.
[language={[Sharp]C}] và các phương ngữ khácHoạt độngPhương ngữ trong ngoặc vuông được đọc cùng với tên.
\lstinline|code|, \lstinline{code}Hoạt độngPhông đơn cách, không có màu.
numbers=left, frame=single, basicstyle, keywordstyle, backgroundcolorBỏ quaBị bỏ qua mà không có thông báo.
caption=, label=Bỏ quaKhông có chú thích nào được in, và một \ref đến nhãn hiện "??".
\lstset{...}, \lstdefinestyle, style=Bỏ quaBị 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, \lstnewenvironmentKhô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

LaTeXPhần mở đầu: \usepackage{listings}Mở trong trình soạn (mở trong thẻ mới)
\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}
Dàn trang bởi Scissor LaTeX: lstlisting với language=Python

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

LaTeXPhần mở đầu: \usepackage{listings}Mở trong trình soạn (mở trong thẻ mới)
The loop \lstinline|for i in range(44):| runs 44 times, and
\lstinline{total += i} adds up the numbers.
Dàn trang bởi Scissor LaTeX: \lstinline trong một câu

Một đoạn mã có chú thích bên trong figure

LaTeXPhần mở đầu: \usepackage{listings}Mở trong trình soạn (mở trong thẻ mới)
\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.
Dàn trang bởi Scissor LaTeX: Một đoạn mã có chú thích bên trong figure

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ển language= từ \lstset sang từng đoạn mã để có màu, và dán mã từ các tệp của \lstinputlisting và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.