Cómo formatear un algoritmo de pseudocódigo

Cómo formatear un algoritmo de pseudocódigo

Me gustaría saber cómo formatear un algoritmo de pseudocódigo como el que se muestra en la siguiente imagen. Me gustaría ver un ejemplo de código Tex/Latex que imitaría el estilo, formato y diseño del pseudocódigo ilustrado en esta imagen. Sé cómo escribir algoritmos de pseudocódigo simples, pero no sé cómo

  1. Alinee el pseudocódigo con un \item "Algún texto..."
  2. Cómo escribir un pseudocódigo conAporteyProducciónexactamente debajo del procedimiento/función para que no estén numerados y alineados con el procedimiento/función
  3. Cómo utilizar los tirantes del bloque en forma de "líneas verticales"

ingrese la descripción de la imagen aquí

Mi intento

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

mi resultado ingrese la descripción de la imagen aquí

Comentarios

  1. Como puede ver, no sé cómo alinear el algoritmo con el texto detallado.
  2. no se como colocarAporteyProducciónpalabras debajo de la función, de modo que no estén numeradas y alineadas con una función.
  3. Me gusta más el estilo del bloque de líneas verticales, en lugar de simplementecondición: fin.

Soy nuevo en la escritura de algoritmos de pseudocódigo con Latex, pero sospecho que el estilo y el formato que estoy buscando están en el paquete.algoritmo2e. ¿Alguien puede mostrarme cómo lograr el siguiente resultado?

ingrese la descripción de la imagen aquí

Quiero aprender a escribir un algoritmo de pseudocódigo con el mismo estilo que en la imagen de arriba.

Respuesta1

Aquí lo tienes:

ingrese la descripción de la imagen aquí

Código:

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

información relacionada