> 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/pl/formatowanie/11-code-listing.md).

# Listing kodu

## Wstęp

LaTeX jest powszechnie używany w nauce, a programowanie stało się ważnym aspektem w kilku dziedzinach nauki, stąd potrzeba narzędzia, które poprawnie wyświetla kod. Ten artykuł wyjaśnia, jak używać standardowego **verbatim** środowiska, a także pakietu **listings**, które zapewniają bardziej zaawansowane funkcje formatowania kodu. [Ten osobny artykuł](/latex/pl/formatowanie/12-code-highlighting-with-minted.md) omawia `minted` pakiet, który wykonuje podświetlanie składni za pomocą pakietu Pythona `pygmentize` biblioteki.

## Środowisko verbatim

Domyślnym narzędziem do wyświetlania kodu w LaTeX jest `verbatim`, które generuje wynik czcionką o stałej szerokości.

```latex
\begin{verbatim}
Tekst ujęty w środowisku \texttt{verbatim}
jest wypisywany bezpośrednio
a wszystkie polecenia \LaTeX{} są ignorowane.
\end{verbatim}
```

[Otwórz ten przykład w 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)

Powyższy kod daje następujący wynik:

![Verbatim1.png](/files/08aa1e7cbf51772bac598ce1191b8c9ff6d85896)

Tak jak w przykładzie we wprowadzeniu, cały tekst jest wypisywany z zachowaniem podziałów wierszy i białych znaków. Istnieje wersja tego polecenia z gwiazdką, której wynik jest nieco inny.

```latex
\begin{verbatim*}
Tekst ujęty w środowisku \texttt{verbatim}
jest wypisywany bezpośrednio
a wszystkie polecenia \LaTeX{} są ignorowane.
\end{verbatim*}
```

[Otwórz ten przykład w 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)

Powyższy kod daje następujący wynik:

![Verbatim2.png](/files/5ab92a381af5485c79c2d0d67484b271e920e152)

W tym przypadku spacje są wyróżniane specjalnym znakiem „widocznej spacji”: **`␣`**.

Tekst podobny do verbatim może być również używany w akapicie za pomocą `\verb` polecenie.

```latex
W katalogu \verb|C:\Windows\system32| można znaleźć wiele aplikacji
systemowych.

Polecenie \verb+\ldots+ generuje \ldots
```

[Otwórz ten przykład w 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)

Powyższy kod daje następujący wynik:

![Verbatim3OLV2.png](/files/94524312a8528caccd91a18ad4ac00625e65bd82)

Polecenie `\verb|C:\Windows\system32|` wypisuje tekst znajdujący się między ogranicznikami `|` w formacie verbatim. Każdy znak, z wyjątkiem liter i `*`, może być użyty jako ogranicznik. Na przykład `\verb+\ldots+` używa `+` jako ogranicznika.

## Wykorzystanie listings do wyróżniania kodu

Aby użyć `lstlisting` środowiska, należy dodać do preambuły dokumentu następującą linię:

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

Oto przykład użycia `lstlisting` środowiska z `listings` pakiet:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ma stać się macierzą incydencji
    VT = np.zeros((n*m,1), int)  #zmienna pomocnicza

    #oblicz macierz bitowego 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}
```

[Otwórz ten `listings` przykładu na 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)

Powyższy kod daje następujący wynik:

![CodeListingEx1.png](/files/60817dd675a1e097e14a5b095f99c63c07d53e49)

W tym przykładzie wynik ignoruje wszystkie polecenia LaTeX, a tekst jest wypisywany z zachowaniem wszystkich wpisanych podziałów wierszy i białych znaków. Zobaczmy drugi przykład:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ma stać się macierzą incydencji
    VT = np.zeros((n*m,1), int)  #zmienna pomocnicza

    #oblicz macierz bitowego 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}
```

[Otwórz ten `listings` przykładu na 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)

Powyższy kod daje następujący wynik:

![CodeListingEx2.png](/files/64f3475c3b4ed49746e0fb90d99b7c5d58f6f1ce)

