是否可以卸载 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
带有选项的包;所以bar
baz
[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