![mylatexformat | 转储‘之后’加载的包?](https://linux22.com/image/430111/mylatexformat%20%7C%20%E8%BD%AC%E5%82%A8%E2%80%98%E4%B9%8B%E5%90%8E%E2%80%99%E5%8A%A0%E8%BD%BD%E7%9A%84%E5%8C%85%EF%BC%9F.png)
我一直在测试 mylatexformat 作为加速编译各种调用的文档的一种方法很多序言中的 (30-40) 个软件包(包括一些大型软件包,如 TikZ)——文档中拉取序言会消耗大量总编译时间。到目前为止,似乎已经奏效(将文档的编译时间缩短到尝试此方法之前的约 10-20%)。
但是,有一件事我很疑惑。假设您的文档使用了包 A、B、...E、F。包 A -> E 的大多数选项/标志都是固定的,因此使用 mylatexformat,您可以将它们“转储”到生成的格式文件中。但是,如果您需要/想要针对给定的编译调整包 F 的设置,该怎么办?这似乎不可行。
例如,如果我的 .tex 文档中有(比如说)
%&"My.Document.Template"
\usepackage[bunch of tweaked options]{F}
\begin{document}
...
\end{document}
然后编译会忽略包 F。换句话说,一旦拉入“dumped”格式的文件(第一行),那么之后的所有内容都会被忽略,直到解析 \begin{document} 为止。
我是不是漏掉了什么?有没有办法把大多数包放入一个格式文件中,但在拉入该格式文件后再加载一些包?根据我迄今为止的尝试,答案似乎是“不”。不过,我不确定,因为 mylatexformat 的文档提到 minitoc 包是格式中不能包含的东西(“您必须在 \usepackage{minitoc} 之前使用 \endofdump”),这似乎意味着它是读入格式文件后,可以引入另一个包(或更多)。如果可以...怎么做?
提前致谢...
答案1
mylatexformat
允许您将预加载的序言保留在文件中。这样可以将序言和文档的来源放在一起,记录使用了哪些包,帮助编辑器通过扫描 \documentclass 自动检测 LaTeX 文件,并且更容易使用带有和不带有自定义格式的 ame 文档。为了避免再次加载包或类时出现问题,它会在加载格式时跳过您的序言。可以通过将序言分成忽略部分和非预加载部分来避免这种情况\endofdump
:
%&"My.Document.Template"
% This is ignored and might (or might not) contain your original preamble..., e.g.
\documentclass{my_super_class}
\usepackage{A, B, C, D, E}
\endofdump
% This gets executed everytime you compile.
\usepackage[bunch of tweaked options]{F}
\begin{document}
...
\end{document}
答案2
这取决于包裹。
一些包使用选项来设置以后可更改的标志,例如 hyperref 选项大多只是为了方便,您可以\hypersetup{...}
在加载包后使用来做同样的事情。
其他包在加载时会改变其行为,例如amsmath
实现居中或左对齐方程,但只有一组根据是否fleqn
使用而定义,因此如果您预先加载了用于fleqn
居中数学显示的代码的包,则不可用,并且您无法轻松将其恢复。(如果您尝试取消定义某些内容以便可以重新加载包,这在理论上是可行的,但比简单地使用正常格式要多得多)