在 LaTeX2e 中仍然保留了 Plain TeX 宏的残余。其中一个宏是\newhelp
,其定义如下:
\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
这在“source2e”的任何地方都没有使用,但仍在某些包中使用,例如“doc”。
为什么宏要放在构造#2
中\csname
?有什么好处?我记得在某处读到过这样可以节省内存。它是如何节省内存的?
答案1
教科书上说
A ^|\newhelp| macro has been provided to aid in creating home-made help
texts: You can say, e.g., |\newhelp\helpout{This is a help message.}|, and
then give the command `^|\errhelp||=\helpout|' just before issuing an
^|\errmessage|. This method of creating help texts makes efficient
use of \TeX's ^{memory}, because it puts the text into a control sequence
name where it doesn't take up space that is needed for tokens.
也就是说:它节省内存,因为\this-is-help
是一个单个标记,并且名称是字符串池中的字符串,所以每个字符一个字节,但是{this is help}
有 12 个标记,其中包含 catcodes 等额外的负担。