[Tex/LaTex] Algorithmic package in two different languages in same document

algorithmiclanguages

I need to write both in French and English in my document (for reasons).

And I need to write algorithms in both languages, using the algorithmic package.

Is it possible ?

If so, how can I do that ?

My setup is simple to include these

\usepackage{algorithm}

\usepackage{algorithmic}

and I write algorithms like this:

\begin{algorithm}

 \begin{algorithmic}
  ...
 \end{algorithmic}   

\end{algorithm}

I haven't specified anything about language in my document. So it's in English by default.

Best Answer

The algorithms bundle provides the user with the flexibility to change things to suit their needs, albeit somewhat manually. To that end, I suggest creating a language-specific environment to manage the languages you're using, say frenchalgorithm and englishalgorithm:

enter image description here

\documentclass{article}

\usepackage{algorithm,algorithmic,lipsum}
\usepackage[T1]{fontenc}

\usepackage[french,english]{babel}

\newenvironment{englishalgorithm}[1][]
  {\begin{algorithm}[#1]
     \selectlanguage{english}%
     \floatname{algorithm}{Algorithm}%
     \renewcommand{\algorithmicif}{\textbf{if}}%
     \renewcommand{\algorithmicthen}{\textbf{then}}%
     \renewcommand{\algorithmicend}{\textbf{end}}%
     % Set other language requirements
  }
  {\end{algorithm}}
\newenvironment{frenchalgorithm}[1][]
  {\begin{algorithm}[#1]
     \selectlanguage{french}%
     \floatname{algorithm}{Algorithme}%
     \renewcommand{\algorithmicif}{\textbf{si}}%
     \renewcommand{\algorithmicthen}{\textbf{alors}}%
     \renewcommand{\algorithmicend}{\textbf{fin}}%
     % Set other language requirements
  }
  {\end{algorithm}}

\begin{document}

\lipsum[1]

\begin{englishalgorithm}[H]
  \caption{An algorithm}
  \begin{algorithmic}[1]
    \STATE This is a statement
    \IF{abc}
      \STATE This is another statement
    \ENDIF
  \end{algorithmic}
\end{englishalgorithm}

\begin{frenchalgorithm}[H]
  \caption{Another algorithm}
  \begin{algorithmic}[1]
    \STATE This is a statement
    \IF{abc}
      \STATE This is another statement
    \ENDIF
  \end{algorithmic}
\end{frenchalgorithm}

\lipsum[2]

\end{document}

You'd have to define each of the translated keywords manually. The same would go if you were using the algorithmicx package.

More about the above changes is briefly discussed in sections 3.14.3 Customization and 4.4 Customization of the algorithms documentation. I don't speak French...