如何创建具有数字名称的命令?

如何创建具有数字名称的命令?

我希望能够做到这一点:

\make{6}{hello!}

它应该变成(vi罗马数字六):

\ifcsname foovi\else
  \newcommand\foovi{}
\fi
\gappto\foovi{hello!}

我正在这样做:

\documentclass{article}
\usepackage{etoolbox}
\begin{document}
\newcommand\make[2]{
  \ifcsname make\romannumeral{#1}\endcsname\else
    \expandafter\newcommand\csname make\romannumeral{#1}\endcsname{}
  \fi
  \gappto\csname make\romannumeral{#1}\endcsname{#2}
}
\make{6}{hello!}
\makevi
\end{document}

我越来越:

! Missing number, treated as zero.
<to be read again>
                   {
l.10 \make{6}{hello!}

怎么了?

答案1

TeX 要求在 后面有一个 <number> \romannumeral,因此不允许使用括号。此外,\expandafter需要一个\gappto

\documentclass{article}
\usepackage{etoolbox}
\begin{document}

\newcommand\make[2]{%
    \ifcsname make\romannumeral#1\endcsname\else
        \expandafter\let\csname make\romannumeral#1\endcsname\empty
    \fi
    \expandafter\gappto\csname make\romannumeral#1\endcsname{#2}%
}

\make{6}{hello!}
\make{4}{foo}
\make{4}{bar}

\makevi\ \makeiv % hello! foobar

\end{document}

相关内容