卸载 LaTeX 包

卸载 LaTeX 包

是否可以卸载 LaTeX 包?

我有一个用于大多数文档的序言文件。现在假设我想使用一个序言文件preamble.tex,但明确不想使用其中加载的某个包。例如,在这个文件中有一行:

\usepackage{mypackage}

然后我想要一个test.tex包含如下内容的文件:

\input{preamble}
\unloadpackage{mypackage}
\usepackage{myotherpackage} %myotherpackage can only be loaded when mypackage is not present

答案1

你可以通过以适当的方式定义名为“ ”的命令和名为“ ”的命令,让LaTeX 相信它已经加载了foo带有选项的包;所以barbaz[email protected][email protected]

\makeatletter
\newcommand{\dontusepackage}[2][]{%
  \@namedef{ver@#2.sty}{9999/12/31}%
  \@namedef{opt@#2.sty}{#1}}
\makeatother

将阻止加载包并且使 LaTeX 对可能传递给它的选项感到满意。

\dontusepackage[bar,baz]{foo}必须发出 \input{preamble}

我一般反对“一次做完就永远做”的序言,因为这会引起类似这样的问题。没有通用的序言,而且后来的发展会使一些软件包过时或至少被新软件包取代。

只需复制preamble.tex到工作目录并根据您正在编写的当前文档的需要进行更改即可。

2023 年更新

LaTeX 内核现在有\disable@package@load,所以咒语是

\makeatletter
\newcommand{\disablepackage}[2]{%
  \disable@package@load{#1}{#2}%
}
\newcommand{\reenablepackage}[1]{%
  \reenable@package@load{#1}%
}
\makeatother

被调用

\disablepackage{foo}{}

在第二个参数中,您可以放入在实际请求加载包时要执行的代码,可能是要在控制台上打印的消息。也可以稍后重新启用加载。

答案2

告诉您的前言mypackage已经“加载”。包不会加载两次:

\makeatletter
\@namedef{[email protected]}{}% a fake for a "loaded" package
\makeatother
\input{preamble}
\usepackage{myotherpackage} %myotherpackage can only be loaded when mypackage is not present

相关内容