
Estou confuso sobre os pacotes para escrever "algoritmos" simples. Existem muitas opções e é confuso quando usar o quê. Por exemplo, se eu usar algpseudocode
, não posso adicionar algorithmic
porque já está incluso no algorithm
pacote.
Existe alguma diretriz definitiva para uma abordagem simplificada? Qualquer sugestão será apreciada.
Responder1
Versão TL;DR:
- algoritmo- wrapper float para algoritmos.
- algorítmico- primeiro ambiente de composição de algoritmo.
- algorítmicox- segundo ambiente de composição de algoritmo.
- algpseudocódigo- layout para
algorithmicx
. - algoritmo2e- terceiro ambiente de composição de algoritmo.
Eu uso algorithmicx
with algpseudocode
porque eles são superiores a algorithmic
. Acho que algorithmicx
oferece a mesma funcionalidade em comparação com algorithm2e
, mas acho sua sintaxe mais clara do que a fornecida por algorithm2e
.
Versão detalhada
algoritmo
Wrapper flutuante para algoritmos. É semelhante aos comandos de bloco table
ou figure
, que você envolve em sua tabela/figura para fornecer um número e evitar que ela seja dividida em duas páginas. Odocumentaçãodiz:
Quando colocados dentro do texto sem serem encapsulados em um ambiente flutuante,
algorithmic
os ambientes podem ser divididos no limite da página, prejudicando bastante sua aparência. Além disso, é útil ter algoritmos numerados para referência e para que listas de algoritmos sejam anexadas à lista de conteúdos. Oalgorithm
ambiente destina-se a resolver essas preocupações, fornecendo um ambiente flutuante para algoritmos.
Exemplo:
\begin{algorithm}
\caption{Algorithm caption}
\label{alg:algorithm-label}
\begin{algorithmic}
... Your pseudocode ...
\end{algorithmic}
\end{algorithm}
algorítmico
Este é o ambiente no qual você escreve seu pseudocódigo. Você tem comandos predefinidos para estruturas comuns como if
, while
, procedure
. Todos os comandos estão em letras maiúsculas, por exemplo \IF{cond} ... \ELSE ...
. A documentação1diz:
O
algorithmic
ambiente fornece um ambiente para descrever algoritmos e oalgorithm
ambiente fornece um wrapper “float” para algoritmos (implementado usandoalgorithmic
ou algum outro método à escolha do usuário). A razão para dois ambientes serem fornecidos é permitir ao usuário a máxima flexibilidade.
Exemplo:
\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}
algorítmicox
Este pacote é como algorithmic
atualizado. Ele permite que você defina comandos personalizados, o que algorithmic
não pode ser feito. Então, se você não quiser escrever seus comandos personalizados (malucos), você ficará bem com o algorithmic
. Você usa algorithmicx
da mesma forma que usa algorithmic
, apenas a sintaxe e os detalhes são um pouco diferentes. Veja o exemplo abaixo para obter detalhes. Odocumentaçãodiz:
O pacote algorítmico em si não define nenhum comando algorítmico, mas fornece um conjunto de macros para definir tal conjunto de comandos. Você pode usar apenas algoritmox e definir os comandos você mesmo ou pode usar um dos conjuntos de comandos predefinidos
Exemplo:
\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}
algpseudocódigo
Este é apenas um layout algorithmicx
que tenta ser o mais semelhante possível ao algorithmic
. Existem também outros layouts, como:
algcompatible
(totalmente compatível com o pacote algorítmico),algpascal
(visa criar um programa pascal formatado, você pode transformar um programa pascal em umaalgpascal
descrição de algoritmo com algumas regras básicas de substituição).algc
(assim como o algpascal, mas para c. Este layout está incompleto).
Odocumentaçãodiz:
Se você estiver familiarizado com o pacote algorítmico, será fácil mudar. Você pode usar os algoritmos antigos com o
algcompatible
layout, mas use oalgpseudocode
layout para novos algoritmos. Para usaralgpseudocode
, basta usar\usepackage{algpseudocode}
.Você não precisa carregar oalgorithmicx
pacote manualmente, pois isso é feito peloalgpseudocode
.
Veja o exemplo de algorithmicx
, ele usa o algpseudocode
layout.
algoritmo2e
Este é outro ambiente de algoritmo como algorithmic
ou algorithmicx
. Odocumentaçãodiz:
Algorithm2e é um ambiente para escrever algoritmos em LaTeX2e. An
algorithm
é definido como um objeto flutuante como figuras. Ele fornece macros que permitem criar diferentes tipos de palavras-chave, portanto, é fornecido um conjunto de palavras-chave predefinidas. Você também pode alterar a tipografia das palavras-chave.
Exemplo:
\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}
Responder2
- encontrei o recente
algpseudocodex
pacoteser um bom passo para uma unificação da variedade dealgorithm*
embalagens. - Esse pacote combina muito bem alguns recursos (por exemplo, genericidade, modelagem)
algorithmicx
e o layout enxuto doalgorithm2e
, ou seja, as linhas de escopo verticais.