> 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/nl/meer-onderwerpen/02-algorithms.md).

# Algoritmen

## Inleiding

*(Om programmacodelijsten te schrijven, zie* [*deze hulppagina*](/latex/nl/opmaak/11-code-listing.md) *in plaats daarvan.)*

Om algoritmen of pseudocode in LaTeX op te maken, kun je een van de volgende opties gebruiken:

* Kies ÉÉN van de (`algpseudocode` OF `algcompatible` OF `algorithmic`) pakketten om de algoritmische inhoud op te maken, en het `algorithm` pakket voor het voorzien van een bijschrift aan het algoritme.
* De `algorithm2e` pakket niet te gebruiken.

**Merk op dat je slechts één van de bovenstaande pakkettenreeksen moet kiezen, en alleen de opdrachten en syntaxis moet gebruiken die door het pakket dat je kiest worden aangeboden.** Deze pakketten kunnen niet gelijktijdig worden geladen; anders krijg je veel fouten.

## De pakketten algpseudocode en algorithm

De `algpseudocode` pakket biedt een `algorithmic` omgeving en enkele nuttige opdrachten. Je kunt [een volledig voorbeeld openen op Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , en we gaan in deze sectie op enkele details in.

Hier is ons eerste algoritme, met gebruik van omgevingen en opdrachten uit het `algpseudocode` pakket:

```latex
\documentclass{article}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithmic}
\State $i \gets 10$
\If{$i\geq 5$}
    \State $i \gets i-1$
\Else
    \If{$i\leq 3$}
        \State $i \gets i+2$
    \EndIf
\EndIf
\end{algorithmic}

\end{document}
```

[Open dit korte algpseudocode-voorbeeld in Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algpseudocode+short+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CState+%24i+%5Cgets+10%24%0A%5CIf%7B%24i%5Cgeq+5%24%7D+%0A++++%5CState+%24i+%5Cgets+i-1%24%0A%5CElse%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++++++%5CState+%24i+%5Cgets+i%2B2%24%0A++++%5CEndIf%0A%5CEndIf+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

Hier is het uitvoerresultaat:

![Algpseudocode-0.png](/files/8177270a4a9089254ef92113c9cd88514d8adf4b)

*Je moet de `algorithm2e`, `algcompatible`, `algorithmic` pakketten niet laden als je al `algpseudocode`.*

Merk op dat de opdrachtnamen die worden aangeboden door `algpseudocode` zijn doorgaans geschreven met een hoofdletter aan het begin, bijvoorbeeld `\State`, `\While`, `\EndWhile`.

Als je regelnummers aan het algoritme wilt toevoegen, kun je het eerste regelnummer toevoegen aan de `algorithmic` omgeving, als volgt: `\begin{algorithmic}[1]` en krijg deze uitvoer:

![Algpseudocode-00.png](/files/9e7fdddd3883498315f68701d1863326fa9711c6)

Het bovenstaande algoritmevoorbeeld heeft geen bijschrift en is niet genummerd. Als je een algoritme met bijschrift nodig hebt, moet je ook het `algorithm` pakket laden, en

```latex
\begin{algorithm}
\caption{...}
...
\end{algorithm}
```

om je `algorithmic` omgeving heen. Je kunt `\label{...}` toevoegen na de `\caption{...}`, zodat het algoritmenummer kan worden verwezen met `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{Een algoritme met bijschrift}\label{alg:cap}
\begin{algorithmic}
\Require $n \geq 0$
\Ensure $y = x^n$
\State $y \gets 1$
\State $X \gets x$
\State $N \gets n$
\While{$N \neq 0$}
\If{$N$ even is}
    \State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{Dit is een opmerking}
\ElsIf{$N$ oneven is}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Open dit korte voorbeeld van algorithm+algpseudocode in Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm%2Balgpseudocode+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Acap%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CRequire+%24n+%5Cgeq+0%24%0A%5CEnsure+%24y+%3D+x%5En%24%0A%5CState+%24y+%5Cgets+1%24%0A%5CState+%24X+%5Cgets+x%24%0A%5CState+%24N+%5Cgets+n%24%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%0A%5CIf%7B%24N%24+is+even%7D%0A++++%5CState+%24X+%5Cgets+X+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24++%5CComment%7BThis+is+a+comment%7D%0A%5CElsIf%7B%24N%24+is+odd%7D%0A++++%5CState+%24y+%5Cgets+y+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+N+-+1%24%0A%5CEndIf%0A%5CEndWhile%0A%5Cend%7Balgorithmic%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algpseudocode-1.png](/files/e9418f426a063d3231fa06aeea1fe1c362d863c3)

De `algorithm` omgeving is een [float](/latex/nl/afbeeldingen-en-tabellen/02-positioning-images-and-tables.md) zoals `table` en `figure`, zodat je zweefplaatsingsmodificatoren kunt toevoegen `[hbt!]` na `\begin{algorithm}` indien nodig. Dit betekent ook dat terwijl een lange `algorithmic` omgeving op zichzelf over pagina's kan worden afgebroken, een `algorithm` omgeving niet.

De `algorithm` pakket biedt ook een `\listofalgorithms` opdracht die werkt als `\listoffigures`, maar voor algoritmen met bijschrift, zoals dit.

![Algpseudocode-2.png](/files/02c6eb1d450b271dcf0daa8294683148d90411ce)

[Open een volledig voorbeeld op Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## De pakketten algcompatible/algorithmic en algorithm

De `algorithmic` pakket gebruikt syntaxis die vergelijkbaar is met `algpseudocode`; **maar** de opdrachtnamen zijn in hoofdletters, bijvoorbeeld `\STATE`, `\WHILE`, `\ENDWHILE`.

Aan de andere kant, `algcompatible` zal opdrachtnamen in hoofdletters en met een hoofdletter aan het begin herkennen, dus `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` worden allemaal herkend. Behalve de opdrachtnamen, `algcompatible` en `algorithmic` opdrachten gebruiken dezelfde argumentensyntaxis als `algpseudocode`.

```latex
\documentclass{article}
\usepackage{algcompatible}
% OF \usepackage{algorithmic}
\begin{document}
\begin{algorithmic}
\STATE $i\gets 10$
\IF {$i\geq 5$}
  \STATE $i\gets i-1$
\ELSE
  \IF {$i\leq 3$}
    \STATE $i\gets i+2$
  \ENDIF
\ENDIF
\end{algorithmic}

\end{document}
```

[Open dit korte algcompatible-voorbeeld in Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algcompatible\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgcompatible%7D%0A%25+OR+%5Cusepackage%7Balgorithmic%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CSTATE+%24i%5Cgets+10%24%0A%5CIF+%7B%24i%5Cgeq+5%24%7D+%0A++%5CSTATE+%24i%5Cgets+i-1%24%0A%5CELSE%0A++%5CIF+%7B%24i%5Cleq+3%24%7D%0A++++%5CSTATE+%24i%5Cgets+i%2B2%24%0A++%5CENDIF%0A%5CENDIF+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

Sommige oudere sjablonen of documentklassen hebben mogelijk al `algorithmic`, dus je moet de aangeboden syntaxis en opdrachtnamen volgen. *Je moet de `algorithm2e`, `algpseudocode` pakketten als het `algorithmic` of `algcompatible` pakket al geladen is.*

De `algorithm` pakket kan worden gebruikt met `algorithmic`/`algcompatible` om genummerde bijschriften aan de algoritmen toe te voegen.

[Open een volledig voorbeeld op Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Het pakket algorithm2e

De `algorithm2e` pakket heeft een vrij andere syntactische structuur dan de `algpseudocode`, `algcompatible` en `algorithmic` pakketten, dus je moet zorgvuldig zijn over welk pakket je wilt gebruiken, of welk pakket je sjabloon heeft geladen.

De `algorithm2e` pakket biedt een `algorithm` omgeving:

```latex
\documentclass{article}
\usepackage{algorithm2e}
\begin{document}
\begin{algorithm}
$i\gets 10$\;
\eIf{$i\geq 5$}
{
    $i\gets i-1$\;
}{
    \If{$i\leq 3$}
    {
        $i\gets i+2$\;
    }
}
\end{algorithm}

\end{document}
```

[Open dit korte voorbeeld van algorithm2e in Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%24i%5Cgets+10%24%5C%3B%0A%5CeIf%7B%24i%5Cgeq+5%24%7D%0A%7B%0A++++%24i%5Cgets+i-1%24%5C%3B%0A%7D%7B%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++%7B%0A++++++++%24i%5Cgets+i%2B2%24%5C%3B%0A++++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algorithm2e-0.png](/files/7d6418b79c516cf4b47c8ebb7c9e77b27a966860)

Elke regel in je broncode *moeten* moet eindigen op `\;` anders loopt je algoritme door op dezelfde regel tekst in de uitvoer. Alleen regels met een macro waarmee een blok begint, mogen niet eindigen op `\;`.

Bij gebruik van `algorithm2e` kun je `\caption{...}\ref{...}` binnen deze `algorithm` omgeving direct gebruiken, zonder andere pakketten te hoeven laden. Maar als je opmerkingen in je algoritme wilt toevoegen, moet je eerst de te gebruiken opdrachtnnaam declareren:

```latex
%% Dit declareert een opdracht \Comment
%% Het argument wordt omgeven door /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{Een algoritme met bijschrift}\label{alg:two}
\KwData{$n \geq 0$}
\KwResult{$y = x^n$}
$y \gets 1$\;
$X \gets x$\;
$N \gets n$\;
\While{$N \neq 0$}{
  \eIf{$N$ even is}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{Dit is een opmerking}
  }{\If{$N$ oneven is}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Open dit voorbeeld van algorithm2e met bijschrift in Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%25%25+This+declares+a+command+%5CComment%0A%25%25+The+argument+will+be+surrounded+by+%2F%2A+...+%2A%2F%0A%5CSetKwComment%7BComment%7D%7B%2F%2A+%7D%7B+%2A%2F%7D%0A%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Atwo%7D%0A%5CKwData%7B%24n+%5Cgeq+0%24%7D%0A%5CKwResult%7B%24y+%3D+x%5En%24%7D%0A%24y+%5Cgets+1%24%5C%3B%0A%24X+%5Cgets+x%24%5C%3B%0A%24N+%5Cgets+n%24%5C%3B%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%7B%0A++%5CeIf%7B%24N%24+is+even%7D%7B%0A++++%24X+%5Cgets+X+%5Ctimes+X%24%5C%3B%0A++++%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24+%5CComment%2A%5Br%5D%7BThis+is+a+comment%7D%0A++%7D%7B%5CIf%7B%24N%24+is+odd%7D%7B%0A++++++%24y+%5Cgets+y+%5Ctimes+X%24%5C%3B%0A++++++%24N+%5Cgets+N+-+1%24%5C%3B%0A++++%7D%0A++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algorithm2e-1.png](/files/8775013e009e0d3936412cc19bff1836867431a2)

Standaard wordt de `plain` algoritmestijl gebruikt. Maar als je liever lijnen rond het algoritme en bijschrift hebt, kun je de `ruled` pakketoptie toevoegen bij het laden van `algorithm2e`, of schrijf `\RestyleAlgo{ruled}` in je document. Je algoritmen met bijschrift worden dan zo opgemaakt:

![Algorithm2e-11.png](/files/5a2db9b76f78fb16f41834ef86f6b5d84a31ceb2)

De `algorithm2e` pakket biedt veel aanpassingsmogelijkheden. Als je bijvoorbeeld de verticale lijnen wilt verwijderen die de while—end while- en if—end if-blokken markeren, kun je de `noline` pakketoptie toevoegen bij het laden van `algorithm2e`, of schrijf `\SetNoline`. Een `\listofalgorithms` opdracht is ook beschikbaar in `algorithm2e`.

[Open een volledig voorbeeld op Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Verder lezen

* [`algpseudocode` pakkettendocumentatie](https://texdoc.org/pkg/algorithmicx) (zie sectie 3.1)
* [`algorithmic` en `algoritme` pakkettendocumentatie](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` pakkettendocumentatie](https://texdoc.org/pkg/algorithm2e)


---

# 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/nl/meer-onderwerpen/02-algorithms.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.
