我在类文件(我们内部使用)中看到了以下定义:
\newcommand{\@TitleBackground}{default}
\newcommand{\titlebackground}{\renewcommand{\@TitleBackground}}
这提供了\titlebackground
更改的命令\@TitleBackground
,但它是如何/为什么工作的?如果第二行是
\newcommand{\titlebackground}[1]{\renewcommand{\@TitleBackground}{#1}}
但是为什么它在没有参数的情况下也可以工作,即\renewcommand
只有一个参数?
较短版本与较长版本相比有哪些优点或缺点?
答案1
使用时,处理
\newcommand{\titlebackground}{\renewcommand{\@TitleBackground}}
时会发生以下情况:被其扩展替换,因此 TeX 将从 重新启动\titlebackground{whatever}
\titlebackground
\renewcommand{\@TitleBackground}{whatever}
并最终做到了\def\@TitleBackground
。
使用\newcommand{\titlebackground}[1]{\renewcommand{\@TitleBackground}{#1}}
,在找到 后,\titlebackground{whatever}
TeX 将开始扩展\titlebackground
;由于现在这是一个带有参数的宏,TeX 会吸收它并\titlebackground{whatever}
用替换文本替换整个内容,从而得到
\renewcommand{\@TitleBackground}{whatever}
和以前一样。所以不同之处在于,在第二种情况下,{whatever}
与第一种版本相比,它更多地被视为一个参数。
差别可以忽略不计。在我的计算机上,执行第二种情况中的作业一百万次所需的时间比第一种方式长 1/100 秒。