
Я запутался в пакетах для написания простых "алгоритмов". Слишком много опций, и непонятно, когда что использовать. Например, если я использую algpseudocode
, то я не могу добавить, algorithmic
потому что он уже включен в algorithm
пакет.
Есть ли какие-то определенные рекомендации для оптимизированного подхода? Любые предложения будут оценены по достоинству.
решение1
Краткая версия:
- алгоритм- float-оболочка для алгоритмов.
- алгоритмический- первая среда набора алгоритмов.
- algorithmicx- вторая алгоритмическая среда набора текста.
- algpseudocode- макет для
algorithmicx
. - алгоритм2e- третий алгоритм среды набора текста.
Я использую algorithmicx
with, 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
. Существуют также другие макеты, такие как:
algcompatible
(полностью совместим с алгоритмическим пакетом),algpascal
(цель — создание отформатированной программы на языке Pascal; можно преобразовать программу на языке Pascal вalgpascal
описание алгоритма с помощью некоторых базовых правил подстановки).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
, то есть вертикальные линии области видимости.