我希望能够做到这一点:
\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}