> 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/de/weitere-themen/02-algorithms.md).

# Algorithmen

## Einführung

*(Um Programmcode-Listings zu schreiben, siehe bitte* [*diese Hilfeseite*](/latex/de/formatierung/11-code-listing.md) *stattdessen.)*

Um Algorithmen oder Pseudocode in LaTeX zu setzen, können Sie eine der folgenden Optionen verwenden:

* Wählen Sie EINE der (`algpseudocode` ODER `algcompatible` ODER `algorithmic`) Pakete zum Setzen der Algorithmus-Teile und das `algorithm` Paket für die Beschriftung des Algorithmus.
* Die `algorithm2e` Pakets erkunden.

**Beachten Sie, dass Sie nur eine der oben genannten Paketgruppen wählen und nur die vom gewählten Paket bereitgestellten Befehle und die Syntax verwenden sollten.** Diese Pakete können nicht gleichzeitig geladen werden; andernfalls erhalten Sie viele Fehler.

## Die Pakete algpseudocode und algorithm

Die `algpseudocode` Paket bietet eine `algorithmic` Umgebung und einige nützliche Befehle. Sie können [ein vollständiges Beispiel auf Overleaf öffnen](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , und wir gehen in diesem Abschnitt auf einige Details ein.

Hier ist unser erster Algorithmus, der Umgebungen und Befehle aus dem `algpseudocode` Paket:

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

[Öffnen Sie dieses kurze algpseudocode-Beispiel 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 ist die Ausgabe:

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

*Sie sollten die `algorithm2e`, `algcompatible`, `algorithmic` Pakete nicht laden, wenn Sie bereits `algpseudocode`.*

Beachten Sie, dass die von `algpseudocode` bereitgestellten Befehlsnamen typischerweise in Titelschreibweise stehen, z. B. `\State`, `\While`, `\EndWhile`.

Wenn Sie dem Algorithmus Zeilennummern hinzufügen möchten, können Sie die erste Zeilennummer zur `algorithmic` Umgebung wie folgt hinzufügen: `\begin{algorithmic}[1]` und erhalten Sie diese Ausgabe:

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

Das obige Algorithmusbeispiel hat weder eine Beschriftung noch eine Nummer. Wenn Sie einen beschrifteten Algorithmus benötigen, müssen Sie auch das `algorithm` Paket laden und

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

um Ihre `algorithmic` Umgebung herum. Sie können `\label{...}` nach dem `\caption{...}`, sodass die Algorithmusnummer mit `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{An algorithm with caption}\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$ is even}
    \State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{This is a comment}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Öffnen Sie dieses kurze Algorithmus+algpseudocode-Beispiel 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/418346ea46690af9a9c547e253b418bfe169bb13)

Die `algorithm` Umgebung ist eine [float](/latex/de/abbildungen-und-tabellen/02-positioning-images-and-tables.md) wie `table` und `figure`, sodass Sie Platzierungsmodifikatoren für Gleitobjekte hinzufügen können `[hbt!]` nach `\begin{algorithm}` falls erforderlich. Das bedeutet auch, dass eine lange `algorithmic` Umgebung für sich allein seitenübergreifend umbrochen werden kann, eine `algorithm` Umgebung jedoch nicht.

Die `algorithm` Paket bietet außerdem eine `\listofalgorithms` Befehl, der funktioniert wie `\listoffigures`, aber für beschriftete Algorithmen, wie hier.

![Algpseudocode-2.png](/files/80aae936be576153dab069e12b7ef4d84523aa29)

[Öffnen Sie ein vollständiges Beispiel auf Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Die Pakete algcompatible/algorithmic und algorithm

Die `algorithmic` Paket verwendet eine ähnliche Syntax wie `algpseudocode`; **aber** seine Befehlsnamen sind in Großbuchstaben, z. B. `\STATE`, `\WHILE`, `\ENDWHILE`.

Andererseits `algcompatible` werden Befehlsnamen in Großbuchstaben und in Titelschreibweise erkennen, sodass `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` alle erkannt werden. Abgesehen von den Befehlsnamen `algcompatible` und `algorithmic` verwenden die Befehle dieselbe Argumentsyntax wie `algpseudocode`.

```latex
\documentclass{article}
\usepackage{algcompatible}
% ODER \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}
```

[Öffnen Sie dieses kurze algcompatible-Beispiel 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)

Einige ältere Vorlagen oder Dokumentklassen haben möglicherweise `algorithmic`, daher müssen Sie die bereitgestellte Syntax und die Befehlsnamen befolgen. *Sie sollten die `algorithm2e`, `algpseudocode` Pakete, wenn das `algorithmic` oder `algcompatible` Paket bereits geladen ist.*

Die `algorithm` Paket kann mit `algorithmic`/`algcompatible` verwendet werden, um den Algorithmen nummerierte Beschriftungen hinzuzufügen.

[Öffnen Sie ein vollständiges Beispiel auf Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Das Paket algorithm2e

Die `algorithm2e` Paket hat eine ganz andere Syntaxstruktur als die `algpseudocode`, `algcompatible` und `algorithmic` Pakete, daher müssen Sie sorgfältig darauf achten, welches Paket Sie verwenden möchten oder welches Paket Ihre Vorlage geladen hat.

Die `algorithm2e` Paket bietet eine `algorithm` Umgebung verwenden müssen:

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

[Öffnen Sie dieses kurze algorithm2e-Beispiel 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/34e6c266c47dc5d071d469287278d85ae2bb4fd1)

Jede Zeile in Ihrem Quellcode *muss* muss mit `\;` enden, andernfalls wird Ihr Algorithmus in der Ausgabe in derselben Textzeile fortgesetzt. Nur Zeilen mit einem Makro, das einen Block einleitet, sollten nicht mit `\;`.

Beim Verwenden von `algorithm2e` können Sie `\caption{...}\ref{...}` direkt in dieser `algorithm` Umgebung verwenden, ohne weitere Pakete laden zu müssen. Wenn Sie jedoch Kommentare in Ihrem Algorithmus hinzufügen möchten, müssen Sie zunächst den zu verwendenden Befehlsnamen deklarieren:

```latex
%% Dies deklariert einen Befehl \Comment
%% Das Argument wird von /* ... */ umgeben
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{An algorithm with caption}\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$ is even}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{This is a comment}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Öffnen Sie dieses beschriftete algorithm2e-Beispiel 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/a3a92b5ea8e001951101603f399db246acbd28de)

Standardmäßig wird der `plain` Algorithmus-Stil verwendet. Wenn Sie jedoch Linien um den Algorithmus und die Beschriftung bevorzugen, können Sie die `ruled` Paketoption beim Laden von `algorithm2e`, oder schreiben Sie `\RestyleAlgo{ruled}` in Ihr Dokument. Ihre beschrifteten Algorithmen werden dann so gesetzt:

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

Die `algorithm2e` Paket bietet viele Anpassungsoptionen. Wenn Sie zum Beispiel die vertikalen Linien entfernen möchten, die die while—end while-, if—end if-Blöcke kennzeichnen, können Sie die `noline` Paketoption beim Laden von `algorithm2e`, oder schreiben Sie `\SetNoline`. Ein `\listofalgorithms` Befehl ist auch in `algorithm2e`.

[Öffnen Sie ein vollständiges Beispiel auf Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Weiterführende Literatur

* [`algpseudocode` Paketdokumentation](https://texdoc.org/pkg/algorithmicx) (siehe Abschnitt 3.1)
* [`algorithmic` und `algorith` Paketdokumentation](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` Paketdokumentation](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/de/weitere-themen/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.
