Estoy confundido acerca de los paquetes para escribir «algoritmos» simples. Hay demasiadas opciones y resulta confuso cuándo usar qué. Por ejemplo, si utilizo algpseudocode
, no puedo «agregar algorithmic
porque ya está incluido en el algorithm
paquete.
¿Existe alguna guía definitiva para un enfoque simplificado? Cualquier sugerencia será apreciada.
Comentarios
-
algpseudocode
es parte del paquetealgorithmicx
, le brinda una versión mejorada dealgorithmic
además de proporcionar algunas otras características. - Relacionado: Imprimir programas con su sintaxis adecuada
Respuesta
TL; Versión de DR:
- algoritmo – contenedor flotante para algoritmos.
- algorítmico – primer entorno de composición tipográfica de algoritmo.
- algorítmicox – segundo algoritmo typesetti ng entorno.
- algpseudocode – diseño para
algorithmicx
. - algoritmom2e – tercer entorno de composición tipográfica del algoritmo.
Utilizo algorithmicx
con algpseudocode
ya que son superiores a algorithmic
. Creo que algorithmicx
ofrece la misma funcionalidad en comparación con algorithm2e
, pero encuentro su sintaxis más clara que la proporcionada por algorithm2e
.
Versión detallada
algoritmo
Contenedor flotante para algoritmos. Es similar a los comandos de bloque table
o figure
, que envuelve tu tabla / figura para darle un número y evitar que sea dividido en dos páginas. La documentación dice:
Cuando se coloca dentro del texto sin estar encapsulado en un entorno
algorithmic
los entornos pueden dividirse en el límite de una página, lo que perjudica enormemente su apariencia. Además, es útil tener algoritmos numerados como referencia y para que se añadan listas de algoritmos a la lista de contenidos. El entornoalgorithm
está destinado a abordar estas preocupaciones al proporcionar un entorno flotante para los algoritmos.
Ejemplo:
\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm}
algorítmico
Este es el entorno en el que escribe su pseudocódigo. Tiene comandos predefinidos para estructuras comunes como if
, while
, procedure
. Todos los comandos están en mayúscula, p. Ej. \IF{cond} ... \ELSE ...
. La documentación 1 dice:
El
algorithmic
proporciona un entorno para describir algoritmos y el entornoalgorithm
proporciona un contenedor «flotante» para los algoritmos (implementado conalgorithmic
o algunos otro método a elección del usuario). La razón por la que se proporcionan dos entornos es permitir al usuario la máxima flexibilidad.
Ejemplo:
\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 paquete es como algorithmic
actualizado. Le permite definir comandos personalizados, que es algo que algorithmic
no puede «hacer. Por lo tanto, si no quiere escribir sus (locos) comandos personalizados, estará bien con algorithmic
. Usa algorithmicx
de la misma manera que usa algorithmic
, solo que la sintaxis y los detalles son ligeramente diferentes. Consulte el ejemplo a continuación para obtener más detalles. La documentación dice:
El paquete algorítmico en sí no define ningún comando algorítmico. , pero proporciona un conjunto de macros para definir dicho conjunto de comandos. Puede usar sólo algorítmicox y definir los comandos usted mismo, o puede usar uno de los conjuntos de comandos predefinidos
Ejemplo:
\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 es solo un diseño para algorithmicx
que intenta ser lo más similar posible a algorithmic
. También hay otros diseños, como:
-
algcompatible
(totalmente compatible con el paquete algorítmico), -
algpascal
(tiene como objetivo crear un programa pascal formateado, puede transformar un programa pascal en unaalgpascal
descripción de algoritmo con algunas reglas básicas de sustitución). -
algc
(igual que el algpascal, pero para c. Este diseño está incompleto).
El documentación dice:
Si está familiarizado con el paquete algorítmico, lo encontrará fácil de cambiar. Puede utilizar los algoritmos antiguos con el diseño
algcompatible
, pero utilice el diseñoalgpseudocode
para los nuevos algoritmos. Para usaralgpseudocode
, simplemente use\usepackage{algpseudocode}
. No es necesario que cargue manualmente el paquetealgorithmicx
, ya quealgpseudocode
.
Vea el ejemplo de algorithmicx
, usa el diseño algpseudocode
.
algorítmm2e
Este es otro entorno de algoritmos como algorithmic
o algorithmicx
. La documentación dice:
Algorithm2e es un entorno para escribir algoritmos en LaTeX2e. Un
algorithm
se define como un objeto flotante como figuras. Proporciona macros que le permiten crear diferentes tipos de palabras clave, por lo que se proporciona un conjunto de palabras clave predefinidas. También puede cambiar la tipografía de las palabras clave.
Ejemplo:
\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
"? Su discusión es muy clara acerca de por qué y si preferiralgorithmicx
aalgorithmic
, pero no ' t ofrece mucha comparación conalgorithm2e
. ¿Se debe a que está menos familiarizado con él, porque se sabe que es inferior o es algo más?algorithm2e
. Creo que deberían ofrecer una funcionalidad similar, pero prefiero la sintaxis dealgorithmicx
. Edité mi respuesta para dejar en claro que es solo mi preferencia (subjetiva).algorithmicx
, entiendo que aún tiene que cargaralgorithm
¿también?algorithmicx
, no lo hice ' t obtienes inmediatamente quealgpseudocode
también debe cargarse para poder usar el paquete. Quizás yo ' soy el único que experimentó eso, de lo contrario, podría agregarse en alguna parte.