宏定义另一个名称中带有空格的宏

宏定义另一个名称中带有空格的宏

我正在尝试使用 KOMA-Script 命令\newcaptionname,该命令以宏名作为其第二个参数,但我需要其中的空格:

\documentclass{scrartcl}

\newcaptionname{english}{\namewithoutspaces}{With spaces.}
\newcaptionname{english}{\csname name with spaces\endcsname}{Without Spaces} % fails

\usepackage[english]{babel}

\begin{document}
    \namewithoutspaces

    \csname name with spaces\endcsname
\end{document}

\namewith定义正确,但显然 的定义\csname name with spaces\endcsname失败。我知道这与扩展有关,但我认为我仍然没有完全理解这个概念(以及所有相关命令,如\expandafter\noexpand\edef、...)。

我应该如何修改

\newcaptionname{english}{\csname name with spaces\endcsname}{Without Spaces}

让它工作?

答案1

很难理解为什么你需要这个,但是

\documentclass{scrartcl}

\newcaptionname{english}{\namewithoutspaces}{With spaces.}
\def\tmp{\newcaptionname{english}}
\expandafter\tmp\csname name with spaces\endcsname{Without Spaces} % works

\usepackage[english]{babel}

\begin{document}
    \namewithoutspaces

    \csname name with spaces\endcsname
\end{document}

相关内容