> 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/sv/formatering/11-code-listing.md).

# Kodlistning

## Introduktion

LaTeX används flitigt inom vetenskap och programmering har blivit en viktig aspekt inom flera vetenskapsområden, vilket gör att det behövs ett verktyg som korrekt visar kod. Den här artikeln förklarar hur man använder standard **verbatim** miljön samt paketet **listings**som ger mer avancerade funktioner för kodformatering. [Denna separata artikel](/latex/sv/formatering/12-code-highlighting-with-minted.md) diskuterar `minted` paketet, som utför syntaxmarkering med Python's `pygmentize` biblioteket.

## Verbatim-miljön

Standardverktyget för att visa kod i LaTeX är `verbatim`som genererar ett resultat i monospace-teckensnitt.

```latex
\begin{verbatim}
Text som ligger inom \texttt{verbatim}-miljön
skrivs ut direkt
och alla \LaTeX{}-kommandon ignoreras.
\end{verbatim}
```

[Öppna det här exemplet i 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)

Koden ovan ger följande resultat:

![Verbatim1.png](/files/bce3d5c8e70854cc2b39c346efe20c6cae75363a)

Precis som i exemplet i inledningen skrivs all text ut med radbrytningar och blanksteg bevarade. Det finns en stjärnmärkt version av detta kommando vars utdata är lite annorlunda.

```latex
\begin{verbatim*}
Text som ligger inom \texttt{verbatim}-miljön
skrivs ut direkt
och alla \LaTeX{}-kommandon ignoreras.
\end{verbatim*}
```

[Öppna det här exemplet i 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)

Koden ovan ger följande resultat:

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

I det här fallet markeras mellanslag med ett särskilt "synligt mellanrum"-tecken: **`␣`**.

Verbatim-liknande text kan också användas i ett stycke med hjälp av `\verb` kommandot.

```latex
I katalogen \verb|C:\Windows\system32| kan du hitta många Windows
systemprogram.

\verb+\ldots+-kommandot ger \ldots
```

[Öppna det här exemplet i 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)

Koden ovan ger följande resultat:

![Verbatim3OLV2.png](/files/1ce9f5c2ace66bce794297b3bbf4ec8655296268)

Kommandot `\verb|C:\Windows\system32|` skriver ut texten inom avgränsarna `|` i verbatim-format. Alla tecken, utom bokstäver och `*`, kan användas som avgränsare. Till exempel `\verb+\ldots+` använder `+` som avgränsare.

## Använda listings för att markera kod

För att använda `lstlisting` listings-miljön måste du lägga till följande rad i förordet till ditt dokument:

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

Här är ett exempel på att använda `lstlisting` miljön från `listings` paketet:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ska bli incidensmatrisen
    VT = np.zeros((n*m,1), int)  #hjälpvariabel

    #beräkna den bitvisa xor-matrisen
    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}
```

[Öppna detta `listings` exemplet på 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)

Koden ovan ger följande resultat:

![CodeListingEx1.png](/files/7eaab072bd677cc28259e9248295c698630f138b)

I det här exemplet ignorerar utdata alla LaTeX-kommandon och texten skrivs ut med alla radbrytningar och blanksteg som har skrivits in bevarade. Låt oss se ett andra exempel:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ska bli incidensmatrisen
    VT = np.zeros((n*m,1), int)  #hjälpvariabel

    #beräkna den bitvisa xor-matrisen
    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}
```

[Öppna detta `listings` exemplet på 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)

Koden ovan ger följande resultat:

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

