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

# Kodeudlisting

## Introduktion

LaTeX bruges i vid udstrækning i videnskab, og programmering er blevet et vigtigt aspekt inden for flere områder af videnskaben, derfor behovet for et værktøj, der viser kode korrekt. Denne artikel forklarer, hvordan man bruger standard **verbatim** miljøet samt pakken **listings**, som giver mere avancerede kodeformateringsfunktioner. [Denne separate artikel](/latex/da/formatering/12-code-highlighting-with-minted.md) diskuterer `minted` pakken, som udfører syntaksfremhævning ved hjælp af Pythons `pygmentize` biblioteket.

## Verbatim-miljøet

Standardværktøjet til at vise kode i LaTeX er `verbatim`, som genererer et output i skrifttype med fast bredde.

```latex
\begin{verbatim}
Tekst omsluttet af \texttt{verbatim}-miljøet
udskrives direkte
og alle \LaTeX{}-kommandoer ignoreres.
\end{verbatim}
```

[Åbn dette eksempel 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 ovenfor producerer følgende output:

![Verbatim1.png](/files/0baf3d124ec6d76246b6a2853db42df5742535ad)

Ligesom i eksemplet i indledningen udskrives al tekst med linjeskift og mellemrum bevaret. Der findes en stjerneversion af denne kommando, hvis output er lidt anderledes.

```latex
\begin{verbatim*}
Tekst omsluttet af \texttt{verbatim}-miljøet
udskrives direkte
og alle \LaTeX{}-kommandoer ignoreres.
\end{verbatim*}
```

[Åbn dette eksempel 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 ovenfor producerer følgende output:

![Verbatim2.png](/files/0c3c7bc45984fc36ce034fa87aa596e93fcb31c6)

I dette tilfælde fremhæves mellemrum med et særligt "synligt-mellemrum"-tegn: **`␣`**.

Verbatim-lignende tekst kan også bruges i et afsnit ved hjælp af `\verb` kommandoen.

```latex
I mappen \verb|C:\Windows\system32| kan du finde en masse Windows
systemapplikationer.

Kommandoen \verb+\ldots+ producerer \ldots
```

[Åbn dette eksempel 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 ovenfor producerer følgende output:

![Verbatim3OLV2.png](/files/93c11a088f631be8d2ebc5130bf5fa3155a662f8)

Kommandoen `\verb|C:\Windows\system32|` udskriver teksten inde i afgrænserne `|` i verbatim-format. Ethvert tegn, undtagen bogstaver og `*`, kan bruges som afgrænser. For eksempel `\verb+\ldots+` bruger `+` som afgrænser.

## Brug af listings til at fremhæve kode

For at bruge `lstlisting` miljøet skal du tilføje følgende linje til præamblen i dit dokument:

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

Her er et eksempel på brug af `lstlisting` miljøet fra `listings` pakken:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #skal blive incidensmatricen
    VT = np.zeros((n*m,1), int)  #hjælpevariabel

    #beregn bitvis xor-matricen
    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}
```

[Åbn dette `listings` eksemplet 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 ovenfor producerer følgende output:

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

I dette eksempel ignorerer outputtet alle LaTeX-kommandoer, og teksten udskrives med alle linjeskift og mellemrum, som de er indtastet. Lad os se et andet eksempel:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #skal blive incidensmatricen
    VT = np.zeros((n*m,1), int)  #hjælpevariabel

    #beregn bitvis xor-matricen
    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}
```

[Åbn dette `listings` eksemplet 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 ovenfor producerer følgende output:

![CodeListingEx2.png](/files/5fcff20e218b657cb1694e63492e0273ca4405b3)

Den ekstra parameter i parenteser `[language=Python]` aktiverer kodefremhævning for netop dette programmeringssprog (Python); særlige ord vises med fed skrift, og kommentarer skrives med kursiv. Se [referencevejledningen](#reference-guide) for en komplet liste over understøttede programmeringssprog.

## Import af kode fra en fil

Kode gemmes normalt i en kildefil, derfor bliver en kommando, der automatisk henter kode fra en fil, meget nyttig.

```latex
Den næste kode vil blive importeret direkte fra en fil

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

![CodeListingEx3.png](/files/6ca5c137dc1457548e52f587c6087ca1f06e7af0)

Kommandoen `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importerer koden fra filen *BitXorMatrix.m*, den ekstra parameter mellem parenteserne aktiverer sprogfremhævning for programmeringssproget Octave. Hvis du kun har brug for at importere en del af filen, kan du angive to kommaseparerede parametre inden for parenteserne. For eksempel, for at importere koden fra linje 2 til linje 12, bliver den forrige kommando

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

Hvis `firstline` eller `lastline` udelades, antages det, at værdierne er henholdsvis begyndelsen af filen eller bunden af filen.

## Kodestile og farver

Kodeformatering med **listings-** pakken er yderst tilpasningsbar. Lad os se et eksempel

```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}
Den næste kode vil blive importeret direkte fra en fil

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

Koden ovenfor producerer følgende output:

![CodeListingEx4.png](/files/91e368750949cc01d6ed08cbccf97be739b550d1)

Som du kan se, forbedrer kodefarvning og -stil læsbarheden betydeligt.

I dette eksempel importeres pakken **xcolor** og derefter bruges kommandoen `\definecolor{}{}{}` til at definere nye farver i rgb-format, som senere vil blive brugt. For mere information se: [brug af farver i LaTeX](/latex/da/formatering/13-using-colors-in-latex.md)

Der er grundlæggende to kommandoer, der genererer stilen til dette eksempel:

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

Definerer en ny kodeliste-stil kaldet "mystyle". Inde i det andet parentespar sendes de indstillinger, der definerer denne stil; se referenceguiden for en fuld beskrivelse af disse og nogle andre parametre.

**\lstset{style=mystyle}**

Aktiverer stilen "mystyle". Denne kommando kan bruges i dit dokument til at skifte til en anden stil, hvis det er nødvendigt.

## Billedtekster og listen over kodelister

Ligesom i flydende elementer ([tabeller](/latex/da/figurer-og-tabeller/01-tables.md) og [figurer](/latex/da/flere-emner/27-inserting-images.md)), kan billedtekster tilføjes til en kodeliste for en mere klar præsentation.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #skal blive incidensmatricen
    VT = np.zeros((n*m,1), int)  #hjælpevariabel

    #beregn bitvis xor-matricen
    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}
```

[Åbn dette `listings` eksemplet på Overleaf](/latex/da/formatering/11-code-listing.md)

Koden ovenfor producerer følgende output:

![CodeListingEx5.png](/files/ffdb0fc010e2b98c778ef297f64c841df7062c7e)

Tilføjelse af den kommaseparerede parameter `caption=Python-eksempel` i parenteserne aktiverer billedteksten. Denne billedtekst kan senere bruges i listen over kodelister.

```latex
\lstlistoflistings
```

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

## Eksempelprojekt på Overleaf

Åbn dette link for at [afprøve `listings` pakkeeksemplet på Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Referencevejledning

### Understøttede sprog

**understøttede sprog (og dets dialekter, hvis muligt; dialekter angives i parentes og standarddialekter skrives i kursiv):**

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

### Indstillinger til tilpasning af kodeliste-stile

* **backgroundcolor** - farve til baggrunden. Ekstern ***color-*** eller ***xcolor*** pakke nødvendig.
* **commentstyle** - stil for kommentarer i kildesproget.
* **basicstyle** - skrifttype/størrelse/familie osv. for kilden (f.eks. `basicstyle=\ttfamily\small`)
* **keywordstyle** - stil for nøgleord i kildesproget (f.eks. `keywordstyle=\color{red}`)
* **numberstyle** - stil brugt til linjenumre
* **numbersep** - afstand fra linjenumre til koden
* **stringstyle** - stil for strenge i kildesproget
* **showspaces** - fremhæv mellemrum i koden (sand/falsk)
* **showstringspaces** - fremhæv mellemrum i strenge (sand/falsk)
* **showtabs** - fremhæv tabulatorer i koden (sand/falsk)
* **linjenumre** - placering af linjenumre (venstre/højre/ingen, dvs. ingen linjenumre)
* **prebreak** - viser markering ved slutningen af den brudte linje (f.eks. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - placering af billedtekst (t/b)
* **ramme** - visning af ramme uden om koden (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - angiver, om automatiske linjeskift kun skal ske ved mellemrum
* **breaklines** - automatisk linjebrydning
* **keepspaces** - bevar mellemrum i koden, nyttigt til indrykning
* **tabsize** - standard tabulatorstørrelse
* **escapeinside** - angiv tegn til at undslippe fra kildekode til LaTeX (f.eks. `escapeinside={\%*}{*)}`)
* **rulecolor** - angiv farven på rammeboksen

## Yderligere læsning

For mere information se:

* [Kodesyntaksfremhævning med minted](/latex/da/formatering/12-code-highlighting-with-minted.md)
* [Brug af farver i LaTeX](/latex/da/formatering/13-using-colors-in-latex.md)
* [Indholdsfortegnelse](/latex/da/dokumentstruktur/02-table-of-contents.md)
* [Håndtering i et stort projekt](/latex/da/dokumentstruktur/07-management-in-a-large-project.md)
* [LaTeX-projekter med flere filer](/latex/da/dokumentstruktur/08-multi-file-latex-projects.md)
* [Skriftstørrelser, skrifttypefamilier og stilarter](/latex/da/skrifttyper/01-font-sizes-families-and-styles.md)
* [Skrifttyper](/latex/da/skrifttyper/02-font-typefaces.md)
* [**listings** pakkedokumentation](https://texdoc.org/serve/listings/0)
* [**listings** CTAN-hjemmesiden](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/da/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.
