\RequirePackage 和 \usepackage 之间有什么区别?

\RequirePackage 和 \usepackage 之间有什么区别?

我明白那个“惯例是\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加载类文件之前将其设置为定义。您可以使用\RequirePackagebefore \documentclass,这有时可能是必需的。

然而,真正的区别在于逻辑用法:\usepackage是用于文档文件的用户宏,而\RequirePackage是用于描述依赖关系的包和类文件。\usepackage在包内使用 也可以,只要它不是在\RequirePackage之前加载的\documentclass。:-)

答案4

两者都扩展为\@fileswithoptions \@pkgextension。即没有区别。

相关内容