什么是自动加载?

什么是自动加载?

在 LaTeX 内核中,你经常会看到这种情况:

%<*2ekernel|autoload>

它有什么作用?还有其他类似的标记。有关于这些标记的文档吗?

答案1

当 LaTeX2e 发布时,个人电脑的性能远不如现在。此外,TeX 通常在相当少的可用内存下进行编译。

特别是,新字体选择方案 (NFSS2) 的加入给 LaTeX 大型文档带来了一些挑战。因此,开发人员为内存有限的用户提供了一种解决方案:如果在latex.ltx从源文件中提取时设置了自动加载选项,则并非所有内核都包含在通过运行此文件生成的格式中initex:其中某些部分是“按需”包含的,例如环境代码picture

该功能的支持autoload是在 1995 年 6 月发布的 LaTeX 内核更新中引入的,并于 2003 年 12 月停止。

您仍然可以在文件中找到此功能的描述

<TEX DIST ROOT>/doc/latex/base/autoload.txt

在一些小型系统上(如果您的机器无法使用 TeX386 版本,那么最明显的可能是 PC 上的 emTeX),LaTeX 会占用大量可供 TeX 使用的内存,而留下的内存很少,无法存储其他命令、复杂文本(如表格)、浮点数或典型文档中可能出现的交叉引用。请注意,这些限制内置于 TeX 可执行文件中,并不直接对应于您的机器安装的任何物理内存。

为了解决这个问题,我们制作了一个实验 LaTeX 的配置中,某些函数未在格式中预定义,但会在第一次使用时自动从样式文件中加载。如果文档不使用这些功能,这将节省大量内存。

在此版本中,两种环境以这种方式“自动加载”,即“图片”和“制表”,以及用于错误处理、字体加载和高级页面构造的各种内部代码。

答案2

内核文件使用特殊的文字编程编写:LaTeXdtx系统。每个dtx文件都是文档和代码。 docstrip程序提取代码并将其重新排列成 latex 文件。里面的“守卫”<>告诉docstrip代码片段属于哪里。例如,<*2ekernel|autoload>表示代码属于文件latex.ltx latexa.ltx

下文texdoc docstrip将为你详细介绍这些“警卫”。

相关内容