重新定义 babel 定义的宏的正确方法是什么?

重新定义 babel 定义的宏的正确方法是什么?

如果我想使用该babel包并重新定义一个宏(例如)\contentsname,正确的做法是什么?只添加\renewcommand序言是行不通的。

这种工作

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

但是如果取消注释\selectlanguage{english},定义就会被撤消。

我能想到的最好的办法是使用以下命令。

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

答案1

使用\addto\captionsenglish

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

编辑:参见 babel 文档第 78 页,其中针对世界语 ( \addto\captionsesperanto) 的定义进行了更改。

答案2

Babel为这种重新定义提供钩子,如下所示,例如,如果您希望钩住希腊语选项,您可以添加如下标题:

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

你需要对英语做同样的事情

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

另请参阅多语言类别/样式文件?

相关内容