假设我有一份文件:
% Preamble
\usepackage{subfiles}
% Preamble
\begin{document}
\maketitle
\subfile{FileA}
\subfile{FileB}
\subfile{FileC}
\end{document}
一些问题:
- 假设文件尚未编译,而我编译了 FileA。标题会出现吗?还是我必须运行主文件才能显示标题?
- 据我所知,子文件的编译与其余子文件的编译是独立的,即仅编译该部分,而编译主文件与我使用
\input
或仅从子文件中获取整个 TeX 代码相同。有没有办法同时编译一些子文件,而其他子文件保持不变(例如,子文件的结果不会改变,而不是不出现在 pdf 中)? - 如果我编译一个子文件,并且多个子文件的结果与该子文件位于同一页面上,那么后续子文件的结果是否会被编译该子文件的结果“覆盖”?
- 我刚刚编译了一个子文件,由于某种原因,编译时间与编译主文件的时间相同。这是应该发生的吗?
- 编辑至 4:我刚刚关闭了主文件并运行了子文件,结果发现结果是编译整个文件而不是仅编译子文件,这似乎与子文件“可自行编译”相矛盾。有人可以详细说明吗?
顺便说一下,我使用 TeXStudio。
答案1
评论太长了。
关于问题 1:标题出现在包含\maketitle
命令的文档中。如果它在主文件中,而您编译了某个子文件,则标题不会出现,因为子文件只从主文件中获取前言,而忽略了其余部分。
针对问题 2:这个问题并不特定于subfiles
,答案基本上是“不”。据我所知,没有一个 TeX 处理器执行缓存并仅排版已更改的部分。一些软件包提供了将密集计算的结果缓存以供下次运行的可能性(例如 中的外部化pgfplots
)。在更大的范围内,您可以使用构建项目的工具(例如make
等ant
)来仅编译项目中已更改的部分。但对于 TeX 文件,它仍将调用排版整个文件的 tex 处理器。
针对问题 3:我认为这是对 TeX 和子文件包功能的误解。排版主文档时,它将加载tex
子文件的源,忽略任何pdf
。因此,排版任何子文件都会为子文件生成新的,但主文件的 pdf 保持不变。TeXStudio 可能会掩盖您正在编辑实际正在动态排版以供查看的文件pdf
的事实。tex
pdf
关于问题 4:排版子文件时的处理时间肯定比排版主文件时要短。但是,在大多数情况下,您不会注意到这一点,因为启动程序和打开文件比排版某些文本要花费更多时间。只有当主文件很大和/或某些部分包含计算密集型图形时,您才会看到真正的时间节省。
针对问题 5:这可能是 TeXStudio 和/或使用问题。TeXStudio 可能总是排版设置为“当前”的文件,并且它可能不知道您希望它仅排版子文件。
一般建议:从单个 tex 文件开始。如果文件太大,使用\input
或构造它\include
。只有当您确实需要能够独立排版文档的一部分时,才开始尝试使用 之类的软件包subfiles
。