描述了使用babel
包装时更改内容名称的方法
这里。
根据链接中包含的答案,可以使用以下代码:
\documentclass{article}
\usepackage[american]{babel}
\addto\captionsamerican{%
\renewcommand{\contentsname}%
{newContentsName}%
}
\begin{document}
\tableofcontents
\section{Section}
\subsection{Subsection}
\end{document}
如果我想使用语言变量,我想我可以做以下调整:
\documentclass{article}
\newcommand{\xLanguage}{american} % <-- Added this command
\usepackage[\xLanguage]{babel} % <-- Implemented here
\addto\csname captions\xLanguage\endcsname{% <-- and here
\renewcommand{\contentsname}%
{newContentsName}%
}
\begin{document}
\tableofcontents
\section{Section}
\subsection{Subsection}
\end{document}
但这不起作用。
我的方法正确吗?
答案1
\csname captions\xLanguage\encsname
必须先进行扩展,然后\addto
才能使用‘真实’命令序列名称,即\expandafter
之前需要一个\addto
。
在 OP 示例中,必须先扩展ie captions\xLanguage
才能得到 的内容\xLanguage
,这样就可以用于“\csname ...\endcsname”。american
captionsamerican
只有在此之后才\addto\captionsamerican{...}
最终可用。
\newcommand
这与从宏名或参数等 构造宏等所需的代码相同,即\expandafter\newcommand\csname foo\otherfoobar\endcsname{My foo content}
,其中\otherfoobar
包含允许作为\newcommand
定义的宏名的“任何”标记。
\documentclass{article}
\newcommand{\xLanguage}{ngerman} % <-- Added this command
\usepackage[\xLanguage]{babel} % <-- Implemented here
\expandafter\addto\csname captions\xLanguage\endcsname{% <-- and here
\renewcommand{\contentsname}%
{Verzeichnisse der tollen Inhalte}%
}
\begin{document}
\tableofcontents
\section{Section}
\subsection{Subsection}
\end{document}
答案2
我不确定这种方法是否有用,但您可以使用etoolbox
:
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\xLanguage}{american} % <-- Added this command
\usepackage[\xLanguage]{babel} % <-- Implemented here
\csappto{captions\xLanguage}{% <-- and here
\renewcommand{\contentsname}%
{newContentsName}%
}
\begin{document}
\tableofcontents
\section{Section}
\subsection{Subsection}
\end{document}