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

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 ambiente algorithm 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 ambiente algorithm fornece um wrapper “float” para algoritmos (implementado usando algorithmic 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:

  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 algpascal descrição de algoritmo com algumas regras básicas de substituição).
  3. 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 layout algpseudocode para novos algoritmos. Para usar algpseudocode, basta usar \usepackage{algpseudocode}. Você não precisa carregar manualmente o pacote algorithmicx, pois isso é feito por algpseudocode.

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} 

Comentários

  • Uma resposta adorável e detalhada! Parece que a versão TL; DRTL; DR é: " use algorithmicx "? Sua discussão é muito clara sobre por que e se prefere algorithmicx a algorithmic, mas não ' oferece muita comparação com algorithm2e. É porque você está menos familiarizado com ele, porque é sabido que ele é inferior ou alguma outra coisa?
  • Sim, você está certo: não estou muito familiarizado com algorithm2e. Acho que eles deveriam oferecer funcionalidade semelhante, mas prefiro a sintaxe de algorithmicx. Editei minha resposta para deixar claro que é apenas minha preferência (subjetiva).
  • Mesmo se você carregar algorithmicx, entendo que você ainda terá que carregar algorithm também?
  • Resposta extensa! Para uma decisão rápida, pode ser útil incluir imagens das saídas compiladas para cada pacote
  • Quando li a seção sobre algorithmicx, não ' obtenha imediatamente que algpseudocode 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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *