我正在尝试理解这种原始语法\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
是原语。