我明白那个“惯例是\RequirePackage
在包或类中以及\usepackage
在文档中使用”,但除此之外,这两个命令之间还有其他实际区别吗?
(例如,我认为这可能是\RequirePackage
一个“更强”的命令,并且你不会遇到 hyperref 不在末尾的问题)
答案1
抱歉,但有区别,你可以写:
\RequirePackage{atbegshi}
\documentclass ....
并不是
\usepackage{atbegshi}
\documentclass ...
答案2
唯一的区别是\usepackage
不能在 之前使用\documentclass
。否则没有功能差异。LaTeX 内核定义\usepackage
为最初发出错误消息,并\documentclass
定义为
\def\documentclass{%
\let\documentclass\@twoclasseserror % a second \documentclass command produces an error
\if@compatibility\else\let\usepackage\RequirePackage\fi % define \usepackage to be the same as \RequirePackage
\@fileswithoptions\@clsextension}
答案3
从技术角度来看\usepackage
,首先要定义错误消息\usepackage before \documentclass
,然后\RequirePackage
在\documentclass
加载类文件之前将其设置为定义。您可以使用\RequirePackage
before \documentclass
,这有时可能是必需的。
然而,真正的区别在于逻辑用法:\usepackage
是用于文档文件的用户宏,而\RequirePackage
是用于描述依赖关系的包和类文件。\usepackage
在包内使用 也可以,只要它不是在\RequirePackage
之前加载的\documentclass
。:-)
答案4
两者都扩展为\@fileswithoptions \@pkgextension
。即没有区别。