我想使用自定义格式文件来加快编译速度。但是这不能与子文件包裹。
考虑以下最小示例:
preamble.tex
\documentclass[a4paper,12pt]{article}
\usepackage{subfiles}
\usepackage{lipsum}
%%further packages and custom commands
从此我可以使用创建自定义格式
pdflatex -ini -jobname="preamble" "&pdflatex preamble.tex\dump"
其他文件包括:
main.tex
\begin{document}
Here are the contents of my subfile:
\subfile{sub}
\end{document}
通过以下方式编译此作品:
pdflatex -fmt preamble main.tex
sub.tex
\documentclass[main]{subfiles}
\begin{document}
\lipsum
\end{document}
但是通过编译
pdflatex -fmt preamble sub.tex
不起作用并给出错误消息:
! LaTeX Error: Two \documentclass or \documentstyle commands.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.1 \documentclass[main]{
subfiles}
?
我怎样才能让它工作?
答案1
pdflatex -fmt 序言 sub.tex
错误是不言而喻的:通过这种方式,您提供了两个,这与留给要替换的类(在本例中不存在)的文档类\documentclass
不同。这与用此编译单个文件相同subfile
main.tex
错误的代码:
\documentclass[a4paper,12pt]{article}
\usepackage{subfiles}
\usepackage{lipsum}
\documentclass[main]{subfiles}
\documentclass{article}
\begin{document}
\lipsum[1]
\end{document}
可能的解决方案:
1) 留\documentclass
在 main.tex
。那么,问题将是 中preamble.tex
有\usepackage
必须使用的命令 后(main.tex的\documentclass
),而不是之前。幸运的是,这个命令可以用 代替\RequirePackage
。因此,这preamble.tex
将产生一个工作 preamble.fmt
\RequirePackage{subfiles}
\RequirePackage{lipsum}
%%further packages and custom commands
那么应该main.tex
是:
\documentclass[a4paper,12pt]{article} %
\begin{document}
Here are the contents of my subfile:
\subfile{sub}
\end{document}
2) 或者,如果某些代码有问题,请放弃使用非预编译的前导码(融合main.tex
或包含在内 \input{preamble}
)。
3) 如果预编译前言不可或缺(=明显渗透),那么在出现问题时,我猜应该可以混合使用这两种方法(即,预编译/文档前前言加上带有问题代码的传统非预编译/文档后前言)。然而,这看起来像是典型的情况,我很遗憾忽略了 KISS 原则(“保持简单,傻瓜”)。
答案2
尝试将 docmute 包添加到前言格式文件(而不是子文件)中,并在子文件中添加常规文章类。问题是 latex 只允许每个文档有一个文档类,而你在子文件中添加了第二个文档类;docmute 重新定义了 documentclass 命令和文档环境,因此忽略了所包含文件的前言。因此,使用 docmute 和标准包含应该可以解决问题
答案3
我会用两个格式文件来做这件事,一个带有subfiles
文档类,另一个带有article
。正如错误消息所说,您不能documentclass
在单个文件中有两个语句 - 自定义格式文件中有一个语句才算数!