我已经包含了几个.tex
文件(它们不包含文件类、开始和结束文档等标题代码)。当我使用包含文件时,\include
一切都正常。但如果我重新编译代码,即使大多数包含(甚至全部)都没有改变,我仍然需要一段时间。
我处理这个问题的基本方法是注释掉我不想编译的包含内容,但我看不出为什么它们不能被“预编译”并每次都重复使用,除非文件.tex
发生变化。
答案1
TeX 以线性方式处理输入文件,虽然有方法可以分割输入(最终基于原语\input
),但这些方法只是为了方便作者。TeX 仍然以线性方式处理所有输入:一旦文件完成,\input
就好像材料都放在一个大文件中一样。
同时,文档某一部分的更改可能会影响另一部分(例如,更改运行标题或页码的设置)。因此,不能简单地说“我可以跳过此输入”。编写输出也是一个线性过程:各个.tex
文件与文档的某些部分之间没有直接联系,.dvi
或者.pdf
TeX 无法获取“旧”页面并“回收”它们。
LaTeX\include
机制确实具有帮助处理较大文档的功能。使用\includeonly
可以只编译文档的一部分,同时保留交叉引用等。但是,这样做会完全跳过未包含的文件,因此您无法获得文档的完整版本。
还有一些方法可以将文档的序言预编译为自定义格式,然后仅重新排版文档正文。例如,请参见mylatexformat
。
答案2
目前还没有办法做到这一点。唯一的方法是使用\include
and \includeonly
(或\excludeonly
)并直接跳过某些章节。
但是,如果文件没有更改,则可以从\include
文件生成 PDF 并将其包含在内。我已经为其他应用程序编写了类似的代码:\includepdf
standalone
。我已经为其他应用程序编写了这样的代码:可以在后台编译自己的文档以访问生成的 PDF,请参阅PDF完成并关闭后是否进行Shell逃逸?尤其是一个 TeX 文件可以输出为多个 PDF 文件吗?(均由 Ulrike Fischer 撰写)。可以使用我的filemod
包检查文件更改:(La)TeX 可以比较两个外部文件的时间戳吗?。
\include
因此,只有文件发生变化时,新包才能重新定义以生成 PDF .tex
。处理子文件和图像中的更改更加困难。然后使用组装文档pdfpages
。但是,一个主要缺点是所有 PDF 注释(如超链接)都将消失,因为pdftex
在包含的 PDF 文件中不支持它们。因此,这应该仅用作草稿模式的一种形式。
一个替代但类似的方法是使用一个脚本或 Makefile 检查文件更改并使用以下命令编译每个章节的文档:
pdflatex -jobname "chapt1" "\includeonly{chapter1}\input{main}"
然后,您就可以直接查看 PDF。也可以有一个主 PDF,其书签指向其他 PDF(包含章节),这样您就可以浏览整个文档。这也允许在章节 PDF 中使用超链接等。
答案3
我认为这种方法无法产生适用于广泛文档的结果。
在我看来,你的假设是错误的:.tex
由于多种原因,文件没有改变并不意味着它的排版版本会保持不变。
当其他文件发生更改时,其中的交叉引用可能无法正确解析。
拨打电话
\today
可能会产生不同的日期。先前文件的更改
.tex
可能会产生不同的章节或部分编号。先前文件的更改
.tex
可能会产生不同的页码。最重要的是,即使编号没有改变,根文件中命令定义的改变也可能会彻底改变输出。
您的流程会处理所有这些问题吗?与这些约束无关的文档最好作为单独的完整 TeX 文档进行管理,然后与外部实用程序(例如)合并pdftk
。当然,您可以编写一个 Lua 脚本来包装这些文档的编译并进行合并。
答案4
以下是我执行此操作的方式:
我有一个主文档,其中输入了我的序言并将我的所有章节包含为 TEX 文件。
在草稿模式下,我会对那些我不想编写的章节进行评论。我还对目录和图表进行了评论。