> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# {Minted}

Bài viết này hướng dẫn cách sử dụng [gói `minted`](https://ctan.org/pkg/minted?lang=en) để đị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ụ:

```latex theme={null}
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{python}
import numpy as np
    
def 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:

<p style={{ textAlign: "center" }}>
  <img src="https://sharelatex-wiki-cdn-671420.c.cdn77.org/learn-scripts/images/f/f0/OLV2minted.png" alt="Ví dụ minh họa kết quả đầu ra của gói minted" />
</p>

Có hai lệnh quan trọng ở đây. Trong phần preamble, gói được nạp bằng cách viết

```latex theme={null}
\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](https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted#Reference_guide) để 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](https://pygments.org/). [Overleaf](https://www.overleaf.com/) 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".

### Cách dùng cơ bản

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:

```latex theme={null}
\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 np
    
def 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:

<p style={{ textAlign: "center" }}>
  <img src="https://sharelatex-wiki-cdn-671420.c.cdn77.org/learn-scripts/images/f/ff/OLV2minted2.png" alt="Ví dụ áp dụng định dạng cho mã được sắp chữ bởi gói minted" />
</p>

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](https://www.overleaf.com/learn/latex/Lengths_in_LaTeX) 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](https://www.overleaf.com/learn/latex/Using_colours_in_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ữ](https://www.overleaf.com/learn/latex/Font_sizes_and_kinds%23Reference_guide) 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.

### Chèn mã từ tệp

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:

```latex theme={null}
\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:

<img src="https://sharelatex-wiki-cdn-671420.c.cdn77.org/learn-scripts/images/c/c8/OLV2mintedinput.png" alt="Sử dụng minted để nhập một tệp mã" height="392" width="600" />

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à:

```latex theme={null}
\inputminted[firstline=2, lastline=12]{octave}{BitXorMatrix.m}
```

### Mã một dòng

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 đề.

```latex wrap theme={null}
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:

<img src="https://sharelatex-wiki-cdn-671420.c.cdn77.org/learn-scripts/images/d/d9/OLV2mintedHTML.png" alt="Ví dụ mã một dòng với minted" height="112" width="600" />

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ự '|'.

### Sự cố với Overleaf tự lưu trữ

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](https://github.com/yu-i-i/overleaf-cep/issues/131). Bạn cần bật arm instruction profile và một số system call để minted hoạt động.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.