> 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/cs/formatovani/11-code-listing.md).

# Výpis kódu

## Úvod

LaTeX je ve vědě široce používán a programování se stalo důležitým aspektem v několika oblastech vědy, proto je potřeba nástroj, který správně zobrazuje kód. Tento článek vysvětluje, jak používat standardní **verbatim** prostředí i balíček **listings**, které poskytují pokročilejší funkce formátování kódu. [Tento samostatný článek](/latex/cs/formatovani/12-code-highlighting-with-minted.md) pojednává o `minted` balíčku, který provádí zvýrazňování syntaxe pomocí Pythonova `pygmentize` knihovny.

## Prostředí verbatim

Výchozím nástrojem pro zobrazení kódu v LaTeXu je `verbatim`, které generuje výstup v neproporcionálním písmu.

```latex
\begin{verbatim}
Text uzavřený uvnitř prostředí \texttt{verbatim}
se vypisuje přímo
a všechny příkazy \LaTeX{} jsou ignorovány.
\end{verbatim}
```

[Otevřít tento příklad v Overleafu](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)

Výše uvedený kód vytváří následující výstup:

![Verbatim1.png](/files/47032ad7f90e8cb8d8a87c205917e5ce8ac947e3)

Stejně jako v příkladu v úvodu se všechen text vypisuje se zachováním zalomení řádků a bílých znaků. Tento příkaz má hvězdičkovou verzi, jejíž výstup je trochu odlišný.

```latex
\begin{verbatim*}
Text uzavřený uvnitř prostředí \texttt{verbatim}
se vypisuje přímo
a všechny příkazy \LaTeX{} jsou ignorovány.
\end{verbatim*}
```

[Otevřít tento příklad v Overleafu](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)

Výše uvedený kód vytváří následující výstup:

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

V tomto případě jsou mezery zvýrazněny speciálním znakem „viditelná mezera“: **`␣`**.

Text ve stylu verbatim lze také použít v odstavci pomocí `\verb` příkaz.

```latex
V adresáři \verb|C:\Windows\system32| můžete najít mnoho Windows
systémových aplikací.

Příkaz \verb+\ldots+ vytváří \ldots
```

[Otevřít tento příklad v Overleafu](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)

Výše uvedený kód vytváří následující výstup:

![Verbatim3OLV2.png](/files/c9506b7043e4152f054b66fb65792df8df850a73)

Příkaz `\verb|C:\Windows\system32|` vypíše text uvnitř ohraničujících znaků `|` ve formátu verbatim. Jako ohraničující znak lze použít libovolný znak kromě písmen a `*`, například `\verb+\ldots+` používá `+` jako ohraničující znak.

## Zvýrazňování kódu pomocí listings

Chcete-li použít `lstlisting` prostředí, musíte do preambule dokumentu přidat následující řádek:

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

Zde je příklad použití `lstlisting` prostředí z `listings` balíček:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # má se stát incidenční maticí
    VT = np.zeros((n*m,1), int)  # pomocná proměnná

    # vypočítejte matici bitového XOR
    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}
```

[Otevřete tento `listings` ukázky na Overleafu](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)

Výše uvedený kód vytváří následující výstup:

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

V tomto příkladu výstup ignoruje všechny příkazy LaTeXu a text se vypisuje se zachováním všech zadaných zalomení řádků a bílých znaků. Podívejme se na druhý příklad:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # má se stát incidenční maticí
    VT = np.zeros((n*m,1), int)  # pomocná proměnná

    # vypočítejte matici bitového XOR
    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}
```

[Otevřete tento `listings` ukázky na Overleafu](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)

Výše uvedený kód vytváří následující výstup:

![CodeListingEx2.png](/files/536712efdb5a887ad824841582a41308830ed8fc)

