Краткая версия:

Краткая версия:

Я запутался в пакетах для написания простых "алгоритмов". Слишком много опций, и непонятно, когда что использовать. Например, если я использую algpseudocode, то я не могу добавить, algorithmicпотому что он уже включен в algorithmпакет.

Есть ли какие-то определенные рекомендации для оптимизированного подхода? Любые предложения будут оценены по достоинству.

решение1

Краткая версия:

  • алгоритм- float-оболочка для алгоритмов.
  • алгоритмический- первая среда набора алгоритмов.
  • algorithmicx- вторая алгоритмическая среда набора текста.
  • algpseudocode- макет для algorithmicx.
  • алгоритм2e- третий алгоритм среды набора текста.

Я использую algorithmicxwith, algpseudocodeтак как они превосходят algorithmic. Я думаю, algorithmicxчто предлагает ту же функциональность по сравнению с algorithm2e, но я нахожу его синтаксис более понятным, чем тот, который предоставляется algorithm2e.

Подробная версия

алгоритм

Float-обертка для алгоритмов. Она похожа на блочные команды tableили figure, которые вы оборачиваете вокруг своей таблицы/рисунка, чтобы присвоить ей номер и предотвратить ее разбиение на две страницы.документацияговорит:

При размещении в тексте без инкапсуляции в плавающую среду среды algorithmicмогут быть разделены по границе страницы, что значительно ухудшает их внешний вид. Кроме того, полезно иметь пронумерованные алгоритмы для справки и для списков алгоритмов, которые будут добавлены к списку содержимого. Среда algorithm призвана решать эти проблемы, предоставляя плавающую среду для алгоритмов.

Пример:

\begin{algorithm}
    \caption{Algorithm caption}
    \label{alg:algorithm-label}
    \begin{algorithmic}
        ... Your pseudocode ...
    \end{algorithmic}
\end{algorithm}

алгоритмический

Это среда, в которой вы пишете свой псевдокод. У вас есть предопределенные команды для общих структур, таких как if, while, procedure. Все команды пишутся с заглавной буквы, например \IF{cond} ... \ELSE .... Документация1говорит:

Среда algorithmicпредоставляет среду для описания алгоритмов, а algorithmсреда предоставляет обертку «float» для алгоритмов (реализованную с использованием algorithmicили каким-либо другим методом по выбору пользователя). Причина предоставления двух сред заключается в том, чтобы предоставить пользователю максимальную гибкость.

Пример:

\begin{algorithmic}
    \IF{some condition is true}
        \STATE do some processing
    \ELSIF{some other condition is true}
        \STATE do some different processing
    \ELSE
        \STATE do the default actions
    \ENDIF
\end{algorithmic}

algorithmicx

Этот пакет как бы algorithmicобновлен. Он позволяет вам определять пользовательские команды, что algorithmicневозможно. Так что если вы не хотите писать свои (сумасшедшие) пользовательские команды, вам подойдет algorithmic. Вы используете algorithmicxтак же, как используете algorithmic, только синтаксис и детали немного отличаются. Подробности см. в примере ниже.документацияговорит:

Пакет algorithmicx сам по себе не определяет никаких алгоритмических команд, но дает набор макросов для определения такого набора команд. Вы можете использовать только algorithmicx и определить команды самостоятельно, или вы можете использовать один из предопределенных наборов команд

Пример:

\begin{algorithm}
    \caption{Euclid’s algorithm}
    \label{euclid}
    \begin{algorithmic}[1] % The number tells where the line numbering should start
        \Procedure{Euclid}{$a,b$} \Comment{The g.c.d. of a and b}
            \State $r\gets a \bmod b$
            \While{$r\not=0$} \Comment{We have the answer if r is 0}
                \State $a \gets b$
                \State $b \gets r$
                \State $r \gets a \bmod b$
            \EndWhile\label{euclidendwhile}
            \State \textbf{return} $b$\Comment{The gcd is b}
        \EndProcedure
    \end{algorithmic}
\end{algorithm}

algpseudocode

Это просто макет, algorithmicxкоторый пытается быть максимально похожим на algorithmic. Существуют также другие макеты, такие как:

  1. algcompatible(полностью совместим с алгоритмическим пакетом),
  2. algpascal(цель — создание отформатированной программы на языке Pascal; можно преобразовать программу на языке Pascal в algpascalописание алгоритма с помощью некоторых базовых правил подстановки).
  3. algc(точно так же, как algpascal, но для c. Эта схема неполна).

Theдокументацияговорит:

Если вы знакомы с алгоритмическим пакетом, то вам будет легко переключиться. Вы можете использовать старые алгоритмы с макетом algcompatible, но, пожалуйста, используйте algpseudocodeмакет для новых алгоритмов. Чтобы использовать algpseudocode, просто используйте \usepackage{algpseudocode}.Вам не нужно вручную загружать algorithmicxпакет, так как это делает algpseudocode.

Посмотрите пример algorithmicx, он использует algpseudocodeмакет.


алгоритм2e

Это еще одна среда алгоритма, как algorithmicи или algorithmicx.документацияговорит:

Algorithm2e — это среда для написания алгоритмов в LaTeX2e. An algorithmопределяется как плавающий объект, например, цифры. Он предоставляет макросы, которые позволяют создавать различные виды ключевых слов, таким образом, дается набор предопределенных ключевых слов. Вы также можете изменить типографику ключевых слов.

Пример:

\begin{algorithm}[H]
    \SetAlgoLined
    \KwData{this text}
    \KwResult{how to write algorithm with \LaTeX2e }
    initialization\;
    \While{not at end of this document}{
        read current\;
        \eIf{understand}{
            go to next section\;
            current section becomes this one\;
            }{
            go back to the beginning of current section\;
        }
    }
\caption{How to write algorithms}
\end{algorithm}

решение2

  • Я нашел недавниеalgpseudocodexупаковкастать хорошим шагом на пути к унификации разнообразия algorithm*пакетов.
  • Этот пакет удачно сочетает в себе некоторые функции (например, универсальность, шаблонность) algorithmicxи лаконичную компоновку algorithm2e, то есть вертикальные линии области видимости.

введите описание изображения здесь (Пример взят из руководства.)

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