将 csname 与 \addto\captions[language]{} 结合使用

将 csname 与 \addto\captions[language]{} 结合使用

描述了使用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”。americancaptionsamerican

只有在此之后才\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}

在此处输入图片描述

相关内容