> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/vi/dinh-dang/11-code-listing.md).

# Danh sách mã

## Giới thiệu

LaTeX được dùng rộng rãi trong khoa học và lập trình đã trở thành một khía cạnh quan trọng trong một số lĩnh vực khoa học, vì vậy cần có một công cụ hiển thị mã đúng cách. Bài viết này giải thích cách sử dụng môi trường chuẩn **verbatim** cũng như gói **listings**, cung cấp các tính năng định dạng mã nâng cao hơn. [Bài viết riêng này](/latex/vi/dinh-dang/12-code-highlighting-with-minted.md) thảo luận về `minted` gói, gói này thực hiện tô sáng cú pháp bằng Python `pygmentize` thư viện.

## Môi trường verbatim

Công cụ mặc định để hiển thị mã trong LaTeX là `verbatim`, môi trường này tạo ra đầu ra bằng phông chữ đơn khoảng.

```latex
\begin{verbatim}
Văn bản được bao trong môi trường \texttt{verbatim}
được in trực tiếp
và tất cả các lệnh \LaTeX{} đều bị bỏ qua.
\end{verbatim}
```

[Mở ví dụ này trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%7D%0A%5Cend%7Bdocument%7D)

Mã trên cho ra kết quả sau:

![Verbatim1.png](/files/211ed92f1deaed85904dd5492e344de47ddbe777)

Cũng như trong ví dụ ở phần giới thiệu, toàn bộ văn bản được in ra với việc giữ nguyên ngắt dòng và khoảng trắng. Có một phiên bản có dấu sao của lệnh này, đầu ra của nó hơi khác.

```latex
\begin{verbatim*}
Văn bản được bao trong môi trường \texttt{verbatim}
được in trực tiếp
và tất cả các lệnh \LaTeX{} đều bị bỏ qua.
\end{verbatim*}
```

[Mở ví dụ này trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%2A%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%2A%7D%0A%5Cend%7Bdocument%7D)

Mã trên cho ra kết quả sau:

![Verbatim2.png](/files/2ce07fbace65aecefbc1b6c39e97df0aa60f2733)

Trong trường hợp này, các khoảng trắng được nhấn mạnh bằng một ký tự "khoảng trắng hiển thị" đặc biệt: **`␣`**.

Văn bản kiểu verbatim cũng có thể được dùng trong một đoạn văn bằng cách sử dụng `\verb` lệnh này.

```latex
Trong thư mục \verb|C:\Windows\system32| bạn có thể tìm thấy rất nhiều ứng dụng Windows
hệ thống.

Lệnh \verb+\ldots+ tạo ra \ldots
```

[Mở ví dụ này trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=using+the+%5Cverb+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIn+the+directory+%5Cverb%7CC%3A%5CWindows%5Csystem32%7C+you+can+find+a+lot+of+Windows+%0Asystem+applications.+%0A+%0AThe+%5Cverb%2B%5Cldots%2B+command+produces+%5Cldots%0A%5Cend%7Bdocument%7D)

Mã trên cho ra kết quả sau:

![Verbatim3OLV2.png](/files/2b5be870847148d5626fede315b6fe9e08bd40f3)

Lệnh `\verb|C:\Windows\system32|` in phần văn bản bên trong các dấu phân cách `|` ở định dạng verbatim. Bất kỳ ký tự nào, ngoại trừ chữ cái và `*`, đều có thể dùng làm dấu phân cách. Ví dụ `\verb+\ldots+` sử dụng `+` làm dấu phân cách.

## Sử dụng listings để tô sáng mã

Để sử dụng `lstlisting` môi trường, bạn phải thêm dòng sau vào phần đầu của tài liệu:

```latex
\usepackage{listings}
```

Dưới đây là ví dụ sử dụng `lstlisting` môi trường từ `listings` gói:

```latex
\begin{lstlisting}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #để trở thành ma trận liên thuộc
    VT = np.zeros((n*m,1), int)  #biến giả

    #tính ma trận XOR theo từng bit
    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{lstlisting}
```

