TexStudio 很棒,但我注意到编译时间总是相同的(约 25 秒)。从逻辑上讲,如果 \input 文件未经编辑,编译器应该跳过重新编译。有这样的编译器吗?
答案1
所有 xetex 实现都将以相同的方式工作 tex 具有很少的系统依赖性,因此同一系统上的相同源将尽可能产生相同的结果(xetex 访问系统字体是这里的一个例外)
没有理由假设不变的输入文件将产生不变的输出。
如果您\input{section2.tex}
最近编辑过该文件,并且没有编辑过,则最终的分页效果将有所不同,具体取决于文档中较早的文本是否更改了包含该文件的位置。文件中的任何命令可能具有不同的定义,如果文件已启动,\section{Something}
但您已加载包以使节标题为无衬线和蓝色,则即使该文件未发生更改,最终的标题也将是无衬线和蓝色。
基本上,TeX 不是编译器,它是一种解释型宏扩展语言,根本没有预编译阶段;而且整个语言都大量依赖于上下文(这就是为什么我们总是要求提供完整的测试文档来回答问题)。脱离上下文的片段可能会根据本地定义执行任何操作。
答案2
正如 David 所说,TeX 每次都必须处理所有包含的代码。任何不编译为中间格式的解释型语言都是如此。
这也是宏扩展语言的一个特殊功能,其中每个字母实际上都是一个命令,并且所有命令都可以连续重新定义。您可以在一个文件中定义一整套宏,然后加载第二个文件,以不同的方式重新定义所有宏;或者您甚至可以重新定义 TeX 本身的语法,更改控制字符,并引入各种不可预测的行为。
如果解释器首先编译为字节码,那么可以,只要部分代码是自包含的,它就可以对它们进行中间编译。在编译语言中,当然可以在编译主程序并将它们全部链接在一起之前将模块编译为目标代码。不过,在大多数情况下,我认为这些部分需要是自包含的。
TeX 最接近使用预编译模块的方式是将部分内容编译为 PDF,然后包含 PDF(对于 DVI 也是如此)。我们许多人对图形甚至表格都这样做,这样做是可行的,因为最终主 LaTeX 文件只是调用\includegraphics
,这意味着制作一个特定大小的框并将图像放入其中。如果框是固定大小——也就是说,如果您将所有尺寸指定为\includegraphics
,则更改输入文件不会改变最终文档的布局。同样,如果您将选项添加draft
到您的,\documentclass
那么 TeX 将只绘制一个图片大小的框,但实际上并不包含它。
此类别中的另一种可能性是将一整套宏定义编译为一种格式:
- 如何加快 MacOS X 上非常大的文档的 pdflatex 速度?
- 如何使用多张 TikZ 图片加速 LaTeX 编译?
- 是否可以将 TeX 初始文件(.sty、.cfg、.def)保存在内存中以加快每次编译的速度?
该latexmk
实用程序会跟踪文件的更改时间,以尽可能减少重新编译,并且它具有一种在您编辑文档时不断重新编译文档的模式。