![为什么 \newhelp toks 在其定义中使用 \csname 构造?](https://linux22.com/image/448946/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Cnewhelp%20toks%20%E5%9C%A8%E5%85%B6%E5%AE%9A%E4%B9%89%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Ccsname%20%E6%9E%84%E9%80%A0%EF%BC%9F.png)
在 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 等额外的负担。