> 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/fi/muotoilu/11-code-listing.md).

# Koodilistaukset

## Johdanto

LaTeXia käytetään laajalti tieteessä, ja ohjelmoinnista on tullut tärkeä osa useita tieteenaloja, joten tarvitaan työkalu, joka näyttää koodin oikein. Tässä artikkelissa selitetään, miten käytetään tavallista **verbatim** ympäristöä sekä pakettia **listings**, jotka tarjoavat edistyneempiä koodin muotoiluominaisuuksia. [Tässä erillisessä artikkelissa](/latex/fi/muotoilu/12-code-highlighting-with-minted.md) käsitellään `minted` pakettia, joka tekee syntaksin korostuksen Pythonin `pygmentize` kirjasto.

## verbatim-ympäristö

LaTeXin oletustyökalu koodin näyttämiseen on `verbatim`, joka tuottaa tasalevyisellä fontilla kirjoitetun tulosteen.

```latex
\begin{verbatim}
Teksti, joka on suljettu \texttt{verbatim}-ympäristön sisään
tulostetaan sellaisenaan
ja kaikki \LaTeX{}-komennot ohitetaan.
\end{verbatim}
```

[Avaa tämä esimerkki Overleafissa](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)

Yllä oleva koodi tuottaa seuraavan tulosteen:

![Verbatim1.png](/files/6febeb40318665cd2d3f0cf2efee0c693389184e)

Kuten johdantoesimerkissä, kaikki teksti tulostetaan säilyttäen rivinvaihdot ja välilyönnit. Tästä komennosta on olemassa tähdellä merkitty versio, jonka tuloste on hieman erilainen.

```latex
\begin{verbatim*}
Teksti, joka on suljettu \texttt{verbatim}-ympäristön sisään
tulostetaan sellaisenaan
ja kaikki \LaTeX{}-komennot ohitetaan.
\end{verbatim*}
```

[Avaa tämä esimerkki Overleafissa](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)

Yllä oleva koodi tuottaa seuraavan tulosteen:

![Verbatim2.png](/files/ef82934ab86b80ed9788ac8428fa88eb8e224063)

Tässä tapauksessa välilyönnit korostetaan erityisellä "näkyvä välilyönti" -merkillä: **`␣`**.

Verbatim-tyyppistä tekstiä voidaan käyttää myös kappaleessa `\verb` komento.

```latex
Hakemistossa \verb|C:\Windows\system32| voit löytää paljon Windowsin
järjestelmäsovelluksia.

Komento \verb+\ldots+ tuottaa \ldots
```

[Avaa tämä esimerkki Overleafissa](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)

Yllä oleva koodi tuottaa seuraavan tulosteen:

![Verbatim3OLV2.png](/files/6e78f6f6af43555adfd0888273bbff068fb5c833)

Komento `\verb|C:\Windows\system32|` tulostaa tekstin erotinmerkkien sisällä `|` verbatim-muodossa. Rajaajana voidaan käyttää mitä tahansa merkkiä, paitsi kirjaimia ja `*`, voidaan käyttää erotinmerkkinä. Esimerkiksi `\verb+\ldots+` käyttää `+` erotinmerkkinä.

## Koodin korostaminen listings-paketilla

Jotta voit käyttää `lstlisting` ympäristöä, sinun on lisättävä seuraava rivi asiakirjasi esipuheeseen:

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

Tässä on esimerkki `lstlisting` ympäristöstä `listings` pakettia:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #josta tulee incidenssimatriisi
    VT = np.zeros((n*m,1), int)  #apumuuttuja

    #laske bittikohtainen XOR-matriisi
    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}
```

[Avaa tämä `listings` esimerkki Overleafissa](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)

Yllä oleva koodi tuottaa seuraavan tulosteen:

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

Tässä esimerkissä tuloste ohittaa kaikki LaTeX-komennot ja teksti tulostetaan säilyttäen kaikki kirjoitetut rivinvaihdot ja välilyönnit. Katsotaanpa toinen esimerkki:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #josta tulee incidenssimatriisi
    VT = np.zeros((n*m,1), int)  #apumuuttuja

    #laske bittikohtainen XOR-matriisi
    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}
```

