Versão TL;DR:

Versão TL;DR:

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 algorithmicporque já está incluso no algorithmpacote.

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 algorithmicxwith algpseudocodeporque eles são superiores a algorithmic. Acho que algorithmicxoferece 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 tableou 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, algorithmicos 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. O algorithm 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 algorithmicambiente fornece um ambiente para descrever algoritmos e o algorithmambiente fornece um wrapper “float” para algoritmos (implementado usando algorithmicou 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 algorithmicatualizado. Ele permite que você defina comandos personalizados, o que algorithmicnão pode ser feito. Então, se você não quiser escrever seus comandos personalizados (malucos), você ficará bem com o algorithmic. Você usa algorithmicxda 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 algorithmicxque tenta ser o mais semelhante possível ao algorithmic. Existem também outros layouts, como:

  1. algcompatible(totalmente compatível com o pacote algorítmico),
  2. algpascal(visa criar um programa pascal formatado, você pode transformar um programa pascal em uma algpascaldescrição de algoritmo com algumas regras básicas de substituição).
  3. 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 algcompatiblelayout, mas use o algpseudocodelayout para novos algoritmos. Para usar algpseudocode, basta usar \usepackage{algpseudocode}.Você não precisa carregar o algorithmicxpacote manualmente, pois isso é feito pelo algpseudocode.

Veja o exemplo de algorithmicx, ele usa o algpseudocodelayout.


algoritmo2e

Este é outro ambiente de algoritmo como algorithmicou 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 recentealgpseudocodexpacoteser um bom passo para uma unificação da variedade de algorithm*embalagens.
  • Esse pacote combina muito bem alguns recursos (por exemplo, genericidade, modelagem) algorithmicxe o layout enxuto do algorithm2e, ou seja, as linhas de escopo verticais.

insira a descrição da imagem aqui (O exemplo foi retirado do manual.)

informação relacionada