12

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}{}{}
1

2 Answers 2

11

Use \addto\captionsenglish.

\documentclass{article}
\usepackage[english]{babel}
\addto\captionsenglish{%
  \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).

0
4

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?

1
  • Yikes. My question is an exact duplicate. This should be closed.
    – TH.
    Commented Jan 9, 2011 at 14:43

You must log in to answer this question.

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