[Avaa tämä `listings` esimerkki Overleafissa](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)

Yllä oleva koodi tuottaa seuraavan tulosteen:

![CodeListingEx2.png](/files/bb6bb513335c108d2931a06155467a50f13c9047)

Hakasulkeissa oleva lisäparametri `[language=Python]` ottaa käyttöön koodin korostuksen tälle ohjelmointikielelle (Python), erikoissanat näytetään lihavoituina ja kommentit kursivoidaan. Katso [viiteopas](#reference-guide) tuetuista ohjelmointikielistä täydellinen luettelo.

## Koodin tuominen tiedostosta

Koodi tallennetaan yleensä lähdetiedostoon, joten komento, joka hakee koodin automaattisesti tiedostosta, on erittäin kätevä.

```latex
Seuraava koodi tuodaan suoraan tiedostosta

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

![CodeListingEx3.png](/files/1a7321a9fade6b2a367b1d199cb938f443605c69)

Komento `\lstinputlisting[language=Octave]{BitXorMatrix.m}` tuo koodin tiedostosta *BitXorMatrix.m*hakasulkeissa oleva lisäparametri ottaa käyttöön Octave-ohjelmointikielen korostuksen. Jos sinun tarvitsee tuoda vain osa tiedostosta, voit määrittää kaksi pilkulla erotettua parametria hakasulkeiden sisällä. Esimerkiksi koodin tuomiseksi riviltä 2 riville 12 edellinen komento muuttuu muotoon

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

Jos `firstline` tai `lastline` jätetään pois, oletetaan, että arvot ovat vastaavasti tiedoston alku tai tiedoston loppu.

## Koodityylit ja värit

Koodin muotoilu **listing** pakettia voi muokata erittäin paljon. Katsotaanpa esimerkki

```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}
Seuraava koodi tuodaan suoraan tiedostosta

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

Yllä oleva koodi tuottaa seuraavan tulosteen:

![CodeListingEx4.png](/files/55a0d46a9b43559f77780e49a681ea4cb5eb6293)

Kuten näet, koodin väritys ja tyyli parantavat luettavuutta huomattavasti.

Tässä esimerkissä paketti **xcolor** tuodaan ja sitten komentoa `\definecolor{}{}{}` käytetään uusien värien määrittämiseen RGB-muodossa, joita käytetään myöhemmin. Lisätietoja: [värien käyttäminen LaTeXissa](/latex/fi/muotoilu/13-using-colors-in-latex.md)

Tässä esimerkissä tyylin luovat pohjimmiltaan kaksi komentoa:

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

Määrittää uuden koodilistauksen tyylin nimeltä "mystyle". Toisiin aaltosulkeisiin annetaan tämän tyylin määrittävät valinnat; katso viiteoppaasta näiden ja joidenkin muiden parametrien täydellinen kuvaus.

**\lstset{style=mystyle}**

Ottaa tyylin "mystyle" käyttöön. Tätä komentoa voidaan käyttää asiakirjassasi siirtymiseen toiseen tyyliin tarvittaessa.

## Kuvatekstit ja listing-luettelo

Kuten kelluvissa elementeissä ([taulukot](/latex/fi/kuvat-ja-taulukot/01-tables.md) ja [kuvat](/latex/fi/lisaa-aiheita/27-inserting-images.md)), listingiin voidaan lisätä kuvateksti selkeämmän esityksen saamiseksi.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #josta tulee incidenssimatriisi
    VT = np.zeros((n*m,1), int)  #apumuuttuja

    #laske bittikohtainen XOR-matriisi
    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}
