TeX

对TeX的 \uppercase 的疑惑?

2019-09-17 22:01发布

\documentclass{article} \begin{document} \copyright\ \uppercase{\romannumeral\year} \\\ \copyright\ ...

\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条回答
TvZ8lPRVOT8C
2019-09-18 10:34
如果我没有理解错的话,涉及到宏的展开问题,`\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`把后面的宏给展开了。

一周热门 更多>