Dodatkowy parametr w nawiasach `[language=Python]` włącza podświetlanie kodu dla tego konkretnego języka programowania (Python), słowa specjalne są zapisane pogrubioną czcionką, a komentarze kursywą. Zobacz [przewodnik referencyjny](#reference-guide) pełną listę obsługiwanych języków programowania.

## Importowanie kodu z pliku

Kod jest zwykle przechowywany w pliku źródłowym, dlatego polecenie, które automatycznie pobiera kod z pliku, okazuje się bardzo przydatne.

```latex
Następny kod zostanie bezpośrednio zaimportowany z pliku

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

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

Polecenie `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importuje kod z pliku *BitXorMatrix.m*, dodatkowy parametr umieszczony w nawiasach włącza podświetlanie języka dla języka programowania Octave. Jeśli musisz zaimportować tylko część pliku, możesz podać dwa parametry oddzielone przecinkami w nawiasach. Na przykład, aby zaimportować kod od linii 2 do linii 12, poprzednie polecenie przyjmuje postać

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

Jeśli `firstline` lub `lastline` jest pominięty, przyjmuje się odpowiednio, że wartości odnoszą się do początku pliku albo jego końca.

## Style kodu i kolory

Formatowanie kodu za pomocą **listing** pakietu jest bardzo konfigurowalne. Zobaczmy przykład

```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}
Następny kod zostanie bezpośrednio zaimportowany z pliku

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

Powyższy kod daje następujący wynik:

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

Jak widać, kolorowanie i stylowanie kodu znacznie poprawiają czytelność.

W tym przykładzie pakiet **xcolor** jest importowany, a następnie polecenie `\definecolor{}{}{}` jest używane do definiowania nowych kolorów w formacie rgb, które będą później używane. Więcej informacji znajdziesz w: [używanie kolorów w LaTeX](/latex/pl/formatowanie/13-using-colors-in-latex.md)

Zasadniczo istnieją dwa polecenia, które generują styl dla tego przykładu:

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

Definiuje nowy styl listingu kodu o nazwie „mystyle”. W drugim nawiasie klamrowym przekazywane są opcje definiujące ten styl; pełny opis tych i niektórych innych parametrów znajduje się w przewodniku referencyjnym.

**\lstset{style=mystyle}**

Włącza styl „mystyle”. Polecenia tego można użyć w dokumencie, aby w razie potrzeby przełączyć się na inny styl.

## Podpisy i lista listingów

Tak jak w elementach pływających ([tabele](/latex/pl/rysunki-i-tabele/01-tables.md) i [rysunki](/latex/pl/wiecej-tematow/27-inserting-images.md)), do listingu można dodać podpis dla bardziej przejrzystej prezentacji.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ma stać się macierzą incydencji
    VT = np.zeros((n*m,1), int)  #zmienna pomocnicza

    #oblicz macierz bitowego 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}
```

[Otwórz ten `listings` przykładu na Overleaf](/latex/pl/formatowanie/11-code-listing.md)

Powyższy kod daje następujący wynik:

![CodeListingEx5.png](/files/3fe2527287d4cf146e82680f39fc1e0cd7d5918a)

Dodanie parametru oddzielonego przecinkiem `caption=Python example` w nawiasach włącza podpis. Ten podpis może być później użyty w liście listingów.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/cb2bb5a56d9022935993f22028a3e009ef4f70b5)

## Przykładowy projekt Overleaf