```

[Avaa tämä `listings` esimerkki Overleafissa](/latex/fi/muotoilu/11-code-listing.md)

Yllä oleva koodi tuottaa seuraavan tulosteen:

![CodeListingEx5.png](/files/37d01b8a82faa1d56444a07262a4364bea2edbe5)

Pilkulla erotetun parametrin lisääminen `caption=Python-esimerkki` hakasulkeiden sisään, ottaa kuvatekstin käyttöön. Tätä kuvatekstiä voidaan myöhemmin käyttää listing-luettelossa.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/1dceff3537048804d22dbc4bc49a9bb49803782b)

## Esimerkkiprojekti Overleafissa

Avaa tämä linkki [kokeillaksesi `listings` paketin esimerkkiä Overleafissa.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Viiteopas

### Tuetut kielet

**tuetut kielet (ja mahdollisuuksien mukaan niiden murteet; murteet ilmoitetaan hakasulkeissa ja oletusmurteet kursivoidaan):**

|                                                        |                                                  |
| ------------------------------------------------------ | ------------------------------------------------ |
| 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, *Standard*, 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                                             |

### Valinnat koodilistauksen tyylien mukauttamiseen

* **backgroundcolor** - taustan väri. Ulkoinen ***color*** tai ***xcolor*** -paketti tarvitaan.
* **commentstyle** - kommenttien tyyli lähdekielessä.
* **basicstyle** - fontin koko/perhe jne. lähdekoodille (esim. `basicstyle=\ttfamily\small`)
* **keywordstyle** - avainsanojen tyyli lähdekielessä (esim. `keywordstyle=\color{red}`)
* **numberstyle** - rivinumeroissa käytettävä tyyli
* **numbersep** - rivinumeroiden etäisyys koodista
* **stringstyle** - merkkijonojen tyyli lähdekielessä
* **showspaces** - korosta välilyöntejä koodissa (true/false)
* **showstringspaces** - korosta välilyöntejä merkkijonoissa (true/false)
* **showtabs** - korosta sarkaimia koodissa (true/false)
* **numbers** - rivinumeroiden sijainti (vasen/oikea/ei mitään, eli ei rivinumeroita)
* **prebreak** - rivin katkeamiskohdan lopussa näytettävä merkki (esim. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - kuvatekstin sijainti (t/b)
* **frame** - koodin ympärillä olevan kehyksen näyttäminen (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - määrittää, saavatko automaattiset rivinvaihdot tapahtua vain välilyönneissä
* **breaklines** - automaattinen rivin katkaisu
* **keepspaces** - säilytä välilyönnit koodissa, hyödyllinen sisennyksessä
* **tabsize** - oletustabulaattorin koko
* **escapeinside** - määritä merkit, joilla siirrytään lähdekoodista LaTeXiin (esim. `escapeinside={\%*}{*)}`)
* **rulecolor** - Määritä kehyslaatikon väri

## Lisälukemista

Lisätietoja löydät:

* [Koodin korostaminen minted-paketilla](/latex/fi/muotoilu/12-code-highlighting-with-minted.md)
* [Värien käyttäminen LaTeXissa](/latex/fi/muotoilu/13-using-colors-in-latex.md)
* [Sisällysluettelo](/latex/fi/asiakirjan-rakenne/02-table-of-contents.md)
* [Hallinta suuressa projektissa](/latex/fi/asiakirjan-rakenne/07-management-in-a-large-project.md)
* [Useita tiedostoja sisältävät LaTeX-projektit](/latex/fi/asiakirjan-rakenne/08-multi-file-latex-projects.md)
* [Kirjasinkoot, -perheet ja -tyylit](/latex/fi/fontit/01-font-sizes-families-and-styles.md)
* [Kirjasinlajit](/latex/fi/fontit/02-font-typefaces.md)
* [**listings** pakettidokumentaatio](https://texdoc.org/serve/listings/0)
* [**listings** CTAN-verkkosivusto](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/fi/muotoilu/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.
