Как отформатировать алгоритм псевдокода

Как отформатировать алгоритм псевдокода

Я хотел бы знать, как форматировать псевдокодовый алгоритм, как показано на рисунке ниже. Я хотел бы увидеть пример кода Tex/Latex, который будет имитировать стиль, форматирование и дизайн псевдокода, показанного на этом рисунке. Я знаю, как писать простые псевдокодовые алгоритмы, но я не знаю, как

  1. Совместите псевдокод с элементом \item "Какой-то текст.."
  2. Как написать псевдокод с помощьюВходиВыходнепосредственно под процедурой/функцией, чтобы они не были пронумерованы и выровнены с процедурой/функцией
  3. Как использовать блочные распорки в виде «вертикальных линий»

введите описание изображения здесь

Моя попытка

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

Мой результат введите описание изображения здесь

Комментарии

  1. Как видите, я не знаю, как согласовать алгоритм с детализированным текстом.
  2. Я не знаю, как разместитьВходиВыходслова под функцией, чтобы они не были пронумерованы и выровнены по функции.
  3. Мне больше нравится стиль вертикального блока, чем простосостояние:конец.

Я новичок в написании алгоритмов псевдокода с помощью Latex, но подозреваю, что стиль и форматирование, которые я ищу, находятся в пакетеалгоритм2eМожет ли кто-нибудь показать мне, как добиться следующего результата:

введите описание изображения здесь

Я хочу научиться писать псевдокод алгоритма в том же стиле, что и на картинке выше.

решение1

Вот:

введите описание изображения здесь

Код:

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

Связанный контент