20

I have this algorithm:

\begin{algorithm}
\captionsetup[algorithm]{name=MegaAlgorithm}

\DontPrintSemicolon
\KwData{$G=(X,U)$ such that $G^{tc}$ is an order.}
\KwResult{$G’=(X,V)$ with $V\subseteq U$ such that $G’^{tc}$ is an
interval order.}

\caption{\textsc{Fast}SLAM\label{IR}}
\end{algorithm}

Using these packages:

\usepackage{caption}
\usepackage[ruled,vlined]{algorithm2e}

But the label name of my algorihm is still 'Algorithm 1: FastSLAM' instead of 'MegaAlgorithm 1: FastSLAM'. How to do that?

3
  • I think you need to recompile yoor source several times to overwrite *.aux and other files. Commented Mar 26, 2013 at 17:52
  • I'm using rm *.ps *.log *.aux *.dvi in my Makefile. So *.aux files should be overwriten. Commented Mar 26, 2013 at 18:02
  • 2
    \captionsetup[algorithm]{name=MegaAlgorithm} after \begin{algorithm} is too late since the options declared with \captionsetup[algorithm]{...} will be used at \begin{algorithm}. So try \captionsetup[algorithm]{name=MegaAlgorithm} within your preamble instead, or as an alternative try \captionsetup{name=MegaAlgorithm} after \begin{algorithm}. But since the caption package is not adapted to the algorithm2e package there is a big chance that this will actually not work. Commented Mar 27, 2013 at 6:04

2 Answers 2

21

For the sake of consistency, define a new environment that uses the MegaAlgorithm caption style. Not sure whether you will intermix regular Algorithms and MegaAlgorithms, which this solution is geared towards:

enter image description here

\documentclass{article}
\usepackage[ruled,vlined]{algorithm2e}

\newenvironment{megaalgorithm}[1][htb]
  {\renewcommand{\algorithmcfname}{MegaAlgorithm}% Update algorithm name
   \begin{algorithm}[#1]%
  }{\end{algorithm}}

\begin{document}
\begin{megaalgorithm}
  \DontPrintSemicolon
  \KwData{$G=(X,U)$ such that $G^{tc}$ is an order.}
  \KwResult{$G’=(X,V)$ with $V\subseteq U$ such that $G’^{tc}$ is an interval order.}
  \caption{\textsc{Fast}SLAM}
\end{megaalgorithm}
\begin{algorithm}
  \DontPrintSemicolon
  \KwData{$G=(X,U)$ such that $G^{tc}$ is an order.}
  \KwResult{$G’=(X,V)$ with $V\subseteq U$ such that $G’^{tc}$ is an interval order.}
  \caption{\textsc{Fast}SLAM}
\end{algorithm}
\end{document}

The new megaalgorithm environment redefines \algorithmcfname - the macro used to print the caption type - just before calling the regular algorithm environment. Since the redefinition is within the scope of megaalgorithm, it is localized and reverts back to the default afterwards. This allows you to intermix the different kinds of algorithm types.


If you wish to have a separate counter for MegaAlgorithm and Algorithm, you can use the following definition of megaalgorithm in your preamble:

\makeatletter
\newcounter{megaalgorithm}
\newenvironment{megaalgorithm}[1][htb]
  {\renewcommand{\algorithmcfname}{MegaAlgorithm}% Update algorithm name
   \let\c@algocf\c@megaalgorithm% Update algorithm counter
   \begin{algorithm}[#1]%
  }{\end{algorithm}}
\makeatother
0
11

Its simpler:

With algorithm2e package, solution will be as follows: [ My working copy of algorithm2e.sty is here ]

\usepackage[ruled,vlined]{algorithm2e}
.
.

\begin{algorithm}
 \SetAlgorithmName{MegaAlgorithm}{} %last arg is the title of listing table
   ...
 \caption{How to write algorithm}
\end{algorithm}

Aside, since there is a considerable community using algorithmicx package (especially IEEE authors), here is the solution of the same problem with algorithmicx package:

\usepackage{algorithmicx}
\usepackage[Algorithm,ruled]{algorithm}
.
.

\begin{algorithm}
 \floatname{algorithm}{MegaAlgorithm}
  \begin{algorithmic}
    ...
  \end{algorithmic}
 \caption{How to write algorithm}
\end{algorithm}
1
  • Note that \SetAlgorithmName takes 3 arguments, not 2! (probably recent change? The example in the documentation is also wrong) Commented Feb 19, 2024 at 22:21

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.