# What is the right way to redefine macros defined by babel?

If I want to use the babel package and redefine a macro such as \contentsname, what is the right way to go about this? Just putting \renewcommand in the preamble doesn't work.

This sort of works

\documentclass{article}
\usepackage[english]{babel}
\AtBeginDocument{%
\renewcommand\contentsname{Foo}%
}
\begin{document}
% \selectlanguage{english}
\tableofcontents
\end{document}


but if you uncomment the \selectlanguage{english}, the definition is undone.

The best I could come up with is to use the following.

\usepackage{etoolbox}
\patchcmd\captionsenglish{Contents}{Foo}{}{}

-
possible duplicate of Multilingual class/style file? –  TH. Jan 9 '11 at 14:44

Use \addto\captionsenglish.

\documentclass{article}
\usepackage[english]{babel}
\renewcommand\contentsname{Foo}%
}
\begin{document}
\selectlanguage{english}% For testing purposes
\tableofcontents
\end{document}


EDIT: See e.g p. 78 of the babel documentation, where the definitions are changed for the Esperanto language (\addto\captionsesperanto).

-
Thanks! I missed that in the manual. –  TH. Jan 9 '11 at 14:41

Babel provides hooks for this sort of redefinitions as follows, if for example you wish to hook onto the greek option you add captions such as:

\addto\captionsgreek{
\def\contentsname{prologos}
}


You need to do the same for english

\addto\captionsenglish{%
\def\contentsname{Foo}
...
}


Also see Multilingual class/style file?

-
Yikes. My question is an exact duplicate. This should be closed. –  TH. Jan 9 '11 at 14:43