Bài viết này hướng dẫn cách sử dụng gói minted để định dạng và tô sáng cú pháp mã nguồn ngôn ngữ lập trình trong tài liệu LaTeX, bắt đầu với một ví dụ:
\documentclass{article}\usepackage{minted}\begin{document}\begin{minted}{python}import numpy as npdef incmatrix(genl1,genl2): m = len(genl1) n = len(genl2) M = None #to become the incidence matrix VT = np.zeros((n*m,1), int) #dummy variable #compute the bitwise xor matrix M1 = bitxormatrix(genl1) M2 = np.triu(bitxormatrix(genl2),1) for i in range(m-1): for j in range(i+1, m): [r,c] = np.where(M2 == M1[i,j]) for k in range(len(r)): VT[(i)*n + r[k]] = 1; VT[(i)*n + c[k]] = 1; VT[(j)*n + r[k]] = 1; VT[(j)*n + c[k]] = 1; if M is None: M = np.copy(VT) else: M = np.concatenate((M, VT), 1) VT = np.zeros((n*m,1), int) return M\end{minted}\end{document}
Ví dụ này tạo ra kết quả sau:
Có hai lệnh quan trọng ở đây. Trong phần preamble, gói được nạp bằng cách viết
\usepackage{minted}
sau đó các thẻ \begin{minted}{python} và \end{minted} giới hạn một môi trường in văn bản nguyên văn bằng phông chữ đơn cách (monospaced), đồng thời tô màu cho chú thích, từ khóa và hàm. Tham số python là ngôn ngữ lập trình mà mã nguồn được viết. minted hỗ trợ hơn 150 ngôn ngữ lập trình và ngôn ngữ đánh dấu cũng như các tệp cấu hình; xem hướng dẫn tham khảo để biết danh sách các ngôn ngữ được hỗ trợ.Lưu ý: Để minted hoạt động với bản phân phối LaTeX cục bộ của bạn, cần cài đặt thêm một chương trình có tên Pygments. Overleaf giúp bạn khỏi phải cài đặt nó và chạy các lệnh đặc biệt để biên dịch tài liệu — trên Overleaf, các tài liệu sử dụng minted sẽ hoạt động “ngay lập tức”.
Như minh họa trong ví dụ sau, môi trường minted có thể được cấu hình để thay đổi cách trình bày trực quan của mã được sắp chữ. Ở đây, môi trường minted sử dụng nhiều tham số dạng key=value, phân tách bằng dấu phẩy:
\documentclass{article}\usepackage{minted}\usepackage{xcolor} % to access the named colour LightGray\definecolor{LightGray}{gray}{0.9}\begin{document}\begin{minted}[frame=lines,framesep=2mm,baselinestretch=1.2,bgcolor=LightGray,fontsize=\footnotesize,linenos]{python}import numpy as npdef incmatrix(genl1,genl2): m = len(genl1) n = len(genl2) M = None #to become the incidence matrix VT = np.zeros((n*m,1), int) #dummy variable #compute the bitwise xor matrix M1 = bitxormatrix(genl1) M2 = np.triu(bitxormatrix(genl2),1) for i in range(m-1): for j in range(i+1, m): [r,c] = np.where(M2 == M1[i,j]) for k in range(len(r)): VT[(i)*n + r[k]] = 1; VT[(i)*n + c[k]] = 1; VT[(j)*n + r[k]] = 1; VT[(j)*n + c[k]] = 1; if M is None: M = np.copy(VT) else: M = np.concatenate((M, VT), 1) VT = np.zeros((n*m,1), int) return M\end{minted}\end{document}
Ví dụ này tạo ra kết quả sau:
Các tham số được dùng trong ví dụ này là:
frame=lines: vẽ hai đường kẻ, một ở trên và một ở dưới đoạn mã để tạo khung. Các giá trị khác có thể dùng là leftline, topline, bottomline và single.
framesep=2mm: khoảng cách khung được đặt là 2mm. Có thể dùng các đơn vị độ dài khác.
baselinestretch=1.2: khoảng cách dòng của mã được đặt là 1.2.
bgcolor=LightGray: màu nền được đặt là LightGray. Bạn cần nạp gói xcolor để tùy chọn này hoạt động. Xem Sử dụng màu trong LaTeX để tìm hiểu thêm về cách xử lý màu.
fontsize=\footnotesize: cỡ chữ được đặt là footnotesize. Có thể đặt bất kỳ cỡ chữ nào khác.
linenos: bật đánh số dòng.
Các tùy chọn khác có thể hữu ích:
mathescape: bật chế độ toán học trong chú thích của mã.
rulecolor: thay đổi màu của khung.
showspaces: bật một ký tự đặc biệt để hiển thị các khoảng trắng.
Mã thường được lưu trong tệp nguồn, vì vậy một lệnh tự động nhập mã từ tệp là rất tiện lợi, như minh họa trong ví dụ sau:
\documentclass{article}\usepackage{minted}\title{Importing files using minted}\begin{document}The next code will be directly imported from a file:\inputminted{octave}{BitXorMatrix.m}\end{document}
Ví dụ này tạo ra kết quả sau:Lệnh \inputminted{octave}{BitXorMatrix.m} nhập mã từ tệp BitXorMatrix.m, tham số octave cho LaTeX biết ngôn ngữ lập trình của mã. Lệnh này có thể nhận thêm hai tham số để chỉ nhập một phần của tệp; ví dụ, để nhập mã từ dòng 2 đến dòng 12, lệnh sẽ là:
Nếu bạn chỉ cần chèn một dòng mã, lệnh \mint (có cú pháp được trình bày trong ví dụ tiếp theo) sẽ giải quyết vấn đề.
One-line code formatting also works with \texttt{minted}. For example, a small fragment of HTML like this:\mint{html}|<h2>Something <b>here</b></h2>|\noindent can be formatted correctly.
Ví dụ này tạo ra kết quả sau:Tham số trong cặp ngoặc nhọn đặt ngôn ngữ lập trình (trong trường hợp này là ngôn ngữ đánh dấu html), còn văn bản thực tế cần định dạng được giới hạn bởi ký tự ’|’.
Nếu bạn sử dụng sandbox compile cùng với một máy chủ Overleaf tự triển khai, minted có thể không hoạt động tốt. Để biết thông tin chi tiết, bạn có thể xem: issues/131. Bạn cần bật arm instruction profile và một số system call để minted hoạt động.
Lần sửa đổi cuối 4 tháng 10, 2026
Trang này có hữu ích không?
Assistant
Responses are generated using AI and may contain mistakes.