为什么这个 \gappto 会导致“缺少 \endcsname 插入”?

为什么这个 \gappto 会导致“缺少 \endcsname 插入”?

我有一个重新编码该语言的宏:

\def\mylang{English}

以及将语言名称转换为其缩写的命令:

\NewDocumentCommand{\StrToABBR}{m}{%
    \expandafter\lowercase{\IfStrEqCase{#1}}{%
        {english}{EN}%
    }%
}

然后有一个宏,其名称以缩写结尾:

\def\mymacroEN{}

我想在最后一个宏中添加一些文本,如下所示:\gappto{\csname mymacro\StrToABBR{\mylang}\endcsname}{...}。当然需要对扩展进行一些控制,因此我添加了一些\expandafter

\expandafter\gappto\expandafter{\csname mymacro\expandafter\StrToABBR\expandafter{\mylang}\endcsname}{Some English text}

但这会导致错误Missing \endcsname inserted

在写当前问题时,我看到这个问题,并认为这个问题可能是由于使用 造成的\lowercase。然而,即使我删除它并\StrToABBR改成

\NewDocumentCommand{\StrToABBR}{m}{%
    \IfStrEqCase{#1}{%
        {English}{EN}%
    }%
}

错误仍然存​​在。这里出了什么问题?我该如何修复此问题?


下面是 MWE。

\documentclass{article}

\usepackage{etoolbox,xstring}

\NewDocumentCommand{\StrToABBR}{m}{%
    \expandafter\lowercase{\IfStrEqCase{#1}}{%
        {english}{EN}%
    }%
}

% \NewDocumentCommand{\StrToABBR}{m}{%
%     \IfStrEqCase{#1}{%
%         {English}{EN}%
%     }%
% }

\def\mymacroEN{}
\def\mylang{English}

\begin{document}

% EN
\StrToABBR{English}
% EN
\expandafter\StrToABBR\expandafter{\mylang}

% Works: Some English text
% \expandafter\gappto\expandafter{\csname mymacroEN\endcsname}{Some English text}

% Doesn't work
\expandafter\gappto\expandafter{\csname mymacro\expandafter\StrToABBR\expandafter{\mylang}\endcsname}{Some English text}

\mymacroEN

\end{document}

相关内容