为什么 \newhelp toks 在其定义中使用 \csname 构造?

为什么 \newhelp toks 在其定义中使用 \csname 构造?

在 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 等额外的负担。

相关内容