3

Under Ubuntu 15.04, I want to use algorithm2e to write pseudo code, when I copied an example from the documentation, TeXStudio displays error indicating that the command \Fn is undefined. I thought that the package might be outdated so I run an update over texlive-science

sudo apt-get install texlive-science

but it shows that texlive-science is already the newest version. Is it not updated in Ubuntu repositories? If so, how can I update algorithm2e to the lasted version?

  • Please show as as minimal as possible (but compilable), how you are provoking that error. And please add \listfiles to your preamble and read out the version numbers of interesting packages from your .log-file. Thanks. – LaRiFaRi Jun 9 '15 at 14:40
  • The algorithm2e documentation defines \Fn as the following: \SetKwProg{Fn}{def}{\string:}{} (for Algorithm 6). – Werner Jun 9 '15 at 14:51
  • @Werner, I used example in section 4. – Nasreddine Jun 9 '15 at 14:55
2

You can find the required definition of \Fn in the algorithm2e documentation code. It's defined using \SetKwProg.

The generic algorithm is prefixed with the following definitions:

\SetKwProg{Fn}{Function}{}{end}\SetKwFunction{FRecurs}{FnRecursive}%
\newcommand{\forcond}{$i=0$ \KwTo $n$}

enter image description here

\documentclass{article}

\usepackage{algorithm2e}
\newcommand{\forcond}{$i=0$ \KwTo $n$}
\SetKwProg{Fn}{Function}{}{end}\SetKwFunction{FRecurs}{FnRecursive}%
\SetAlgoLongEnd

\begin{document}

\begin{algorithm}
  \Fn(\tcc*[h]{algorithm as a recursive function}){\FRecurs{some args}}{
    \KwData{Some input data\\these inputs can be displayed on several lines and one 
      input can be wider than line's width.}
    \KwResult{Same for output data}
    \tcc{this is a comment to tell you that we will now really start code}
    \If(\tcc*[h]{a simple if but with a comment on the same line}){this is true}{
      we do that, else nothing\;
      \tcc{we will include other if so you can see this is possible}
      \eIf{we agree that}{
        we do that\;
      }{
        else we will do a more complicated if using else if\;
        \uIf{this first condition is true}{
          we do that\;
        }
        \uElseIf{this other condition is true}{
          this is done\tcc*[r]{else if}
        }
        \Else{
          in other case, we do this\tcc*[r]{else}
        }
      }
    }
    \tcc{now loops}
    \For{\forcond}{
      a for loop\;
    }
    \While{$i<n$}{
      a while loop including a repeat--until loop\;
      \Repeat{this end condition}{
        do this things\;
      }
    }
    They are many other possibilities and customization possible that you have to
    discover by reading the documentation.
  }
\end{algorithm}

\end{document}

For other parts of the documentation, it redefined \Fn to display something else (depending on the output requirements).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.