Otwórz ten link, aby [wypróbować `listings` przykład pakietu na Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Przewodnik referencyjny

### Obsługiwane języki

**obsługiwane języki (oraz, jeśli to możliwe, ich dialekty; dialekty są podane w nawiasach, a domyślne dialekty są zapisane kursywą):**

|                                                        |                                                        |
| ------------------------------------------------------ | ------------------------------------------------------ |
| 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 (pusty, CORBA)                                     |
| inform                                                 | Java (pusty, AspectJ)                                  |
| JVMIS                                                  | ksh                                                    |
| Lingo                                                  | Lisp (pusty, Auto)                                     |
| Logo                                                   | make (pusty, gnu)                                      |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                                 |
| Mercury                                                | MetaPost                                               |
| Miranda                                                | Mizar                                                  |
| ML                                                     | Modula-2                                               |
| MuPAD                                                  | NASTRAN                                                |
| Oberon-2                                               | OCL (ozdobny, *OMG*)                                   |
| Octave                                                 | Oz                                                     |
| Pascal (Borland6, *Standardowy*, XSC)                  | Perl                                                   |
| PHP                                                    | PL/I                                                   |
| Plasm                                                  | PostScript                                             |
| POV                                                    | Prolog                                                 |
| Promela                                                | PSTricks                                               |
| Python                                                 | R                                                      |
| Reduce                                                 | Rexx                                                   |
| RSL                                                    | Ruby                                                   |
| S (pusty, PLUS)                                        | SAS                                                    |
| Scilab                                                 | sh                                                     |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                           |
| SPARQL                                                 | SQL                                                    |
| tcl (pusty, tk)                                        | TeX (AlLaTeX, standardowy, LaTeX, *plain*, podstawowy) |
| VBScript                                               | Verilog                                                |
| VHDL (pusty, AMS)                                      | VRML (*97*)                                            |
| XML                                                    | XSLT                                                   |

### Opcje dostosowywania stylów listingów kodu

* **backgroundcolor** - kolor tła. Wymagany zewnętrzny ***color*** lub ***xcolor*** pakiet.
* **commentstyle** - styl komentarzy w języku źródłowym.
* **basicstyle** - rozmiar/czcionka/itp. dla kodu źródłowego (np. `basicstyle=\ttfamily\small`)
* **keywordstyle** - styl słów kluczowych w języku źródłowym (np. `keywordstyle=\color{red}`)
* **numberstyle** - styl używany dla numerów linii
* **numbersep** - odległość numerów linii od kodu
* **stringstyle** - styl napisów w języku źródłowym
* **showspaces** - wyróżnia spacje w kodzie (true/false)
* **showstringspaces** - wyróżnia spacje w napisach (true/false)
* **showtabs** - wyróżnia tabulatory w kodzie (true/false)
* **numerów** - położenie numerów linii (left/right/none, tj. brak numerów linii)
* **prebreak** - znak wyświetlany na końcu łamanej linii (np. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - położenie podpisu (t/b)
* **ramki** - wyświetlanie ramki wokół kodu (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - określa, czy automatyczne łamanie ma następować tylko w białych znakach
* **breaklines** - automatyczne łamanie wierszy
* **keepspaces** - zachowuje spacje w kodzie, przydatne do wcięć
* **tabsize** - domyślny rozmiar tabulatora
* **escapeinside** - określa znaki do ucieczki z kodu źródłowego do LaTeX (np. `escapeinside={\%*}{*)}`)
* **rulecolor** - Określ kolor ramki

## Dalsza lektura

Więcej informacji znajdziesz w:

* [Podświetlanie kodu za pomocą minted](/latex/pl/formatowanie/12-code-highlighting-with-minted.md)
* [Używanie kolorów w LaTeX](/latex/pl/formatowanie/13-using-colors-in-latex.md)
* [Spis treści](/latex/pl/struktura-dokumentu/02-table-of-contents.md)
* [Zarządzanie w dużym projekcie](/latex/pl/struktura-dokumentu/07-management-in-a-large-project.md)
* [Wieloplikowe projekty LaTeX](/latex/pl/struktura-dokumentu/08-multi-file-latex-projects.md)
* [Rozmiary czcionek, kroje i style](/latex/pl/czcionki/01-font-sizes-families-and-styles.md)
* [Kroje pisma](/latex/pl/czcionki/02-font-typefaces.md)
* [**listings** dokumentacja pakietu](https://texdoc.org/serve/listings/0)
* [**listings** strona 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/pl/formatowanie/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.
