26

I'm typesetting an algorithm using the algorithmx package as follows:

\begin{algorithm}
  \caption{\textsc{Whatever}}
  \begin{algorithmic}[1]
  ...
\end{algorithm}

However, I would like it to float like a figure. If I replace \begin{algorithm} with \begin{figure} it does float as I like, however, the caption does not look as pretty any more (I presume it is redefined by a sig-alternate class I am using for the whole document).

Is it possible to have both a nice caption and floating behaviour at the same time?

2
  • 5
    Have you looked into using the float package? Nov 29, 2010 at 14:18
  • Yes, thank you, it does work. I'll put this as an answer.
    – Konstantin
    Nov 29, 2010 at 15:11

3 Answers 3

25

Thanks to Harald's advice I found the following two-line solution to my problem:

\usepackage{float}
\newfloat{algorithm}{t}{lop}

This was sufficient to make all my algorithm blocks to float exactly as I needed them to.

See also: "float" package reference.

1
  • 4
    Add \floatname{algorithm}{Algorithm} to capitalise the float name.
    – badroit
    Nov 11, 2013 at 5:19
11

The LaTeX Wikibook section on algorithms explains this very nicely:

The algorithmicx package provides a number of popular constructs for algorithm designs. Put \usepackage{algpseudocode} in the preamble to use the algorithmic environment to write algorithm pseudocode (\begin{algorithmic}...\end{algorithmic}). You might want to use the algorithm environment (\usepackage{algorithm}) to wrap your algorithmic code in an algorithm environment (\begin{algorithm}...\end{algorithm}) to produce a floating environment with numbered algorithms.

Meaning, you only need to add \usepackage{algorithm} and your code snippet will be rendered as a floating figure.

3

Just importing the float package and keeping the optional float argument makes the algorithm float. E.g.,

\usepackage{float}
...

\begin{algorithm}[t]
  \caption{\textsc{Whatever}}
  \begin{algorithmic}[1]
  ...
\end{algorithm}

Replace [t] with [b] if needed.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .