martes, 23 de octubre de 2012

Pseudocódigo con LaTeX

En LaTeX podemos escribir pequeños algoritmos en pseudocódigo, con el paquete "algpseudocode". A continuación un ejemplo con una sentencia if-else:

\usepackage{algpseudocode}

\begin{algorithmic}
\If{you love me}
    \State{kiss me!}
\ElsIf{you like me}
    \State{kiss me!}
\Else
    \State{kiss me?}
\EndIf
\end{algorithmic}


LaTeX se encarga de poner la negrita, los tabuladores y los "then". Los bucles for y while se pueden hacer también muy fácil, como muestro a continuación. Además, si quieres numerar las líneas, bastaría con poner "[x]" al inicio del algoritmo. Las filas se van numerando de "x" en "x".

\begin{algorithmic}[1]
\For {1000 veces}
    \State{¿Hemos llegado ya?}
\EndFor
\end{algorithmic}


\begin{algorithmic}
\While {te apetezca \textbf{and} tengas tiempo}
    \State{ven a verme}
\EndWhile
\end{algorithmic}




Si quieres meter el código dentro de un cuadro, puedes usar por ejemplo, la función {minipage}, como muestro a continuación:

\noindent\fbox{
\begin{minipage}{0.5\textwidth}
\begin{algorithmic}[1]
\For {1:100}
    \State{kiss me}
\EndFor
\end{algorithmic}
\end{minipage}
}




Otra forma más sencilla de escribir código de programación es usando el paquete {verbatim}. Todo lo que escribamos entre "\begin{verbatim}" y "\end{verbatim}" se mostrará tal cual. Es decir, si ponemos un intro o varios espacios, aparecerán igual en nuestro archivo final. Además, el estilo de la letra es como de máquina de escribir.

\usepackage{verbatim}

\begin{verbatim}
x = 0
FOR i=1:1000
  x = x + i; 
END
\end{verbatim}

5 comentarios:

Pacho dijo...

Existe alguna forma de encerrar en un cuadro el pseudo-código como en el caso \begin{lstlisting}[frame=single]?

Luis dijo...

Hola Francisco,

se puede hacer con minipage y parbox. Acabo de modificar la entrada mostrando cómo.

Hasta luego

Pacho dijo...

Muchas gracias Luis. Excelente ayuda este blog...

Yo, por mi parte hice lo siguiente:

\begin{algorithm}
\caption{Algoritmo bonito}
\label{Alg1}
\begin{algorithmic}[1]
\State $ \mathbf{K}_{rows} $
\For {each element $ e $ in $ nel
\EndFor
\end{algorithmic}
\end{algorithm}

Queda muy bonito, se puede referenciar, numerar, etc

Luis dijo...

Hola Francisco, genial. Muchas gracias.

Ray Camarena dijo...

Estimados, no encuentro como y donde bajar ese paquete,