Define a control sequence \appendroman with three parameters such that \appendroman#1#2#3 defines control sequence #1 to expand to a control sequence whose name is the name of control sequence #2 followed by the value of the positive integer #3 expressed in roman numerals. For example, suppose \count20 equals 30; then \appendroman\a\TeX{\count20} should have the same e ect as \def\a{\TeXxxx} .
在第 2 版和第3 版有两次勘误:
第二版改为:
\def\appendroman#1#2#3{\edef#1{\def\noexpand#1{\csname
这个显然少印了一部分。
第三版改为
\def\appendroman#1#2#3{\edef#1{\csname
\expandafter\gobble\string#2\romannumeral#3\endcsname}}
所以其实算是只改了一次。以后直到“Millennium Edition”也没有 修改过。
其实这个第三版修改之后的答案仍然是错误的。我们可以用以下这个 例子来证明:
\input manmac
\def\gobble#1{}
% two definitions
\def\appendromanwrong#1#2#3{\edef#1{\csname
\expandafter\gobble\string#2\romannumeral#3\endcsname}}
\def\appendromancorrect#1#2#3{%
\expandafter\def\expandafter#1\expandafter{%
\csname\expandafter\gobble\string#2\romannumeral#3\endcsname}}
% test case
\count20=30
\def\TeXxxx{Orinial definition for TeXxxx}
\appendromanwrong\awrong\TeX{\count20}
$\meaning\awrong$
\awrong
\appendromancorrect\acorrect\TeX{\count20}
$\meaning\acorrect$
\acorrect
\bigskip
After a redefinition for |\TeXxxx|:
\def\TeXxxx{Modified definition for TeXxxx}
\awrong
\acorrect
\bye
这个例子证明,第3版的答案定义的 \appendroman 实际上使得 当 \count20 存放的书是 30 时,
\appendroman\a\TeX{\count20}
跟 \edef\a{\TeXxxx} 有同样的效果,而不是跟 \def\a{\TeXxxx} 有同样的效果。
更正后的答案才是正确的。