我有一个重新编码该语言的宏:
\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}