为什么 ispackageloaded 以 @ 命名?

为什么 ispackageloaded 以 @ 命名?

\@ifpackageloaded 我想这个命令不只是被调用的原因\ifpackageloaded

但是使用@还需要做一些额外的工作:

\makeatletter
\@ifpackageloaded{geometry}
 {                               % i the package was loaded 
    \newcommand*{\qw}{\itshape}  % this is enabled, else is not enabled.                                                                                               
 }{}
\makeatother

这是一个安全功能吗?

答案1

LaTeX2e 将诸如此类的函数定义\@ifpackageloaded为“非面向用户的”:它们仅供在包或类中使用,编写文档的用户不应依赖它们。这也使得重新定义此类命令变得非常困难,尤其是在不知道有人这样做的情况下。

基本上,如果宏中有“@”,那么只有真正知道自己在做什么的人才能使用它,更不用说重新定义它了。特别是,编写文档的用户在不知情的情况下重新定义 LaTeX 内核或软件包内部使用的东西是一个坏主意,而 @ 约定排除了这种可能性。

使用“@”约定的另一个原因是避免名称冲突,特别是与用户可能想要使用的其他命令。

相关内容