\documentclass{article} \begin{document} \copyright\ \uppercase{\romannumeral\year} \\\ \copyright\ \uppercase\expandafter{\romannumeral\year} \end{document} 为什么第二个语句加上 \expandafter 后才获得了大写的效果?下面是运行结果。 ![](https://wenda.latexstudio.net/data/attach/190917/DZYTe5X0.png)

2 回答2

6
如果我没有理解错的话,涉及到宏的展开问题,`\uppercase`和`\lowercase`后面的参数默认是没有展开的,也就是说输入`\uppercase{\romannumeral\year}`的时候,`\uppercase`的参数是字符`\romannumeral\year`而不是这个宏的展开结果`mmxix`。 而`\expandafter`这个命令,从字面意思应该可以猜出来是在某某之后展开,所以输入`\uppercase\expandafter{\romannumeral\year}`的时候,\expandafter首先碰到字符`{`,这个字符暂时搁置,先展开`{`之后的命令`\romannumeral\year`得到了`mmxix`,然后`mmxix`就成为了`\uppercase`的参数,因此得到了大写的效果`MMXIX`。 再举个例子`\uppercase\expandafter{a\romannumeral\year}`得到的是`Ammxix`,原因就是只有`{`后面的字符`a`被展开了,而`a`的存在阻止了`\romannumeral\year`的展开,但是输入`\uppercase\expandafter{\expandafter a\romannumeral\year} `的话,你发现又得到了大写,因为第二个`\expandafter`把后面的宏给展开了。
1
麻烦你自己看看 `latex2e.pdf` 的 `sec 23.2`

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。