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}{}{}
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).

| improve this answer | |
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?

| improve this answer | |
  • Yikes. My question is an exact duplicate. This should be closed. – TH. Jan 9 '11 at 14:43

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.