尝试理解 \def\def@ 语法原语

尝试理解 \def\def@ 语法原语

我正在尝试理解这种原始语法\def

\DeclareOption{man}{%
\def\def@man{\@manmode}
}

为什么要进行这种原始嵌套?我不明白为什么会有两个\def句子连接在一起。

答案1

\DeclareOption{<opt>}{<stuff>}通常,您会在样式 ( .sty) 和类 ( ) 文件中看到这些声明.cls。它们允许用户使用具有某些参数规范的样式/包或类,这些参数规范可能会影响使用。在上述情况下,选项声明为man\def或简称\def@man\@manmode

\def\def@man{\@manmode}

还应该注意,在.sty或中.cls@字符具有特殊含义,或者从技术上讲,是不同的类别代码。具体来说,@的作用与任何其他非数字字母一样,因此可以构成宏名称的一部分。也就是说,它构成\def@man一个有效的宏名称,类似于\@manmode。在常规文档中陈述上述内容的另一种方式是需要类似

\makeatletter
\def\def@man{\@manmode}
\makeatother

多于,\makeatletter\makeatother执行与样式和类文件固有相同的任务。

答案2

有两种读取方法。如果在从文件读取上述文本时将\def\def@man{...}catcode设置为 11(字母),则控制序列在此处定义。@def@man

如果 catcode@设置为 12(其他,这更常见)则将\def\def@man{...}TeX 原语重新定义\def为带有强制分隔符的宏@man,并且(可能)下一个 TeX 处理会被破坏,因为许多宏使用\def并假定它\def是原语。

相关内容