[Mở `listings` ví dụ trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Mã trên cho ra kết quả sau:

![CodeListingEx1.png](/files/fa46ea72fd5634e9c71c3965ea155c13f3ba55dc)

Trong ví dụ này, đầu ra bỏ qua tất cả các lệnh LaTeX và văn bản được in ra với việc giữ nguyên mọi ngắt dòng và khoảng trắng đã gõ. Hãy xem một ví dụ thứ hai:

```latex
\begin{lstlisting}[language=Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #để trở thành ma trận liên thuộc
    VT = np.zeros((n*m,1), int)  #biến giả

    #tính ma trận XOR theo từng bit
    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{lstlisting}
```

[Mở `listings` ví dụ trên Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Python+listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%5Blanguage%3DPython%5D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

Mã trên cho ra kết quả sau:

![CodeListingEx2.png](/files/3856824b1f20c5e37418f5e3114fa9159fc0571b)

Tham số bổ sung trong dấu ngoặc `[language=Python]` cho phép tô sáng mã cho ngôn ngữ lập trình cụ thể này (Python), các từ đặc biệt được in đậm và chú thích được in nghiêng. Xem [hướng dẫn tham khảo](#reference-guide) để biết danh sách đầy đủ các ngôn ngữ lập trình được hỗ trợ.

## Nhập mã từ một tệp

Mã thường được lưu trong một tệp nguồn, vì vậy một lệnh tự động lấy mã từ tệp trở nên rất tiện lợi.

```latex
Đoạn mã tiếp theo sẽ được nhập trực tiếp từ một tệp

\lstinputlisting[language=Octave]{BitXorMatrix.m}
```

![CodeListingEx3.png](/files/52b5a2fda8567ffd3941ebb14cb8cc8894b99ae7)

Lệnh `\lstinputlisting[language=Octave]{BitXorMatrix.m}` nhập mã từ tệp *BitXorMatrix.m*, tham số bổ sung trong dấu ngoặc cho phép tô sáng ngôn ngữ cho ngôn ngữ lập trình Octave. Nếu bạn cần nhập chỉ một phần của tệp, bạn có thể chỉ định hai tham số được phân tách bằng dấu phẩy trong dấu ngoặc. Ví dụ, để nhập mã từ dòng 2 đến dòng 12, lệnh trước trở thành

```latex
\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}
```

Nếu `firstline` hoặc `lastline` nếu bị lược bỏ, thì được hiểu là các giá trị tương ứng là đầu tệp hoặc cuối tệp.

## Kiểu mã và màu sắc

Định dạng mã với **listing** gói có thể tùy biến rất cao. Hãy xem một ví dụ

```latex
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
Đoạn mã tiếp theo sẽ được nhập trực tiếp từ một tệp

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}
```

Mã trên cho ra kết quả sau:

![CodeListingEx4.png](/files/4969e1fb251475053c85f20ed6f4bce353705477)

Như bạn thấy, việc tô màu và tạo kiểu cho mã cải thiện đáng kể khả năng đọc.

Trong ví dụ này, gói **xcolor** được nhập và sau đó lệnh `\definecolor{}{}{}` được dùng để định nghĩa các màu mới ở định dạng rgb sẽ được dùng sau này. Để biết thêm thông tin, xem: [sử dụng màu trong LaTeX](/latex/vi/dinh-dang/13-using-colors-in-latex.md)

Về cơ bản có hai lệnh tạo kiểu cho ví dụ này:

**\lstdefinestyle{mystyle}{...}**

Định nghĩa một kiểu liệt kê mã mới có tên "mystyle". Bên trong cặp ngoặc thứ hai, các tùy chọn định nghĩa kiểu này được truyền vào; xem hướng dẫn tham khảo để có mô tả đầy đủ về các tham số này và một số tham số khác.

**\lstset{style=mystyle}**

Bật kiểu "mystyle". Lệnh này có thể được dùng trong tài liệu của bạn để chuyển sang một kiểu khác nếu cần.

## Chú thích và danh sách Listings

Cũng giống như trong các float ([bảng](/latex/vi/hinh-va-bang/01-tables.md) và [hình](/latex/vi/chu-de-khac/27-inserting-images.md)), chú thích có thể được thêm vào một listing để trình bày rõ ràng hơn.

```latex
\begin{lstlisting}[language=Python, caption=Python example]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #để trở thành ma trận liên thuộc
    VT = np.zeros((n*m,1), int)  #biến giả

    #tính ma trận XOR theo từng bit
    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{lstlisting}
```

[Mở `listings` ví dụ trên Overleaf](/latex/vi/dinh-dang/11-code-listing.md)

Mã trên cho ra kết quả sau:

![CodeListingEx5.png](/files/10122121cb41b0cb1b5bce368c4e2e0383631b75)

Thêm tham số được phân tách bằng dấu phẩy `caption=Ví dụ Python` bên trong dấu ngoặc sẽ bật chú thích. Chú thích này sau đó có thể được dùng trong danh sách Listings.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/106e3600ed8f2c3ebafef26fe6b26f1624b175ea)

## Dự án mẫu trên Overleaf

Mở liên kết này để [thử `listings` ví dụ gói trên Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Hướng dẫn tham khảo

### Các ngôn ngữ được hỗ trợ

**các ngôn ngữ được hỗ trợ (và các phương ngữ của chúng nếu có thể, phương ngữ được chỉ định trong ngoặc và phương ngữ mặc định được in nghiêng):**

|                                                        |                                                  |
| ------------------------------------------------------ | ------------------------------------------------ |
| ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, *R/3 6.10*) | ACSL                                             |
| Ada (*2005*, 83, 95)                                   | Algol (60, *68*)                                 |
| Ant                                                    | Assembler (Motorola68k, x86masm)                 |
| Awk (*gnu*, POSIX)                                     | bash                                             |
| Basic (Visual)                                         | C (*ANSI*, Handel, Objective, Sharp)             |
| C++ (ANSI, GNU, *ISO*, Visual)                         | Caml (*light*, Objective)                        |
| CIL                                                    | Clean                                            |
| Cobol (1974, *1985*, ibm)                              | Comal 80                                         |
| command.com (*WinXP*)                                  | Comsol                                           |
| csh                                                    | Delphi                                           |
| Eiffel                                                 | Elan                                             |
| erlang                                                 | Euphoria                                         |
| Fortran (77, 90, *95*)                                 | GCL                                              |
| Gnuplot                                                | Haskell                                          |
| HTML                                                   | IDL (empty, CORBA)                               |
| inform                                                 | Java (empty, AspectJ)                            |
| JVMIS                                                  | ksh                                              |
| Lingo                                                  | Lisp (empty, Auto)                               |
| Logo                                                   | make (empty, gnu)                                |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                           |
| Mercury                                                | MetaPost                                         |
| Miranda                                                | Mizar                                            |
| ML                                                     | Modula-2                                         |
| MuPAD                                                  | NASTRAN                                          |
| Oberon-2                                               | OCL (decorative, *OMG*)                          |
| Octave                                                 | Oz                                               |
| Pascal (Borland6, *Tiêu chuẩn*, XSC)                   | Perl                                             |
| PHP                                                    | PL/I                                             |
| Plasm                                                  | PostScript                                       |
| POV                                                    | Prolog                                           |
| Promela                                                | PSTricks                                         |
| Python                                                 | R                                                |
| Reduce                                                 | Rexx                                             |
| RSL                                                    | Ruby                                             |
| S (empty, PLUS)                                        | SAS                                              |
| Scilab                                                 | sh                                               |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                     |
| SPARQL                                                 | SQL                                              |
| tcl (empty, tk)                                        | TeX (AlLaTeX, common, LaTeX, *plain*, primitive) |
| VBScript                                               | Verilog                                          |
| VHDL (empty, AMS)                                      | VRML (*97*)                                      |
| XML                                                    | XSLT                                             |

### Các tùy chọn để tùy chỉnh kiểu liệt kê mã

* **backgroundcolor** - màu cho nền. Cần gói color bên ngoài. ***color*** hoặc ***xcolor*** gói.
* **commentstyle** - kiểu của chú thích trong ngôn ngữ nguồn.
* **basicstyle** - cỡ/chủng phông chữ, v.v. cho mã nguồn (ví dụ `basicstyle=\ttfamily\small`)
* **keywordstyle** - kiểu của từ khóa trong ngôn ngữ nguồn (ví dụ `keywordstyle=\color{red}`)
* **numberstyle** - kiểu dùng cho số dòng
* **numbersep** - khoảng cách từ số dòng đến mã
* **stringstyle** - kiểu của chuỗi trong ngôn ngữ nguồn
* **showspaces** - nhấn mạnh khoảng trắng trong mã (true/false)
* **showstringspaces** - nhấn mạnh khoảng trắng trong chuỗi (true/false)
* **showtabs** - nhấn mạnh các tab trong mã (true/false)
* **số dòng** - vị trí của số dòng (left/right/none, tức là không có số dòng)
* **prebreak** - ký hiệu hiển thị ở cuối dòng bị ngắt (ví dụ `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - vị trí của chú thích (t/b)
* **khung** - hiển thị khung ngoài mã (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - đặt xem việc ngắt tự động chỉ xảy ra tại khoảng trắng hay không
* **breaklines** - tự động ngắt dòng
* **keepspaces** - giữ khoảng trắng trong mã, hữu ích cho thụt lề
* **tabsize** - kích thước tab mặc định
* **escapeinside** - chỉ định các ký tự để thoát từ mã nguồn sang LaTeX (ví dụ `escapeinside={\%*}{*)}`)
* **rulecolor** - Chỉ định màu của khung

## Đọc thêm

Để biết thêm thông tin, xem:

* [Tô sáng mã với minted](/latex/vi/dinh-dang/12-code-highlighting-with-minted.md)
* [Sử dụng màu trong LaTeX](/latex/vi/dinh-dang/13-using-colors-in-latex.md)
* [Mục lục](/latex/vi/cau-truc-tai-lieu/02-table-of-contents.md)
* [Quản lý trong một dự án lớn](/latex/vi/cau-truc-tai-lieu/07-management-in-a-large-project.md)
* [Các dự án LaTeX nhiều tệp](/latex/vi/cau-truc-tai-lieu/08-multi-file-latex-projects.md)
* [Kích thước phông chữ, họ phông và kiểu chữ](/latex/vi/phong-chu/01-font-sizes-families-and-styles.md)
* [Kiểu chữ](/latex/vi/phong-chu/02-font-typefaces.md)
* [**listings** tài liệu gói](https://texdoc.org/serve/listings/0)
* [**listings** trang web CTAN](http://www.ctan.org/pkg/listings)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/vi/dinh-dang/11-code-listing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