Dodatečný parametr v hranatých závorkách `[language=Python]` povoluje zvýraznění kódu pro tento konkrétní programovací jazyk (Python), speciální slova jsou tučná a komentáře jsou kurzívou. Viz [referenční příručku](#reference-guide) úplný seznam podporovaných programovacích jazyků.

## Import kódu ze souboru

Kód je obvykle uložen ve zdrojovém souboru, proto je příkaz, který kód automaticky načte ze souboru, velmi užitečný.

```latex
Následující kód bude přímo importován ze souboru

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

![CodeListingEx3.png](/files/dd761b9466580b448284432d299000f665101b17)

Příkaz `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importuje kód ze souboru *BitXorMatrix.m*, dodatečný parametr mezi hranatými závorkami povoluje zvýraznění jazyka pro programovací jazyk Octave. Pokud potřebujete importovat jen část souboru, můžete v hranatých závorkách zadat dva parametry oddělené čárkou. Například pro import kódu z řádku 2 do řádku 12 se předchozí příkaz změní na

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

Pokud `firstline` nebo `lastline` pokud je vynechán, předpokládá se, že hodnoty odpovídají začátku souboru, případně jeho konci.

## Styly a barvy kódu

Formátování kódu pomocí **balíčku** je velmi přizpůsobitelné. Podívejme se na příklad

```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}
Následující kód bude přímo importován ze souboru

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

Výše uvedený kód vytváří následující výstup:

![CodeListingEx4.png](/files/f62b692ed41915419dbd1f5602dddc94313b33fb)

Jak vidíte, barevné zvýraznění a stylování kódu výrazně zlepšují čitelnost.

V tomto příkladu je balíček **xcolor** importován a poté je použit příkaz `\definecolor{}{}{}` k definici nových barev ve formátu rgb, které budou později použity. Další informace viz: [používání barev v LaTeXu](/latex/cs/formatovani/13-using-colors-in-latex.md)

V zásadě existují dva příkazy, které pro tento příklad generují styl:

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

Definuje nový styl výpisu kódu nazvaný „mystyle“. Uvnitř druhé dvojice složených závorek jsou předány možnosti, které tento styl definují; úplný popis těchto i některých dalších parametrů viz referenční příručka.

**\lstset{style=mystyle}**

Aktivuje styl „mystyle“. Tento příkaz lze v dokumentu použít k přepnutí na jiný styl, pokud je to potřeba.

## Popisky a seznam výpisů

Stejně jako u plovoucích objektů ([tabulky](/latex/cs/obrazky-a-tabulky/01-tables.md) a [obrázky](/latex/cs/dalsi-temata/27-inserting-images.md)), lze k výpisu přidat popisek pro přehlednější prezentaci.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None # má se stát incidenční maticí
    VT = np.zeros((n*m,1), int)  # pomocná proměnná

    # vypočítejte matici bitového XOR
    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}
```

[Otevřete tento `listings` ukázky na Overleafu](/latex/cs/formatovani/11-code-listing.md)

Výše uvedený kód vytváří následující výstup:

![CodeListingEx5.png](/files/098113aec517dfd1135cbf6e81aaf79c9aab4022)

Přidáním parametru odděleného čárkou `caption=Python example` uvnitř hranatých závorek se povolí popisek. Tento popisek lze později použít v seznamu výpisů.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/8876cc650e1e147b619c25c2e2851abc64bc20be)

## Ukázkový projekt na Overleafu

Otevřete tento odkaz a [vyzkoušejte `listings` ukázku balíčku na Overleafu.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Referenční příručka

### Podporované jazyky

**podporované jazyky (a případně jejich dialekty; dialekty jsou uvedeny v závorkách a výchozí dialekty jsou kurzívou):**

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

### Možnosti pro přizpůsobení stylů výpisu kódu

* **backgroundcolor** - barva pozadí. Je potřeba externí balíček ***color*** nebo ***xcolor***  .
* **commentstyle** - styl komentářů ve zdrojovém jazyce.
* **basicstyle** - velikost písma/písmo apod. pro zdroj (např. `basicstyle=\ttfamily\small`)
* **keywordstyle** - styl klíčových slov ve zdrojovém jazyce (např. `keywordstyle=\color{red}`)
* **numberstyle** - styl použitý pro čísla řádků
* **numbersep** - vzdálenost čísel řádků od kódu
* **stringstyle** - styl řetězců ve zdrojovém jazyce
* **showspaces** - zvýraznění mezer v kódu (true/false)
* **showstringspaces** - zvýraznění mezer v řetězcích (true/false)
* **showtabs** - zvýraznění tabelátorů v kódu (true/false)
* **číslování** - pozice čísel řádků (left/right/none, tj. bez čísel řádků)
* **prebreak** - značka zobrazená na konci zalomeného řádku (např. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - pozice popisku (t/b)
* **rámec** - zobrazení rámečku kolem kódu (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - určuje, zda se automatické zalomení má dít pouze na mezerách
* **breaklines** - automatické zalamování řádků
* **keepspaces** - zachovat mezery v kódu, užitečné pro odsazení
* **tabsize** - výchozí velikost tabulátoru
* **escapeinside** - specifikovat znaky, které se mají v kódu escapovat do LaTeXu (např. `escapeinside={\%*}{*)}`)
* **rulecolor** - specifikujte barvu rámečku

## Další čtení

Více informací viz:

* [Zvýrazňování kódu pomocí minted](/latex/cs/formatovani/12-code-highlighting-with-minted.md)
* [Používání barev v LaTeXu](/latex/cs/formatovani/13-using-colors-in-latex.md)
* [Obsah](/latex/cs/struktura-dokumentu/02-table-of-contents.md)
* [Správa ve velkém projektu](/latex/cs/struktura-dokumentu/07-management-in-a-large-project.md)
* [Vícesouborové projekty LaTeXu](/latex/cs/struktura-dokumentu/08-multi-file-latex-projects.md)
* [Velikosti, rodiny a styly písma](/latex/cs/pisma/01-font-sizes-families-and-styles.md)
* [Řezy písma](/latex/cs/pisma/02-font-typefaces.md)
* [**listings** dokumentace balíčku](https://texdoc.org/serve/listings/0)
* [**listings** 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/cs/formatovani/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.
