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 poderei “t adicionar algorithmic
porque já está incluído no .
Há alguma orientação definitiva para uma abordagem simplificada? Qualquer sugestão será apreciada.
Comentários
-
algpseudocode
faz parte doalgorithmicx
pacote, oferece uma versão aprimorada dealgorithmic
além de fornecer alguns outros recursos. - Relacionado: Programas de impressão com sua sintaxe apropriada
Resposta
TL; Versão DR:
- algoritmo – wrapper flutuante para algoritmos.
- algorítmico – primeiro ambiente de composição de algoritmo.
- algorítmicox – segundo algoritmo de digitação ambiente ng.
- algpseudocode – layout para
algorithmicx
. - algorítmico – terceiro ambiente de composição de algoritmo.
Eu uso algorithmicx
com algpseudocode
, pois 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 torno de sua tabela / figura para dar um número e evitar que seja dividido em duas páginas. A documentação diz:
Quando colocado dentro do texto sem ser encapsulado em um flutuante ambiente
algorithmic
ambientes podem ser divididos em um limite de página, prejudicando bastante sua aparência. Além disso, é útil ter algoritmos numerados para referência e para listas de algoritmos a serem anexados à lista de conteúdo. O ambientealgorithm
visa atender a 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ção 1 diz:
O
algorithmic
fornece um ambiente para descrever algoritmos e o ambientealgorithm
fornece um wrapper “float” para algoritmos (implementado usandoalgorithmic
ou algum outro método à escolha do usuário). O motivo para a oferta de dois ambientes é permitir ao usuário flexibilidade máxima.
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ítmico
Este pacote é como algorithmic
atualizado. Ele permite que você defina comandos personalizados, o que é algo algorithmic
não pode “fazer. Portanto, se você não quiser escrever seus (malucos) comandos personalizados, não terá problemas com algorithmic
. Você usa algorithmicx
da mesma forma que usa algorithmic
, apenas a sintaxe e os detalhes são ligeiramente diferentes. Veja o exemplo abaixo para detalhes. A documentação diz:
O pacote algorítmico em si não define nenhum comando algorítmico , mas fornece um conjunto de macros para definir esse conjunto de comandos. Você pode usar apenas o algorítmico 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}
algpseudocode
Este é apenas um layout para algorithmicx
que tenta ser o mais semelhante possível a 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).
O documentação diz:
Se você estiver familiarizado com o pacote algorítmico, então o encontrará fácil de mudar. Você pode usar os algoritmos antigos com o layout
algcompatible
, mas use o layoutalgpseudocode
para novos algoritmos. Para usaralgpseudocode
, basta usar\usepackage{algpseudocode}
. Você não precisa carregar manualmente o pacotealgorithmicx
, pois isso é feito poralgpseudocode
.
Veja o exemplo para algorithmicx
, ele usa o layout algpseudocode
.
algorítmico
Este é outro ambiente de algoritmo como algorithmic
ou algorithmicx
. A documentação diz:
Algorithm2e é um ambiente para escrever algoritmos em LaTeX2e. Um
algorithm
é definido como um objeto flutuante como figuras. Ele fornece macros que permitem criar diferentes tipos de palavras-chave, portanto, um conjunto de palavras-chave predefinidas é fornecido. 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}
algorithmicx
"? Sua discussão é muito clara sobre por que e se preferealgorithmicx
aalgorithmic
, mas não ' oferece muita comparação comalgorithm2e
. É porque você está menos familiarizado com ele, porque é sabido que ele é inferior ou alguma outra coisa?algorithm2e
. Acho que eles deveriam oferecer funcionalidade semelhante, mas prefiro a sintaxe dealgorithmicx
. Editei minha resposta para deixar claro que é apenas minha preferência (subjetiva).algorithmicx
, entendo que você ainda terá que carregaralgorithm
também?algorithmicx
, não ' obtenha imediatamente quealgpseudocode
também deve ser carregado para usar o pacote. Talvez eu ' seja o único que passou por isso, caso contrário, poderia ser adicionado em algum lugar.