如果我想使用该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}
...
}
另请参阅多语言类别/样式文件?