为什么Tex / Latex在后续运行中没有加速?

我真的很想知道,为什么即使最近的Tex / Latex系统也没有使用任何缓存来加速以后的运行。每次我修复一个逗号*时,调用Latex花费我大约相同的时间,因为它需要加载和转换每个图片文件。 (*我知道即使更改一个微小的逗号也会影响整个结构,但当然,一个编写良好的缓存格式可以看到它的影响。另外,可能会出现这样的情况:只要速度快,就不需要100%的正确性。) Tex的语言中是否存在使得复杂或不可能完成的事情,或者只是在Tex的原始实现中,没有必要这样做(因为在那些大型计算机上它本来会很慢)? 但另一方面,为什么这不会让其他人如此烦恼以至于他们已经启动了一个具有某种缓存的分支(或者将Tex文件透明地转换为更快解析的格式)? 有什么办法可以加快Latex的后续运行吗?除了将所有内容放入chapterXX.tex文件然后将它们评论出来之外?     
已邀请:
让我们试着了解TeX的工作原理。写下面的内容会发生什么?
tex.exe myfile.tex
TeX逐字节读取您的文件。首先,TeX将每个字符转换成对
<category, ascii-code>
。每个字符都有类别代码和ascii代码。类别代码表示该字符是左括号(
{
)或进入数学模式(
$
),符号宏(例如
~
)或字母(
A-Z
a-z
)。 如果TeX获得类别代码为11(字母)或12(其他符号:数字,逗号,句号)的字符,TeX将启动一个段落。您想要缓存所有段落。 假设您在文档中更改了某些内容。 TeX如何检查更改后的所有段落是否相同?可能是你改变了一些char的类别。我是你改变了一些宏的含义。或者你已经删除了
}
,从而改变了当前的字体。 为了确保段落是相同的,你必须确保段落中的所有字符都是相同的,所有字符类别是相同的,当前字体是相同的,所有数学字体是相同的,一些值是一些内部变量是相同的(例如,
hsize
vsize
pretolerance
tolerance
hypenpenalty
exhyphenpenalty
widowpenalty
spaceskip
,......,........) 您可以确定只有在您的更改之前所有参数都是相同的。但在这种情况下,您必须在每个段落后保留所有状态。 你的系统
SuperCachedTeX
非常复杂。不是吗?     
如果您使用的是pdftex,那么您可以在命令行上使用
--draftmode
进行首次运行。这指示pdftex不生成PDF。 当然,很多东西都可以缓存(例如图形信息),但TeX的工作方式很难做到。 TeX启动时有一个相当复杂的初始化,一个TeX运行总是意味着写出一个PDF。为了进行缓存,您需要将数据保存在内存中(以提高效率)。 您可以使用IPC并与守护进程通信以获取缓存的信息。但这将涉及大量编程。 TeX是出于正常目的而如此快速,以至于这并没有真正获得太多收益。但另一方面,这是一个很好的问题,因为我已经看到LaTeX运行(在当前的硬件上)运行> 10小时,这将从缓存中受益。     
又一个答案,并非严格相关: 您可以使用LaTeX宏
include{...}
includeonly{}
,您可以仅为子集重新运行文档。但这不是缓存,也不是为您提供完整的文档。     
有一些解决方案,例如preview-latex,它可以将内容预编译到专用格式文件中以实现速度目的。您需要记住TeX在本地优化页面。引擎级别的材料在特定页面上没有固定,因此您不能只是“重新TeX一页”。     
实际上,正确的答案是(IMO):LaTeX已经在其输出文件中缓存信息(
.aux
,其他包的附加文件)。因此,如果您添加逗号,则会重复使用此信息,因此排版运行比没有这个'20ѭ文件快得多。     
Tex确实有一个缓存工具,命名为格式文件,我认为,按照Alexey对代表Tex状态的问题的宝贵总结,应该可以使用它们允许在任何页面弹出后恢复编辑。 主要问题是分页符会影响段落或浮点数,这些可能不会出现在文本中的特定点,但可能会在执行宏时执行,这些宏根据调用它们时传递给它们的瞬态状态而被调用。 因此,为了使创建“断点”的想法发挥作用,人们需要破解Tex内部以转储除格式文件中的规范转储之外的其他信息,并将它们与辅助文件的状态打包在一起。考虑到约瑟夫对Tex片段预览器所说的话,为什么有人会讨厌黑客这样做呢?     

要回复问题请先登录注册