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

# Kodeliste

## Innledning

LaTeX er mye brukt innen vitenskap, og programmering har blitt et viktig aspekt i flere vitenskapsområder, derfor behovet for et verktøy som viser kode på riktig måte. Denne artikkelen forklarer hvordan du bruker standard **verbatim** miljøet samt pakken **listings**, som tilbyr mer avanserte funksjoner for kodeformatering. [Denne separate artikkelen](/latex/no/formatering/12-code-highlighting-with-minted.md) drøfter `minted` pakken, som utfører syntaksfremheving ved hjelp av Python `pygmentize` biblioteket.

## Verbatim-miljøet

Standardverktøyet for å vise kode i LaTeX er `verbatim`, som genererer et resultat i fastbredde-skrift.

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

[Åpne dette eksemplet på 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 gir følgende resultat:

![Verbatim1.png](/files/63b62e890790ce7611faabcdb925ccfc5dad4df7)

Akkurat som i eksemplet i innledningen skrives all tekst ut med linjeskift og mellomrom bevart. Det finnes en stjerneversjon av denne kommandoen som gir et litt annet resultat.

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

[Åpne dette eksemplet på 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 gir følgende resultat:

![Verbatim2.png](/files/74b7751d327e93bebe50b0408dbfb29888c60480)

I dette tilfellet fremheves mellomrom med et spesielt «synlig mellomrom»-tegn: **`␣`**.

Verbatim-lignende tekst kan også brukes i et avsnitt ved hjelp av `\verb` kommandoen.

```latex
I katalogen \verb|C:\Windows\system32| kan du finne mange Windows
systemapplikasjoner.

Kommandoen \verb+\ldots+ produserer \ldots
```

[Åpne dette eksemplet på 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 gir følgende resultat:

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

Kommandoen `\verb|C:\Windows\system32|` skriver ut teksten innenfor skilletegnene `|` i verbatim-format. Ethvert tegn, unntatt bokstaver og `*`, kan brukes som skilletegn. For eksempel `\verb+\ldots+` bruker `+` som skilletegn.

## Bruke listings til å fremheve kode

For å bruke `lstlisting` miljøet må du legge til følgende linje i dokumentets preamble:

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

Her er et eksempel på bruk av `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 bli incidensmatrisen
    VT = np.zeros((n*m,1), int)  #dummyvariabel

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

[Åpne 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 gir følgende resultat:

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

I dette eksemplet ignorerer utdataene alle LaTeX-kommandoer, og teksten skrives ut med alle linjeskift og mellomrom du har skrevet inn bevart. La oss se et andre eksempel:

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

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

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

[Åpne 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 gir følgende resultat:

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

Den ekstra parameteren innenfor hakeparentesene `[language=Python]` aktiverer kodefremheving for dette bestemte programmeringsspråket (Python), spesielle ord vises i fet skrift og kommentarer skrives i kursiv. Se [referanseguiden](#reference-guide) for en fullstendig liste over støttede programmeringsspråk.

## Importere kode fra en fil

Kode lagres vanligvis i en kildefil, derfor blir en kommando som automatisk henter kode fra en fil svært nyttig.

```latex
Den neste koden blir importert direkte fra en fil

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

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

Kommandoen `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importerer koden fra filen *BitXorMatrix.m*, gjør den ekstra parameteren mellom hakeparentesene det mulig å fremheve språk for programmeringsspråket Octave. Hvis du bare trenger å importere en del av filen kan du angi to kommaseparerte parametere inne i hakeparentesene. For eksempel, for å importere koden fra linje 2 til linje 12, blir den forrige kommandoen

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

Hvis `firstline` eller `lastline` utelates, antas det at verdiene er henholdsvis begynnelsen av filen eller slutten av filen.

## Kodestiler og farger

Kodeformatering med **listing** pakken er svært tilpasningsbar. La oss 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 neste koden blir importert direkte fra en fil

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

Koden ovenfor gir følgende resultat:

![CodeListingEx4.png](/files/3222c1c61f1110fdd2b23bc80f752676a5f831a9)

Som du ser, forbedrer fargelegging og stilsetting av koden lesbarheten betraktelig.

I dette eksemplet blir pakken **xcolor** importert, og deretter brukes kommandoen `\definecolor{}{}{}` til å definere nye farger i rgb-format som senere skal brukes. For mer informasjon, se: [bruk av farger i LaTeX](/latex/no/formatering/13-using-colors-in-latex.md)

Det er i praksis to kommandoer som genererer stilen for dette eksemplet:

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

Definerer en ny kodeopplistingstil kalt «mystyle». Inne i det andre paret med krøllparenteser sendes alternativene som definerer denne stilen; se referanseveiledningen for en fullstendig beskrivelse av disse og noen andre parametere.

**\lstset{style=mystyle}**

Aktiverer stilen «mystyle». Denne kommandoen kan brukes i dokumentet ditt for å bytte til en annen stil ved behov.

## Bildetekster og listen over opplistinger

Akkurat som i flytende elementer ([tabeller](/latex/no/figurer-og-tabeller/01-tables.md) og [figurer](/latex/no/flere-emner/27-inserting-images.md)), kan bildetekster legges til en opplisting for en tydeligere presentasjon.

```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 bli incidensmatrisen
    VT = np.zeros((n*m,1), int)  #dummyvariabel

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

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

Koden ovenfor gir følgende resultat:

![CodeListingEx5.png](/files/821c9d1608d8deb2886db736a41f1a1a7dfbb3da)

Ved å legge til den kommaseparerte parameteren `caption=Python-eksempel` inne i hakeparentesene, aktiveres bildeteksten. Denne bildeteksten kan senere brukes i listen over opplistinger.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/787a25846e69a54fcbf142d64ab8aea646245110)

## Eksempelprosjekt i Overleaf

Åpne denne lenken for å [prøve ut `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=)

## Referanseguide

### Støttede språk

**støttede språk (og dialekter hvis mulig, dialekter er angitt i klammer og standarddialekter er kursivert):**

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

### Alternativer for å tilpasse kodeopplistingstiler

* **backgroundcolor** - farge for bakgrunnen. Ekstern ***color*** eller ***xcolor*** pakke kreves.
* **commentstyle** - stil for kommentarer i kildespråket.
* **basicstyle** - skriftstørrelse/-familie osv. for kildekoden (f.eks. `basicstyle=\ttfamily\small`)
* **keywordstyle** - stil for nøkkelord i kildespråket (f.eks. `keywordstyle=\color{red}`)
* **numberstyle** - stil brukt for linjenumre
* **numbersep** - avstand fra linjenumrene til koden
* **stringstyle** - stil for strenger i kildespråket
* **showspaces** - fremhev mellomrom i kode (true/false)
* **showstringspaces** - fremhev mellomrom i strenger (true/false)
* **showtabs** - fremhev tabulatorer i kode (true/false)
* **linjenumre** - plassering av linjenumre (left/right/none, dvs. ingen linjenumre)
* **prebreak** - markør som vises ved slutten av en linje som brytes (f.eks. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - plassering av bildetekst (t/b)
* **ramme** - visning av ramme utenfor koden (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - angir om automatiske linjeskift bare skal skje ved mellomrom
* **breaklines** - automatisk linjebryting
* **keepspaces** - behold mellomrom i koden, nyttig for innrykk
* **tabsize** - standard tabulatorstørrelse
* **escapeinside** - angi tegn for å unnslippe fra kildekode til LaTeX (f.eks. `escapeinside={\%*}{*)}`)
* **rulecolor** - angi fargen på rammeboksen

## Videre lesning

For mer informasjon, se:

* [Kodefremheving med minted](/latex/no/formatering/12-code-highlighting-with-minted.md)
* [Bruke farger i LaTeX](/latex/no/formatering/13-using-colors-in-latex.md)
* [Innholdsfortegnelse](/latex/no/dokumentstruktur/02-table-of-contents.md)
* [Håndtering i et stort prosjekt](/latex/no/dokumentstruktur/07-management-in-a-large-project.md)
* [LaTeX-prosjekter med flere filer](/latex/no/dokumentstruktur/08-multi-file-latex-projects.md)
* [Skriftstørrelser, skriftfamilier og stiler](/latex/no/skrifter/01-font-sizes-families-and-styles.md)
* [Skrifttyper](/latex/no/skrifter/02-font-typefaces.md)
* [**listings** pakkedokumentasjon](https://texdoc.org/serve/listings/0)
* [**listings** CTAN-nettstedet](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/no/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.