Den extra parametern inom hakparenteserna `[language=Python]` aktiverar kodmarkering för just detta programmeringsspråk (Python), specialord visas i fet stil och kommentarer kursiveras. Se [referensguiden](#reference-guide) för en fullständig lista över stödda programmeringsspråk.

## Importera kod från en fil

Kod lagras vanligtvis i en källfil, därför blir ett kommando som automatiskt hämtar kod från en fil mycket användbart.

```latex
Följande kod kommer att importeras direkt från en fil

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

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

Kommandot `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importerar koden från filen *BitXorMatrix.m*, den extra parametern inom hakparenteserna aktiverar språkmarkering för programmeringsspråket Octave. Om du bara behöver importera en del av filen kan du ange två kommaseparerade parametrar inom hakparenteserna. Om du till exempel vill importera koden från rad 2 till rad 12 blir det tidigare kommandot

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

Om `firstline` eller `lastline` utelämnas antas värdena vara början av filen respektive slutet av filen.

## Kodstilar och färger

Kodformatering med **listings** paketet är mycket anpassningsbart. Låt oss se ett exempel

```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}
Följande kod kommer att importeras direkt från en fil

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

Koden ovan ger följande resultat:

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

Som du ser förbättrar kodfärgningen och formateringen läsbarheten avsevärt.

I det här exemplet importeras paketet **xcolor** och sedan kommandot `\definecolor{}{}{}` används för att definiera nya färger i rgb-format som senare kommer att användas. För mer information, se: [använda färger i LaTeX](/latex/sv/formatering/13-using-colors-in-latex.md)

Det finns i huvudsak två kommandon som genererar stilen för detta exempel:

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

Definierar en ny kodlistningsstil som kallas "mystyle". Inuti den andra klammerparentesparet skickas de alternativ som definierar denna stil; se referensguiden för en fullständig beskrivning av dessa och några andra parametrar.

**\lstset{style=mystyle}**

Aktiverar stilen "mystyle". Detta kommando kan användas i ditt dokument för att växla till en annan stil vid behov.

## Bildtexter och listan över listningar

Precis som i flytande objekt ([tabeller](/latex/sv/figurer-och-tabeller/01-tables.md) och [figurer](/latex/sv/fler-amnen/27-inserting-images.md)), bildtexter kan läggas till i en listning för en tydligare presentation.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #ska bli incidensmatrisen
    VT = np.zeros((n*m,1), int)  #hjälpvariabel

    #beräkna den bitvisa xor-matrisen
    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}
```

[Öppna detta `listings` exemplet på Overleaf](/latex/sv/formatering/11-code-listing.md)

Koden ovan ger följande resultat:

![CodeListingEx5.png](/files/6082f86e9d9418a7829413d4edb52a792e141418)

Genom att lägga till den kommaseparerade parametern `caption=Python example` inom hakparenteserna aktiveras bildtexten. Denna bildtext kan senare användas i listan över listningar.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/276efa37aad3ddf22dfe643660dbcc7cb5ce4117)

## Exempelprojekt på Overleaf

Öppna denna länk för att [prova `listings` paketexemplet på Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Referensguide

### Stödda språk

**stödda språk (och deras dialekter om möjligt; dialekter anges inom hakparenteser och standarddialekter är kursiverade):**

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

### Alternativ för att anpassa stilar för kodlistningar

* **backgroundcolor** - färg för bakgrunden. Externt ***color*** eller ***xcolor*** paket behövs.
* **commentstyle** - stil för kommentarer i källspråket.
* **basicstyle** - teckenstorlek/-familj osv. för källkoden (t.ex. `basicstyle=\ttfamily\small`)
* **keywordstyle** - stil för nyckelord i källspråket (t.ex. `keywordstyle=\color{red}`)
* **numberstyle** - stil som används för radnummer
* **numbersep** - avståndet mellan radnumren och koden
* **stringstyle** - stil för strängar i källspråket
* **showspaces** - markera mellanslag i koden (true/false)
* **showstringspaces** - markera mellanslag i strängar (true/false)
* **showtabs** - markera tabulatorer i koden (true/false)
* **radnummer** - position för radnummer (vänster/höger/ingen, dvs. inga radnummer)
* **prebreak** - visar ett märke vid slutet av en radbrytning (t.ex. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - position för bildtexten (t/b)
* **ram** - visar ram runt koden (ingen/vänsterlinje/övre linje/nedre linje/linjer/enkel/skuggbox)
* **breakatwhitespace** - anger om automatiska brytningar endast ska ske vid mellanrum
* **breaklines** - automatisk radbrytning
* **keepspaces** - behåll mellanslag i koden, användbart för indrag
* **tabsize** - standardtabbstorlek
* **escapeinside** - ange tecken för att växla från källkod till LaTeX (t.ex. `escapeinside={\%*}{*)}`)
* **rulecolor** - ange färgen på ramrutan

## Vidare läsning

För mer information, se:

* [Kodsyntaxmarkering med minted](/latex/sv/formatering/12-code-highlighting-with-minted.md)
* [Använda färger i LaTeX](/latex/sv/formatering/13-using-colors-in-latex.md)
* [Innehåll](/latex/sv/dokumentstruktur/02-table-of-contents.md)
* [Hantering i ett stort projekt](/latex/sv/dokumentstruktur/07-management-in-a-large-project.md)
* [LaTeX-projekt med flera filer](/latex/sv/dokumentstruktur/08-multi-file-latex-projects.md)
* [Teckenstorlekar, typsnittsfamiljer och stilar](/latex/sv/typsnitt/01-font-sizes-families-and-styles.md)
* [Typsnitt](/latex/sv/typsnitt/02-font-typefaces.md)
* [**listings** paketdokumentation](https://texdoc.org/serve/listings/0)
* [**listings** CTAN-webbplatsen](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/sv/formatering/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.
