So formatieren Sie einen Pseudocode-Algorithmus

So formatieren Sie einen Pseudocode-Algorithmus

Ich möchte wissen, wie man einen Pseudocode-Algorithmus wie den im Bild unten gezeigten formatiert. Ich würde gerne ein Beispiel für Tex/Latex-Code sehen, der den Stil, die Formatierung und das Design des auf diesem Bild dargestellten Pseudocodes nachahmt. Ich weiß, wie man einfache Pseudocode-Algorithmen schreibt, aber ich weiß nicht, wie man

  1. Richten Sie den Pseudocode mit einem \item "Ein Text..." aus.
  2. Wie schreibe ich einen Pseudocode mitEingangUndAusgabegenau unter der Prozedur/Funktion, so dass sie nicht nummeriert und mit der Prozedur/Funktion ausgerichtet sind
  3. So verwenden Sie Blockklammern in Form von „senkrechten Linien“

Bildbeschreibung hier eingeben

Mein Versuch

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\usepackage{algorithm}
\usepackage{algpseudocode}

\usepackage{geometry}
 \geometry{
 a4paper,
 total={210mm,297mm},
 left=20mm,
 right=20mm,
 top=20mm,
 bottom=20mm,
 }

\begin{document}
\begin{enumerate}

 \item Some text goes here . . .
  \begin{algorithm}
   \caption{Merge Sort}
    \begin{algorithmic}[1]
      \Function{Merge}{$A,p,q,r$}\Comment{Where A - array, p - left, q - middle, r - right}

        \State ${n_1} = q - p + 1$
        \State ${n_2} = r - q$
        \State Let $L[1 \ldots {n_1} + 1]$ and $R[1 \ldots {n_2} + 1]$ be new arrays
        \For{$i = 1$ to ${n_1}$}
            \State $L[i] = A[p + i - 1]$
        \EndFor
        \For{$j = 1$ to ${n_2}$}
            \State $R[i] = A[q + j]$
        \EndFor
        \State $L[{n_1} + 1] =  \infty $
        \State $R[{n_2} + 1] =  \infty $
        \State $i = 1$
        \State $j = 1$
        \For{$k = p$ to $r$}
            \If {$L[i] < R[j]$}
                \State $A[k] = L[i]$
                \State $i = i + 1$
            \ElsIf {$L[i] > R[j]$}
                \State $A[k] = R[j]$
                \State $j = j + 1$
            \Else
                \State $A[k] = - \infty$ \Comment{We mark the duplicates with the largest negative integer}
                \State $j = j + 1$
            \EndIf
        \EndFor
       \EndFunction

\end{algorithmic}
\end{algorithm}
\end{enumerate}
\end{document}

Mein Ergebnis Bildbeschreibung hier eingeben

Kommentare

  1. Wie Sie sehen, weiß ich nicht, wie ich den Algorithmus mit dem aufgelisteten Text in Einklang bringen soll.
  2. Ich weiß nicht, wie ich es platzieren sollEingangUndAusgabeWörter unterhalb der Funktion, so dass diese nicht nummeriert und an einer Funktion ausgerichtet sind.
  3. Ich mag mehr den Stil der vertikalen Linie Block, anstatt nurBedingung: Ende.

Ich bin neu im Schreiben von Pseudocode-Algorithmen mit Latex, aber ich vermute, dass der Stil und die Formatierung, nach denen ich suche, im Paket enthalten sindalgorithm2e. Kann mir jemand zeigen, wie ich folgendes Ergebnis erreiche:

Bildbeschreibung hier eingeben

Ich möchte lernen, Pseudocode-Algorithmen im gleichen Stil wie im Bild oben zu schreiben.

Antwort1

Hier ist es:

Bildbeschreibung hier eingeben

Code:

\documentclass{article}
\usepackage{amsmath}
\usepackage[linesnumbered,ruled]{algorithm2e}

\begin{document}
\begin{algorithm}
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}

    \underline{function Euclid} $(a,b)$\;
    \Input{Two nonnegative integers $a$ and $b$}
    \Output{$\gcd(a,b)$}
    \eIf{$b=0$}
      {
        return $a$\;
      }
      {
        return Euclid$(b,a\mod b)$\;
      }
    \caption{Euclid's algorithm for finding the greatest common divisor of two nonnegative integers}
\end{algorithm}
\end{document} 

verwandte Informationen